Browse Source

Deprecate support of Nexus 1000v driver

... because it was already removed from networking-cisco[1].

[1] 0730ec9e6b

Change-Id: I3ff88e3192254e04cfa577c3bff5e154885ca1a8
changes/45/768845/1
Takashi Kajinami 10 months ago
parent
commit
320da88fea
  1. 131
      manifests/agents/n1kv_vem.pp
  2. 23
      manifests/plugins/ml2/cisco/nexus1000v.pp
  3. 4
      releasenotes/notes/deprecate-n1kv-driver-b851f8fbfcef8a48.yaml
  4. 260
      spec/classes/neutron_agents_n1kv_vem_spec.rb
  5. 74
      spec/classes/neutron_plugins_ml2_cisco_nexus1000v_spec.rb
  6. 184
      templates/n1kv.conf.erb

131
manifests/agents/n1kv_vem.pp

@ -1,5 +1,6 @@
# == Class: n1kv_vem
#
# DEPRECATED !
# Deploy N1KV VEM on compute and network nodes.
# Support exists and tested for RedHat.
# (For Ubuntu/Debian platforms few changes and testing pending.)
@ -121,133 +122,5 @@ class neutron::agents::n1kv_vem (
$fastpath_flood = 'enable'
) {
include neutron::deps
include neutron::params
require vswitch::ovs
Exec { path => [ '/bin/', '/sbin/' , '/usr/bin/', '/usr/sbin/' ] }
if($::osfamily != 'Redhat') {
#current support exists for Redhat family.
#Support for Debian will be added soon.
fail("Unsupported osfamily ${::osfamily}")
}
#Check source of n1kv-vem image:yum-repo (or) local file in 'files' directory
if $n1kv_source != '' {
if ($n1kv_source =~ /^http/) or ($n1kv_source =~ /^ftp/) {
$vemimage_uri = 'repo'
} else {
$vemimage_uri = 'file'
$vemtgtimg = "/var/n1kv/${n1kv_source}"
}
} else {
$vemimage_uri = 'unspec'
}
package { 'libnl':
ensure => $package_ensure,
name => $::neutron::params::libnl_package,
tag => ['neutron-support-package'],
}
file {
'/etc/n1kv':
ensure => directory,
owner => 'root',
group => 'root',
mode => '0755';
'/var/n1kv':
ensure => directory,
owner => 'root',
group => 'root',
mode => '0755',
}
#specify template corresponding to 'n1kv.conf'
file {'/etc/n1kv/n1kv.conf':
ensure => present,
owner => 'root',
group => 'root',
mode => '0664',
content => template('neutron/n1kv.conf.erb'),
require => File['/etc/n1kv'],
}
if $vemimage_uri == 'file' {
#specify location on target-host where image file will be downloaded to.
#Later vem package: 'nexus1000v' will be installed from this file.
file { $vemtgtimg:
owner => 'root',
group => 'root',
mode => '0664',
source => "puppet:///modules/neutron/${n1kv_source}",
require => File['/var/n1kv'],
}
package {'nexus1000v':
ensure => $n1kv_version,
provider => $::neutron::params::package_provider,
source => $vemtgtimg,
tag => ['neutron-support-package', 'openstack'],
require => File[$vemtgtimg]
}
} else {
if $vemimage_uri == 'repo' {
#vem package: 'nexus1000v' will be downloaded and installed
#from below repo.
yumrepo { 'cisco-vem-repo':
baseurl => $n1kv_source,
descr => 'Repo for VEM Image',
enabled => 1,
gpgcheck => 1,
gpgkey => "${n1kv_source}/RPM-GPG-KEY"
#proxy => '_none_',
}
warning('cisco-vem-repo repository management is deprecated, it will be dropped in a future release.')
}
package {'nexus1000v':
ensure => $package_ensure,
tag => ['neutron-support-package', 'openstack'],
}
}
warning('nexus1000v package management is deprecated, it will be dropped in a future release.')
if $manage_service {
if $enable {
$service_ensure = 'running'
} else {
$service_ensure = 'stopped'
}
}
service { 'nexus1000v':
ensure => $service_ensure,
}
warning('nexus1000v service management is deprecated, it will be dropped in a future release.')
#Upon config change in 'n1kv.conf' execute below 'vemcmd reread config'.
#No need to restart service.
exec { 'vemcmd reread config':
subscribe => File['/etc/n1kv/n1kv.conf'],
refreshonly => true,
require => Service['nexus1000v']
}
if $vteps_in_same_subnet == true {
$my_sysctl_settings = {
'net.ipv4.conf.default.rp_filter' => { value => 2 },
'net.ipv4.conf.all.rp_filter' => { value => 2 },
'net.ipv4.conf.default.arp_ignore' => { value => 1 },
'net.ipv4.conf.all.arp_ignore' => { value => 1 },
'net.ipv4.conf.all.arp_announce' => { value => 2 },
'net.ipv4.conf.default.arp_announce' => { value => 2 },
}
create_resources(sysctl::value,$my_sysctl_settings)
}
Package['libnl'] -> Package['nexus1000v']
Service['openvswitch'] ~> Package['nexus1000v']
File['/etc/n1kv/n1kv.conf'] -> Package['nexus1000v']
Package['nexus1000v'] ~> Service['nexus1000v']
warning('The support N1kv driver was deprecated and has no effect')
}

