+++ /dev/null
-# == Class: n1kv_vem
-#
-# Deploy N1KV VEM on compute and network nodes.
-# Support exists and tested for RedHat.
-# (For Ubuntu/Debian platforms few changes and testing pending.)
-#
-# === Parameters
-# [*n1kv_vsm_ip*]
-# (required) N1KV VSM(Virtual Supervisor Module) VM's IP.
-# Defaults to 127.0.0.1
-#
-# [*n1kv_vsm_domainid*]
-# (required) N1KV VSM DomainID.
-# Defaults to 1000
-#
-# [*host_mgmt_intf*]
-# (required) Management Interface of node where VEM will be installed.
-# Defaults to eth1
-#
-# [*uplink_profile*]
-# (optional) Uplink Interfaces that will be managed by VEM. The uplink
-# port-profile that configures these interfaces should also be specified.
-# (format)
-# $uplink_profile = { 'eth1' => 'profile1',
-# 'eth2' => 'profile2'
-# },
-# Defaults to empty
-#
-# [*vtep_config*]
-# (optional) Virtual tunnel interface configuration.
-# Eg:VxLAN tunnel end-points.
-# (format)
-# $vtep_config = { 'vtep1' => { 'profile' => 'virtprof1',
-# 'ipmode' => 'dhcp'
-# },
-# 'vtep2' => { 'profile' => 'virtprof2',
-# 'ipmode' => 'static',
-# 'ipaddress' => '192.168.1.1',
-# 'netmask' => '255.255.255.0'
-# }
-# },
-# Defaults to empty
-#
-# [*node_type*]
-# (optional). Specify the type of node: 'compute' (or) 'network'.
-# Defaults to 'compute'
-#
-# All the above parameter values will be used in the config file: n1kv.conf
-#
-# [*vteps_in_same_subnet*]
-# (optional)
-# The VXLAN tunnel interfaces created on VEM can belong to same IP-subnet.
-# In such case, set this parameter to true. This results in below
-# 'sysctl:ipv4' values to be modified.
-# rp_filter (reverse path filtering) set to 2(Loose).Default is 1(Strict)
-# arp_ignore (arp reply mode) set to 1:reply only if target ip matches
-# that of incoming interface. Default is 0
-# arp_announce (arp announce mode) set to 1. Default is 0
-# Please refer Linux Documentation for detailed description
-# http://lxr.free-electrons.com/source/Documentation/networking/ip-sysctl.txt
-#
-# If the tunnel interfaces are not in same subnet set this parameter to false.
-# Note that setting to false causes no change in the sysctl settings and does
-# not revert the changes made if it was originally set to true on a previous
-# catalog run.
-#
-# Defaults to false
-#
-# [*n1kv_source*]
-# (optional)
-# n1kv_source ==> VEM package location. One of below
-# A)URL of yum repository that hosts VEM package.
-# B)VEM RPM/DPKG file name, If present locally in 'files' folder
-# C)If not specified, assumes that VEM image is available in
-# default enabled repositories.
-# Defaults to empty
-#
-# [*n1kv_version*]
-# (optional). Specify VEM package version to be installed.
-# Not applicable if 'n1kv_source' is a file. (Option-B above)
-# Defaults to 'present'
-#
-# [*package_ensure*]
-# (optional) Ensure state for dependent packages: Openvswitch/libnl.
-# Defaults to 'present'.
-#
-# [*enable*]
-# (optional) Enable state for service. Defaults to 'true'.
-#
-# [*manage_service*]
-# (optional) Whether to start/stop the service
-# Defaults to true
-#
-# [*portdb*]
-# (optional) PortDB (ovs|vem)
-# Defaults to ovs
-#
-# [*fastpath_flood*]
-# (optional) Handle broadcast floods and unknown pkts in fastpath(KLM)
-# Defaults to disable
-#
-class neutron::agents::n1kv_vem (
- $n1kv_vsm_ip = '127.0.0.1',
- $n1kv_vsm_domain_id = 1000,
- $host_mgmt_intf = 'eth1',
- $uplink_profile = {},
- $vtep_config = {},
- $node_type = 'compute',
- $vteps_in_same_subnet = false,
- $n1kv_source = '',
- $n1kv_version = 'present',
- $package_ensure = 'present',
- $enable = true,
- $manage_service = true,
- $portdb = 'ovs',
- $fastpath_flood = 'disable'
-) {
-
- 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
- }
-
- 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,
- 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_',
- }
- }
- package {'nexus1000v':
- ensure => $package_ensure
- }
- }
-
- if $manage_service {
- if $enable {
- $service_ensure = 'running'
- } else {
- $service_ensure = 'stopped'
- }
- }
-
- service { 'nexus1000v':
- ensure => $service_ensure,
- }
-
- #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']
-}