Support for Cisco ML2 Mech Driver
Partially Implements: blueprint support-ml2-nexus-driver Change-Id: I5e0486c9db22abfcbab205e6f57bbafe8f0b5dd4
This commit is contained in:
parent
dd91a68ce4
commit
68ddc7a811
@ -19,8 +19,9 @@ class neutron::params {
|
||||
$linuxbridge_server_package = 'openstack-neutron-linuxbridge'
|
||||
$linuxbridge_config_file = '/etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini'
|
||||
|
||||
$cisco_server_package = 'openstack-neutron-cisco'
|
||||
$cisco_config_file = '/etc/neutron/plugins/cisco/cisco_plugins.ini'
|
||||
$cisco_server_package = 'openstack-neutron-cisco'
|
||||
$cisco_config_file = '/etc/neutron/plugins/cisco/cisco_plugins.ini'
|
||||
$cisco_ml2_config_file = '/etc/neutron/plugins/ml2/ml2_conf_cisco.ini'
|
||||
|
||||
$nvp_server_package = 'openstack-neutron-nicira'
|
||||
|
||||
@ -69,8 +70,9 @@ class neutron::params {
|
||||
$linuxbridge_server_package = 'neutron-plugin-linuxbridge'
|
||||
$linuxbridge_config_file = '/etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini'
|
||||
|
||||
$cisco_server_package = 'neutron-plugin-cisco'
|
||||
$cisco_config_file = '/etc/neutron/plugins/cisco/cisco_plugins.ini'
|
||||
$cisco_server_package = 'neutron-plugin-cisco'
|
||||
$cisco_config_file = '/etc/neutron/plugins/cisco/cisco_plugins.ini'
|
||||
$cisco_ml2_config_file = '/etc/neutron/plugins/ml2/ml2_conf_cisco.ini'
|
||||
|
||||
$nvp_server_package = 'neutron-plugin-nicira'
|
||||
|
||||
|
63
manifests/plugins/ml2/cisco/nexus.pp
Normal file
63
manifests/plugins/ml2/cisco/nexus.pp
Normal file
@ -0,0 +1,63 @@
|
||||
#
|
||||
# Configure the Mech Driver for cisco neutron plugin
|
||||
# More info available here:
|
||||
# https://wiki.openstack.org/wiki/Neutron/ML2/MechCiscoNexus
|
||||
#
|
||||
# === Parameters
|
||||
#
|
||||
# [*neutron_config*]
|
||||
# Neutron switch configuration for ml2_cisco_conf.ini
|
||||
# Example nexus config format:
|
||||
# { 'switch_hostname' => {'username' => 'admin',
|
||||
# 'ssh_port' => 22,
|
||||
# 'password' => "password",
|
||||
# 'ip_address' => "172.18.117.28",
|
||||
# 'servers' => {
|
||||
# 'control01' => "portchannel:20",
|
||||
# 'control02' => "portchannel:10"
|
||||
# }}}
|
||||
#
|
||||
|
||||
class neutron::plugins::ml2::cisco::nexus (
|
||||
$nexus_config = undef,
|
||||
)
|
||||
{
|
||||
if !$nexus_config {
|
||||
fail('No nexus config specified')
|
||||
}
|
||||
|
||||
# For Ubuntu: This package is not available upstream
|
||||
# Please use the source from:
|
||||
# https://launchpad.net/~cisco-openstack/+archive/python-ncclient
|
||||
# and install it manually
|
||||
package { 'python-ncclient':
|
||||
ensure => installed,
|
||||
} ~> Service['neutron-server']
|
||||
|
||||
Neutron_plugin_ml2<||> ->
|
||||
file { $::neutron::params::cisco_ml2_config_file:
|
||||
owner => 'root',
|
||||
group => 'root',
|
||||
content => template('neutron/ml2_conf_cisco.ini.erb'),
|
||||
} ~> Service['neutron-server']
|
||||
|
||||
file {'/var/lib/neutron/.ssh':
|
||||
ensure => directory,
|
||||
owner => 'neutron',
|
||||
require => Package['neutron-server']
|
||||
}
|
||||
|
||||
create_resources(neutron::plugins::ml2::cisco::nexus_creds, $nexus_config)
|
||||
|
||||
if $::osfamily == 'Debian' {
|
||||
file_line { '/etc/default/neutron-server:NEUTRON_PLUGIN_CONFIG':
|
||||
path => '/etc/default/neutron-server',
|
||||
match => '^NEUTRON_PLUGIN_CONFIG=(.*)$',
|
||||
line => "NEUTRON_PLUGIN_CONFIG=${::neutron::params::cisco_ml2_config_file}",
|
||||
require => [ Package['neutron-server'],
|
||||
Package['neutron-plugin-ml2']],
|
||||
notify => Service['neutron-server'],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
30
manifests/plugins/ml2/cisco/nexus_creds.pp
Normal file
30
manifests/plugins/ml2/cisco/nexus_creds.pp
Normal file
@ -0,0 +1,30 @@
|
||||
#
|
||||
# Configure the Mech Driver for cisco neutron plugin
|
||||
# More info available here:
|
||||
# https://wiki.openstack.org/wiki/Neutron/ML2/MechCiscoNexus
|
||||
#
|
||||
#
|
||||
# neutron::plugins::ml2::cisco::nexus_creds used by
|
||||
# neutron::plugins::ml2::cisco::nexus
|
||||
#
|
||||
|
||||
define neutron::plugins::ml2::cisco::nexus_creds(
|
||||
$username,
|
||||
$password,
|
||||
$servers,
|
||||
$ip_address,
|
||||
$ssh_port
|
||||
) {
|
||||
|
||||
neutron_plugin_cisco_credentials {
|
||||
"${username}/username": value => $username;
|
||||
"${password}/password": value => $password;
|
||||
}
|
||||
|
||||
exec {'nexus_creds':
|
||||
unless => "/bin/cat /var/lib/neutron/.ssh/known_hosts | /bin/grep ${username}",
|
||||
command => "/usr/bin/ssh-keyscan -t rsa ${username} >> /var/lib/neutron/.ssh/known_hosts",
|
||||
user => 'neutron',
|
||||
require => Package['neutron-server']
|
||||
}
|
||||
}
|
68
spec/classes/neutron_plugins_cisco_ml2_spec.rb
Normal file
68
spec/classes/neutron_plugins_cisco_ml2_spec.rb
Normal file
@ -0,0 +1,68 @@
|
||||
#
|
||||
# Unit tests for neutron::plugins::ml2 class
|
||||
#
|
||||
|
||||
require 'spec_helper'
|
||||
|
||||
describe 'neutron::plugins::ml2::cisco::nexus' do
|
||||
|
||||
let :pre_condition do
|
||||
"class { 'neutron::server': auth_password => 'password'}
|
||||
class { 'neutron':
|
||||
rabbit_password => 'passw0rd',
|
||||
core_plugin => 'neutron.plugins.ml2.plugin.Ml2Plugin' }"
|
||||
end
|
||||
|
||||
let :default_params do
|
||||
{
|
||||
:nexus_config => nil
|
||||
}
|
||||
end
|
||||
|
||||
let :params do
|
||||
{}
|
||||
end
|
||||
|
||||
let :facts do
|
||||
{ :osfamily => 'Debian' }
|
||||
end
|
||||
|
||||
context 'fail when missing nexus_config' do
|
||||
it 'should fails to configure cisco nexus driver' do
|
||||
expect { subject }.to raise_error(Puppet::Error, /No nexus config specified/)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when using cisco' do
|
||||
let (:nexus_config) do
|
||||
{ 'cvf2leaff2' => {'username' => 'prad',
|
||||
"ssh_port" => 22,
|
||||
"password" => "password",
|
||||
"ip_address" => "172.18.117.28",
|
||||
"servers" => {
|
||||
"control02" => "portchannel:20",
|
||||
"control01" => "portchannel:10"
|
||||
}
|
||||
}
|
||||
}
|
||||
end
|
||||
|
||||
before :each do
|
||||
params.merge!(:nexus_config => nexus_config )
|
||||
end
|
||||
|
||||
it 'installs ncclient package' do
|
||||
should contain_package('python-ncclient').with(
|
||||
:ensure => 'installed'
|
||||
)
|
||||
end
|
||||
|
||||
it 'configures /etc/default/neutron-server' do
|
||||
should contain_file_line('/etc/default/neutron-server:NEUTRON_PLUGIN_CONFIG').with(
|
||||
:line => 'NEUTRON_PLUGIN_CONFIG=/etc/neutron/plugins/ml2/ml2_conf_cisco.ini',
|
||||
:require => ['Package[neutron-server]', 'Package[neutron-plugin-ml2]']
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
59
templates/ml2_conf_cisco.ini.erb
Normal file
59
templates/ml2_conf_cisco.ini.erb
Normal file
@ -0,0 +1,59 @@
|
||||
[ml2_cisco]
|
||||
|
||||
# (StrOpt) A short prefix to prepend to the VLAN number when creating a
|
||||
# VLAN interface. For example, if an interface is being created for
|
||||
# VLAN 2001 it will be named 'q-2001' using the default prefix.
|
||||
#
|
||||
# vlan_name_prefix = q-
|
||||
# Example: vlan_name_prefix = vnet-
|
||||
|
||||
# (BoolOpt) A flag to enable round robin scheduling of routers for SVI.
|
||||
# svi_round_robin = False
|
||||
|
||||
#
|
||||
# (StrOpt) The name of the physical_network managed via the Cisco Nexus Switch.
|
||||
# This string value must be present in the ml2_conf.ini network_vlan_ranges
|
||||
# variable.
|
||||
#
|
||||
# managed_physical_network =
|
||||
# Example: managed_physical_network = physnet1
|
||||
|
||||
# Cisco Nexus Switch configurations.
|
||||
# Each switch to be managed by Openstack Neutron must be configured here.
|
||||
#
|
||||
# Cisco Nexus Switch Format.
|
||||
# [ml2_mech_cisco_nexus:<IP address of switch>]
|
||||
# <hostname>=<intf_type:port> (1)
|
||||
# ssh_port=<ssh port> (2)
|
||||
# username=<credential username> (3)
|
||||
# password=<credential password> (4)
|
||||
#
|
||||
# (1) For each host connected to a port on the switch, specify the hostname
|
||||
# and the Nexus physical port (interface) it is connected to.
|
||||
# Valid intf_type's are 'ethernet' and 'port-channel'.
|
||||
# The default setting for <intf_type:> is 'ethernet' and need not be
|
||||
# added to this setting.
|
||||
# (2) The TCP port for connecting via SSH to manage the switch. This is
|
||||
# port number 22 unless the switch has been configured otherwise.
|
||||
# (3) The username for logging into the switch to manage it.
|
||||
# (4) The password for logging into the switch to manage it.
|
||||
#
|
||||
# Example:
|
||||
# [ml2_mech_cisco_nexus:1.1.1.1]
|
||||
# compute1=1/1
|
||||
# compute2=ethernet:1/2
|
||||
# compute3=port-channel:1
|
||||
# ssh_port=22
|
||||
# username=admin
|
||||
# password=mySecretPassword
|
||||
|
||||
<% nexus_config.each do |switch_hostname, switch_data| %>
|
||||
[ML2_MECH_CISCO_NEXUS:<%= switch_data['ip_address'] %>]
|
||||
<%- switch_data['servers'].each do|host_name, port| -%>
|
||||
<%=host_name-%>=<%= port %>
|
||||
<%- end -%>
|
||||
ssh_port=<%= switch_data['ssh_port'] %>
|
||||
username=<%= switch_data['username'] %>
|
||||
password=<%= switch_data['password'] %>
|
||||
<% end %>
|
||||
|
Loading…
x
Reference in New Issue
Block a user