23
manifests/plugins/ml2/cisco/nexus1000v.pp

@ -1,4 +1,5 @@
#
# DEPRECATED!!
# Configure the Mech Driver for cisco nexus 1000v neutron plugin
#
# === Parameters
@ -85,26 +86,8 @@ class neutron::plugins::ml2::cisco::nexus1000v (
$max_vsm_retries = '2',
$restrict_policy_profiles = 'False',
$enable_vif_type_n1kv = 'False',
)
{
) {
include neutron::deps
include neutron::plugins::ml2::cisco
neutron_plugin_ml2 {
'ml2_cisco_n1kv/n1kv_vsm_ips' : value => $n1kv_vsm_ip;
'ml2_cisco_n1kv/username' : value => $n1kv_vsm_username;
'ml2_cisco_n1kv/password' : value => $n1kv_vsm_password, secret => true;
'ml2_cisco_n1kv/default_policy_profile' : value => $default_policy_profile;
'ml2_cisco_n1kv/default_vlan_network_profile' : value => $default_vlan_network_profile;
'ml2_cisco_n1kv/default_vxlan_network_profile' : value => $default_vxlan_network_profile;
'ml2_cisco_n1kv/poll_duration' : value => $poll_duration;
'ml2_cisco_n1kv/http_pool_size' : value => $http_pool_size;
'ml2_cisco_n1kv/http_timeout' : value => $http_timeout;
'ml2_cisco_n1kv/sync_interval' : value => $sync_interval;
'ml2_cisco_n1kv/max_vsm_retries' : value => $max_vsm_retries;
'ml2_cisco_n1kv/restrict_policy_profiles' : value => $restrict_policy_profiles;
'ml2_cisco_n1kv/enable_vif_type_n1kv' : value => $enable_vif_type_n1kv;
}
warning('The support N1kv driver was deprecated and has no effect')
}

4
releasenotes/notes/deprecate-n1kv-driver-b851f8fbfcef8a48.yaml

@ -0,0 +1,4 @@
---
deprecations:
- |
Support for Nexus 1000v driver has been deprecated and has no effect now.

260
spec/classes/neutron_agents_n1kv_vem_spec.rb

@ -1,260 +0,0 @@
require 'spec_helper'
describe 'neutron::agents::n1kv_vem' do
shared_examples 'neutron::agents::n1kv_vem' do
it 'should have a n1kv-vem config file' do
should contain_file('/etc/n1kv/n1kv.conf').with(
:ensure => 'present',
:owner => 'root',
:group => 'root',
:mode => '0664'
)
end
it 'install n1kv-vem' do
should contain_service('openvswitch').with_notify(['Package[nexus1000v]'])
should contain_package('nexus1000v').with_notify(['Service[nexus1000v]'])
should contain_service('nexus1000v').with_ensure('running')
end
context 'with local file vem rpm' do
let :params do
{
:n1kv_source => 'vem.rpm'
}
end
it 'verify dependency' do
should contain_package('nexus1000v').with_source('/var/n1kv/vem.rpm')
should contain_file('/var/n1kv/vem.rpm').that_requires('File[/var/n1kv]')
should contain_file('/var/n1kv/vem.rpm').with(
:owner => 'root',
:group => 'root',
:mode => '0664'
)
end
end
context 'remote vem rpm' do
let :params do
{
:n1kv_source => 'http://www.cisco.com/repo'
}
end
it 'verify dependency' do
should contain_package('nexus1000v').without_source
should contain_yumrepo('cisco-vem-repo').with(
:baseurl => 'http://www.cisco.com/repo',
:enabled => 1
)
end
end
it 'execute reread config upon config change' do
should contain_exec('vemcmd reread config') \
.that_subscribes_to('File[/etc/n1kv/n1kv.conf]')
end
context 'verify n1kv.conf default' do
let :params do
{
:n1kv_vsm_ip => '9.0.0.1',
:n1kv_vsm_ipv6 => '::3',
:n1kv_vsm_domain_id => 900,
:host_mgmt_intf => 'eth9',
:portdb => 'ovs',
:fastpath_flood => 'enable'
}
end
it do
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^l3control-ipaddr 9.0.0.1/)
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^l3control-ipv6addr ::3/)
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^switch-domain 900/)
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^host-mgmt-intf eth9/)
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^portdb ovs/)
should contain_file('/etc/n1kv/n1kv.conf') \
.without_content(/^phys/)
should contain_file('/etc/n1kv/n1kv.conf') \
.without_content(/^virt/)
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^node-type compute/)
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^fastpath-flood enable/)
end
end
context 'verify n1kv.conf svs-mode with default IPv6 address' do
let :params do
{
:n1kv_vsm_ipv6 => '::1'
}
end
it do
should contain_file('/etc/n1kv/n1kv.conf') \
.without_content(/^svs-mode V6/)
end
end
context 'verify n1kv.conf svs-mode with non-default IPv6 address' do
let :params do
{
:n1kv_vsm_ipv6 => '::3'
}
end
it do
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^svs-mode V6/)
end
end
context 'verify node_type' do
let :params do
{
:node_type => 'network',
}
end
it do
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^node-type network/)
should contain_file('/etc/n1kv/n1kv.conf') \
.without_content(/^node-type compute/)
end
end
context 'verify portdb' do
let :params do
{
:portdb => 'vem',
}
end
it do
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^portdb vem/)
should contain_file('/etc/n1kv/n1kv.conf') \
.without_content(/^portdb ovs/)
end
end
context 'verify fastpath_flood' do
let :params do
{
:fastpath_flood => 'disable',
}
end
it do
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^fastpath-flood disable/)
should contain_file('/etc/n1kv/n1kv.conf') \
.without_content(/^fastpath-flood enable/)
end
end
context 'verify n1kv.conf with uplinks' do
let :params do
{
:uplink_profile => { 'eth1' => 'prof1',
'eth2' => 'prof2'
}
}
end
it do
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^phys eth1 profile prof1/)
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^phys eth2 profile prof2/)
end
end
context 'verify n1kv.conf with vtep info' do
let :params do
{
:vtep_config => { 'vtep1' => { 'profile' => 'profint',
'ipmode' => 'dhcp'
},
'vtep2' => { 'profile' => 'profint',
'ipmode' => 'static',
'ipaddress' => '192.168.1.1',
'netmask' => '255.255.255.0'
}
}
}
end
it do
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^virt vtep1 profile profint mode dhcp/)
should contain_file('/etc/n1kv/n1kv.conf') \
.with_content(/^virt vtep2 profile profint mode static/)
end
end
context 'with manage_service as false' do
let :params do
{
:manage_service => false
}
end
it 'should not start/stop service' do
should contain_service('nexus1000v').without_ensure
end
end
context 'with manage_service true and enable_service false' do
let :params do
{
:manage_service => true,
:enable => false
}
end
it 'should stop service' do
should contain_service('nexus1000v').with_ensure('stopped')
end
end
context 'verify sysctl setting with vteps_in_same_subnet true' do
let :params do
{
:vteps_in_same_subnet => true
}
end
it do
should contain_sysctl__value('net.ipv4.conf.default.rp_filter').with_value('2')
should contain_sysctl__value('net.ipv4.conf.all.rp_filter').with_value('2')
should contain_sysctl__value('net.ipv4.conf.default.arp_ignore').with_value('1')
should contain_sysctl__value('net.ipv4.conf.all.arp_ignore').with_value('1')
should contain_sysctl__value('net.ipv4.conf.all.arp_announce').with_value('2')
should contain_sysctl__value('net.ipv4.conf.default.arp_announce').with_value('2')
end
end
end
on_supported_os({
:supported_os => OSDefaults.get_supported_os
}).each do |os,facts|
context "on #{os}" do
let (:facts) do
facts.merge!(OSDefaults.get_facts())
end
if facts[:osfamily] == 'RedHat'
it_behaves_like 'neutron::agents::n1kv_vem'
end
end
end
end

74
spec/classes/neutron_plugins_ml2_cisco_nexus1000v_spec.rb

@ -1,74 +0,0 @@
require 'spec_helper'
describe 'neutron::plugins::ml2::cisco::nexus1000v' do
let :pre_condition do
"class { 'neutron::keystone::authtoken':
password => 'passw0rd',
}
class { 'neutron::server': }
class { 'neutron':
core_plugin => 'ml2'
}"
end
let :default_params do
{
:n1kv_vsm_ip => '10.10.10.10',
:n1kv_vsm_username => 'admin',
:n1kv_vsm_password => 'password',
:default_policy_profile => 'default-pp',
:default_vlan_network_profile => 'default-vlan-np',
:default_vxlan_network_profile => 'default-vxlan-np',
:poll_duration => '60',
:http_pool_size => '4',
:http_timeout => '15',
:sync_interval => '300',
:max_vsm_retries => '2',
:restrict_policy_profiles => 'False',
:enable_vif_type_n1kv => 'False',
}
end
let :params do
{}
end
shared_examples 'neutron cisco ml2 nexus1000v plugin' do
before do
params.merge!(default_params)
end
it { should contain_class('neutron::params') }
it do
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/n1kv_vsm_ips').with_value(params[:n1kv_vsm_ip])
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/username').with_value(params[:n1kv_vsm_username])
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/password').with_value(params[:n1kv_vsm_password]).with_secret(true)
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/default_policy_profile').with_value(params[:default_policy_profile])
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/default_vlan_network_profile').with_value(params[:default_vlan_network_profile])
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/default_vxlan_network_profile').with_value(params[:default_vxlan_network_profile])
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/poll_duration').with_value(params[:poll_duration])
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/http_pool_size').with_value(params[:http_pool_size])
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/http_timeout').with_value(params[:http_timeout])
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/sync_interval').with_value(params[:sync_interval])
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/max_vsm_retries').with_value(params[:max_vsm_retries])
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/restrict_policy_profiles').with_value(params[:restrict_policy_profiles])
should contain_neutron_plugin_ml2('ml2_cisco_n1kv/enable_vif_type_n1kv').with_value(params[:enable_vif_type_n1kv])
end
end
on_supported_os({
:supported_os => OSDefaults.get_supported_os
}).each do |os,facts|
context "on #{os}" do
let (:facts) do
facts.merge!(OSDefaults.get_facts())
end
if facts[:osfamily] == 'RedHat'
it_behaves_like 'neutron cisco ml2 nexus1000v plugin'
end
end
end
end

184
templates/n1kv.conf.erb

@ -1,184 +0,0 @@
# This is the N1KV VEM configuration file.
# <n1kv.conf> file contains all the configuration parameters for VEM operation.
# Please find below a brief explanation of these parameters and their meaning.
# Optional Parameters and Default Values of parameters are explicitly stated.
# Note:
# a)Mandatory parameters are needed for proper VEM operation.
# N1KV DP/DPA should start even if these are not specified.
# But there will be functional impact. For eg: in VSM connectivity
# b)For any updates to parameters to take effect, you just need to execute
# 'vemcmd reread config'. Its the least-disruptive way for changes to
# take effect. However for certain params, n1kv service need to be restarted.
# These parameter are stated explicitly (restart_on_modify: YES).
#
#
#<vsm-connection-params>
#
# TAG: switch-domain
# Description:
# Optional: No
# Default: 1000
# restart_on_modify: No
switch-domain <%= @n1kv_vsm_domain_id %>
# TAG: l3control-ipaddr
# Description: IP Address of VSM Mgmt I/F
# Optional: No
# Default: 127.0.0.1
# restart_on_modify: No
l3control-ipaddr <%= @n1kv_vsm_ip %>
# TAG: l3control-ipv6addr
# Description: IPv6 Address of VSM Mgmt I/F
# Optional: No
# Default: ::1
# restart_on_modify: No
l3control-ipv6addr <%= @n1kv_vsm_ipv6 %>
# Set svs-mode to V6 if IPv6 address for VSM
# is set to something other than default ::1.
# This tells VEM to communicate with VSM on
# IPv6 instead of the default IPv4 option
<% if @n1kv_vsm_ipv6 != '::1' -%>
svs-mode V6
<% end -%>
# TAG: host-mgmt-intf
# Description: Management interface of the Host
# Optional: No (on N1KV, we need this
# for Host Identification on VSM).
# Default: lo
# restart_on_modify: Yes
host-mgmt-intf <%= @host_mgmt_intf %>
#<Port-Profile Mapping>
# Description: Port-Profile mapping for all VEM managed Interfaces.
# Optional: Yes
# restart_on_modify: No
#
# Note: Do not specify Host Management Interface here.
# We do yet support System Ports (Ports which need to be up all time: Post Reboot/VEM Upgrade).
#
# Format for physical ports:
# phys <port-name> profile <profile-name>
#phys eth1 profile sys-uplink
#phys eth2 profile uplink2
<% @uplink_profile.each do |port, profile| -%>
phys <%= port%> profile <%= profile%>
<% end -%>
# Format for non-vm virt ports. For instance: VTEP ports.
# virt <port-name> profile <profile-name> [mode static|dhcp] [address <ipaddr>]
# [netmask <netmask ip>] [mac <macaddr>]
# [] -->indicates optional parameters.
#Eg:
#virt vtep3 profile profint mode dhcp
#virt vtep1 profile profint mode dhcp mac 00:11:22:33:44:55
#virt vtep2 profile profint mode static address 192.168.2.91 netmask 255.255.255.0
#virt vtep2 profile profint mode static address 192.168.2.91 netmask 255.255.255.0 mac 00:22:22:33:44:55
<% @vtep_config.each do |port, params| -%>
<% if params['ipmode'] == 'dhcp' -%>
virt <%= port%> profile <%= params['profile']%> mode dhcp
<% else-%>
virt <%= port%> profile <%= params['profile']%> mode static address <%= params['ipaddress']%> netmask <%= params['netmask']%>
<% end -%>
<% end -%>
# TAG: uvem-ovs-brname
# Description: Default Open VSwitch Bridge Name
# Optional: YES.
# Default: n1kvdvs
# restart_on_modify: Yes
# Format:
# uvem-ovs-brname n1kvdvs
uvem-ovs-brname br-int
# TAG: portdb
# Description: PortDB (ovs|vem)
# Optional: YES.
# Default: ovs
# restart_on_modify: Yes
# Format:
# portdb vem
portdb <%= @portdb %>
# TAG: node-type
# Description: Type of Node: 'compute' (or) 'neutron'
# Optional: YES.
# Default: compute
# restart_on_modify: No
# Format:
# node-type compute
node-type <%= @node_type %>
# The below parameters are not commonly modified.
#
#
#<system-port-profile-Info>
# Description: System Port Profiles.
# Optional: Yes (If there are no System Interfaces: Mgmt I/F etc)
# restart_on_modify: No
#
#Trunk Profile Format
#profile <name> trunk <vlan>
#profile <name> native-vlan <vlan>
#profile <name> mtu <mtu-size>
#
#Access Profile
#profile <name> access <vlan>
#profile <name> mtu <mtu-size>
# TAG: dp-np-threads
# Description: Number of datapath threads to process normal priority packets
# Optional: YES
# Default: 4
# restart_on_modify: Yes
# Format: dp-np-threads <1..32>
# TAG: dp-lp-threads
# Description: Number of datapath threads to process low priority packets
# Optional: YES
# Default: 1
# restart_on_modify: Yes
# Format: dp-lp-threads <1..32>
# TAG: dp-hp-threads
# Description: Number of datapath threads to process high priority packets
# Optional: YES
# Default: 1
# restart_on_modify: Yes
# Format: dp-hp-threads <1..32>
# TAG: dp-thread-sockets
# Description: Number of packet sockets each datapath thread creates
# Optional: YES
# Default: 1
# restart_on_modify: Yes
# Format: dp-thread-sockets <1..16>
# TAG: dp-thread-socket-rbuflen
# Description: Receive buffer length of each packet socket
# Optional: YES
# Default: 8 MBytes
# restart_on_modify: Yes
# Format: dp-thread-socket-rbuflen <0..255>
# Note: 0 - use system default
# TAG: dp-thread-socket-rrnglen
# Description: Rx-ring length of each packet socket
# Optional: YES
# Default: 4096
# restart_on_modify: Yes
# Format: dp-thread-socket-rrnglen <0..16384>
# Note: 0 - disables memory map I/O
# TAG: fastpath-flood
# Description: Enable flood of broadcast and unknown pkts in KLM
# Optional: YES
# Default: disable
# restart_on_modify: Yes
# Format: fastpath-flood <enable|disable>
fastpath-flood <%= @fastpath_flood %>
Loading…
Cancel
Save