Setting up compute nodes to work with nsx-t

Added nsx-t components to compute node
Added create predefined network

Change-Id: I8647c220c4f8750b503568655d1be4a1774845d7
This commit is contained in:
Artem Savinov 2016-09-06 16:22:41 +03:00
parent 24cd70e987
commit fcaa0cc3e5
10 changed files with 270 additions and 51 deletions

View File

@ -0,0 +1,18 @@
notice('fuel-plugin-nsx-t: compute_nova_config.pp')
include ::nova::params
nova_config {
'neutron/service_metadata_proxy': value => 'True';
'neutron/ovs_bridge': value => 'nsx-managed';
}
service { 'nova-compute':
ensure => running,
name => $::nova::params::compute_service_name,
enable => true,
hasstatus => true,
hasrestart => true,
}
Nova_config<| |> ~> Service['nova-compute']

View File

@ -1,14 +1,9 @@
notice('fuel-plugin-nsx-t: compute_vmware_nova_config.pp') notice('fuel-plugin-nsx-t: compute_vmware_nova_config.pp')
include ::nova::params include ::nova::params
include ::nsxt::params
$neutron_config = hiera_hash('neutron_config') $neutron_config = hiera_hash('neutron_config')
$neutron_metadata_proxy_secret = $neutron_config['metadata']['metadata_proxy_shared_secret'] $neutron_metadata_proxy_secret = $neutron_config['metadata']['metadata_proxy_shared_secret']
$nova_parameters = {
'neutron/service_metadata_proxy' => { value => 'True' },
'neutron/metadata_proxy_shared_secret' => { value => $neutron_metadata_proxy_secret }
}
$management_vip = hiera('management_vip') $management_vip = hiera('management_vip')
$service_endpoint = hiera('service_endpoint', $management_vip) $service_endpoint = hiera('service_endpoint', $management_vip)
@ -36,4 +31,18 @@ class {'nova::network::neutron':
neutron_ovs_bridge => '', neutron_ovs_bridge => '',
} }
create_resources(nova_config, $nova_parameters) nova_config {
'neutron/service_metadata_proxy': value => 'True';
'neutron/metadata_proxy_shared_secret': value => $neutron_metadata_proxy_secret;
}
service { 'nova-compute':
ensure => running,
name => $::nova::params::compute_service_name,
enable => true,
hasstatus => true,
hasrestart => true,
}
Class['nova::network::neutron'] ~> Service['nova-compute']
Nova_config<| |> ~> Service['nova-compute']

View File

@ -0,0 +1,59 @@
notice('fuel-plugin-nsx-t: neutron-network-create.pp')
include ::nsxt::params
$access_hash = hiera_hash('access',{})
$neutron_config = hiera_hash('neutron_config')
$floating_net = try_get_value($neutron_config, 'default_floating_net', 'net04_ext')
$internal_net = try_get_value($neutron_config, 'default_private_net', 'net04')
$os_tenant_name = try_get_value($access_hash, 'tenant', 'admin')
$settings = hiera($::nsxt::params::hiera_key)
$floating_ip_range = split($settings['floating_ip_range'], '-')
$floating_ip_range_start = $floating_ip_range[0]
$floating_ip_range_end = $floating_ip_range[1]
$floating_net_allocation_pool = "start=${floating_ip_range_start},end=${floating_ip_range_end}"
$floating_net_cidr = $settings['floating_net_cidr']
$floating_net_gw = $settings['floating_net_gw']
$default_floating_net_gw = regsubst($floating_net_cidr,'^(\d+\.\d+\.\d+)\.\d+/\d+$','\1.1')
neutron_network { $floating_net :
ensure => 'present',
provider_physical_network => $settings['external_network'],
provider_network_type => 'local',
router_external => true,
tenant_name => $os_tenant_name,
shared => true,
}
neutron_subnet { "${floating_net}__subnet" :
ensure => 'present',
cidr => $floating_net_cidr,
network_name => $floating_net,
tenant_name => $os_tenant_name,
gateway_ip => pick($floating_net_gw,$default_floating_net_gw),
enable_dhcp => false,
allocation_pools => $floating_net_allocation_pool,
require => Neutron_network[$floating_net],
}
$internal_net_dns = split($settings['internal_net_dns'], ',')
$internal_net_cidr = $settings['internal_net_cidr']
neutron_network { $internal_net :
ensure => 'present',
provider_physical_network => false,
router_external => false,
tenant_name => $os_tenant_name,
shared => true,
}
neutron_subnet { "${internal_net}__subnet" :
ensure => 'present',
cidr => $internal_net_cidr,
network_name => $internal_net,
tenant_name => $os_tenant_name,
gateway_ip => regsubst($internal_net_cidr,'^(\d+\.\d+\.\d+)\.\d+/\d+$','\1.1'),
enable_dhcp => true,
dns_nameservers => pick($internal_net_dns,[]),
require => Neutron_network[$internal_net],
}

View File

@ -1,4 +1,4 @@
notice('fuel-plugin-nsx-t: reg-controller-as-transport-node.pp') notice('fuel-plugin-nsx-t: reg-node-as-transport-node.pp')
include ::nsxt::params include ::nsxt::params
@ -7,21 +7,28 @@ $managers = $settings['nsx_api_managers']
$user = $settings['nsx_api_user'] $user = $settings['nsx_api_user']
$password = $settings['nsx_api_password'] $password = $settings['nsx_api_password']
$uplink_profile_uuid = $settings['uplink_profile_uuid'] $uplink_profile_uuid = $settings['uplink_profile_uuid']
$static_ip_pool_uuid = $settings['static_ip_pool_uuid'] $transport_zone_uuid = $settings['default_overlay_tz_uuid']
$transport_zone_uuid = $settings['transport_zone_uuid']
$pnics_pairs = $settings['pnics_pairs']
nsxt_create_transport_node { 'Add transport node': if 'primary-controller' in hiera('roles') or 'controller' in hiera('roles') {
ensure => present, $pnics = $settings['controller_pnics_pairs']
managers => $managers, $static_ip_pool_uuid = $settings['controller_ip_pool_uuid']
username => $user, } else {
password => $password, $pnics = $settings['compute_pnics_pairs']
uplink_profile_id => $uplink_profile_uuid, $static_ip_pool_uuid = $settings['compute_ip_pool_uuid']
pnics => $pnics_pairs,
static_ip_pool_id => $static_ip_pool_uuid,
transport_zone_id => $transport_zone_uuid,
} }
$vtep_interfaces = get_interfaces($pnics)
up_interface { $vtep_interfaces:
before => Nsxt_create_transport_node['Add transport node'],
}
firewall {'0000 Accept STT traffic':
proto => 'tcp',
dport => ['7471'],
action => 'accept',
before => Nsxt_create_transport_node['Add transport node'],
}
if !$settings['insecure'] { if !$settings['insecure'] {
$ca_filename = try_get_value($settings['ca_file'],'name','') $ca_filename = try_get_value($settings['ca_file'],'name','')
if empty($ca_filename) { if empty($ca_filename) {
@ -33,9 +40,29 @@ if !$settings['insecure'] {
Nsxt_create_transport_node { ca_file => $ca_file } Nsxt_create_transport_node { ca_file => $ca_file }
} }
firewall {'0000 Accept STT traffic': nsxt_create_transport_node { 'Add transport node':
proto => 'tcp', ensure => present,
dport => ['7471'], managers => $managers,
action => 'accept', username => $user,
before => Nsxt_create_transport_node['Add transport node'], password => $password,
uplink_profile_id => $uplink_profile_uuid,
pnics => $pnics,
static_ip_pool_id => $static_ip_pool_uuid,
transport_zone_id => $transport_zone_uuid,
}
# workaround, otherwise $title variable not work, always has a value 'main'
define up_interface {
file { $title:
ensure => file,
path => "/etc/network/interfaces.d/ifcfg-${title}",
mode => '0644',
content => "auto ${title}\niface ${title} inet manual",
replace => true,
} ->
exec { $title:
path => '/usr/sbin:/usr/bin:/sbin:/bin',
command => "ifup ${title}",
provider => 'shell',
}
} }

View File

@ -1,4 +1,4 @@
notice('fuel-plugin-nsx-t: reg-controller-on-management-plane.pp') notice('fuel-plugin-nsx-t: reg-node-on-management-plane.pp')
include ::nsxt::params include ::nsxt::params

View File

@ -0,0 +1,14 @@
module Puppet::Parser::Functions
newfunction(:get_interfaces, :type => :rvalue, :doc => <<-EOS
Returns the array of interface names for nsx-t VTEPs.
EOS
) do |args|
pnics = args[0]
vtep_interfaces = []
pnics.each do |pnic_pair|
device,uplink = pnic_pair.split(':')
vtep_interfaces.push(device.strip)
end
return vtep_interfaces
end
end

View File

@ -139,7 +139,11 @@ Puppet::Type.type(:nsxt_create_transport_node).provide(:nsxt_create_transport_no
def create_pnics_array(pnics) def create_pnics_array(pnics)
result_pnic_pairs = [] result_pnic_pairs = []
pnics.split(/\n+/).each do |pnic_pair| # https://projects.puppetlabs.com/issues/9850
if not pnics.instance_of? Array
pnics = [pnics]
end
pnics.each do |pnic_pair|
device,uplink = pnic_pair.split(':') device,uplink = pnic_pair.split(':')
result_pnic_pairs.push({'device_name' => device.strip, 'uplink_name' => uplink.strip}) result_pnic_pairs.push({'device_name' => device.strip, 'uplink_name' => uplink.strip})
end end

View File

@ -38,8 +38,8 @@ Puppet::Type.newtype(:nsxt_create_transport_node) do
desc 'Ids of Uplink HostSwitch profiles to be associated with this HostSwitch.' desc 'Ids of Uplink HostSwitch profiles to be associated with this HostSwitch.'
end end
newparam(:pnics) do newparam(:pnics, :array_matching => :all) do
desc 'Multiline string with "device_name : uplink_name" pairs. One per line.' desc 'Array of string with "device_name : uplink_name" pairs.'
end end
newparam(:static_ip_pool_id) do newparam(:static_ip_pool_id) do

View File

@ -20,13 +20,29 @@
groups: groups:
- compute-vmware - compute-vmware
required_for: required_for:
- top-role-compute-vmware - enable_nova_compute_service
requires: requires:
- top-role-compute-vmware
- top-role-compute - top-role-compute
parameters: parameters:
puppet_manifest: puppet/manifests/compute-vmware-nova-config.pp puppet_manifest: puppet/manifests/compute-vmware-nova-config.pp
puppet_modules: puppet/modules puppet_modules: puppet/modules
timeout: 300 timeout: 180
- id: nsx-t-compute-nova-config
version: 2.0.0
type: puppet
groups:
- compute
required_for:
- enable_nova_compute_service
requires:
- top-role-compute
- openstack-network-compute-nova
parameters:
puppet_manifest: puppet/manifests/compute-nova-config.pp
puppet_modules: puppet/modules
timeout: 180
- id: nsx-t-gem-install - id: nsx-t-gem-install
version: 2.0.0 version: 2.0.0
@ -36,8 +52,8 @@
- controller - controller
- compute - compute
required_for: required_for:
- nsx-t-reg-controller-on-management-plane - nsx-t-reg-node-on-management-plane
- nsx-t-reg-controller-as-transport-node - nsx-t-reg-node-as-transport-node
requires: requires:
- setup_repositories - setup_repositories
parameters: parameters:
@ -135,7 +151,6 @@
required_for: required_for:
- primary-openstack-network-agents-metadata - primary-openstack-network-agents-metadata
- primary-openstack-network-agents-dhcp - primary-openstack-network-agents-dhcp
- openstack-network-networks
requires: requires:
- nsx-t-configure-plugin - nsx-t-configure-plugin
cross-depends: cross-depends:
@ -145,35 +160,39 @@
puppet_modules: puppet/modules puppet_modules: puppet/modules
timeout: 300 timeout: 300
- id: nsx-t-reg-controller-on-management-plane - id: nsx-t-reg-node-on-management-plane
version: 2.0.0 version: 2.0.0
type: puppet type: puppet
groups: groups:
- primary-controller - primary-controller
- controller - controller
- compute
required_for: required_for:
- primary-openstack-network-agents-metadata - primary-openstack-network-agents-metadata
- primary-openstack-network-agents-dhcp - primary-openstack-network-agents-dhcp
- openstack-network-end
requires: requires:
- nsx-t-install-packages - nsx-t-install-packages
parameters: parameters:
puppet_manifest: puppet/manifests/reg-controller-on-management-plane.pp puppet_manifest: puppet/manifests/reg-node-on-management-plane.pp
puppet_modules: puppet/modules puppet_modules: puppet/modules
timeout: 300 timeout: 300
- id: nsx-t-reg-controller-as-transport-node - id: nsx-t-reg-node-as-transport-node
version: 2.0.0 version: 2.0.0
type: puppet type: puppet
groups: groups:
- primary-controller - primary-controller
- controller - controller
- compute
required_for: required_for:
- primary-openstack-network-agents-metadata - primary-openstack-network-agents-metadata
- primary-openstack-network-agents-dhcp - primary-openstack-network-agents-dhcp
- openstack-network-end
requires: requires:
- nsx-t-reg-controller-on-management-plane - nsx-t-reg-node-on-management-plane
parameters: parameters:
puppet_manifest: puppet/manifests/reg-controller-as-transport-node.pp puppet_manifest: puppet/manifests/reg-node-as-transport-node.pp
puppet_modules: puppet/modules puppet_modules: puppet/modules
timeout: 300 timeout: 300
@ -203,7 +222,7 @@
groups: groups:
- primary-controller - primary-controller
required_for: required_for:
- openstack-network-networks - openstack-network-end
requires: requires:
- primary-openstack-network-agents-dhcp - primary-openstack-network-agents-dhcp
cross-depends: cross-depends:
@ -227,6 +246,22 @@
puppet_modules: puppet/modules puppet_modules: puppet/modules
timeout: 120 timeout: 120
- id: nsx-t-neutron-network-create
version: 2.0.0
type: puppet
groups:
- primary-controller
required_for:
- openstack-network-routers
requires:
- nsx-t-primary-neutron-server-start
- nsx-t-configure-agents-dhcp
- primary-openstack-network-agents-metadata
parameters:
puppet_manifest: puppet/manifests/neutron-network-create.pp
puppet_modules: puppet/modules
timeout: 300
# skipped tasks # skipped tasks
- id: openstack-network-networks - id: openstack-network-networks
version: 2.0.0 version: 2.0.0
@ -243,3 +278,9 @@
- id: openstack-network-agents-l3 - id: openstack-network-agents-l3
version: 2.0.0 version: 2.0.0
type: skipped type: skipped
- id: openstack-network-agents-sriov
version: 2.0.0
type: skipped
- id: enable_nova_compute_service
version: 2.0.0
type: skipped

View File

@ -85,25 +85,72 @@ attributes:
source: *uuid source: *uuid
error: 'Enter uplink profile ID' error: 'Enter uplink profile ID'
type: "text" type: "text"
static_ip_pool_uuid: controller_ip_pool_uuid:
value: '' value: ''
label: 'IP pool ID for STT VTEP' label: 'IP pool ID for controller VTEPs'
weight: 50 weight: 50
regex: regex:
source: *uuid source: *uuid
error: 'Enter IP pool ID' error: 'Enter IP pool ID'
type: "text" type: "text"
transport_zone_uuid: controller_pnics_pairs:
value: '' value:
label: 'Transport zone ID' - 'enp0s1:uplink-1'
label: 'Colon separated pnics pairs for controller nodes'
min: 1
weight: 55 weight: 55
type: "text_list"
compute_ip_pool_uuid:
value: ''
label: 'IP pool ID for compute VTEPs'
weight: 60
regex: regex:
source: *uuid source: *uuid
error: 'Enter transport zone ID' error: 'Enter IP pool ID'
type: "text" type: "text"
pnics_pairs: compute_pnics_pairs:
value: 'enp0s1:uplink-1' value:
label: 'Colon separated pnics pairs, one per line' - 'enp0s1:uplink-1'
label: 'Colon separated pnics pairs for compute nodes'
min: 1 min: 1
weight: 60 weight: 65
type: "textarea" type: "text_list"
floating_ip_range:
value: ''
label: 'Floating IP range'
description: 'Dash separated IP addresses allocation pool from external network, e.g. "start_ip_address-end_ip_address"'
weight: 70
type: 'text'
regex:
source: '^(?:[0-9]{1,3}\.){3}[0-9]{1,3}-(?:[0-9]{1,3}\.){3}[0-9]{1,3}$'
error: 'Invalid IP ranges'
floating_net_cidr:
value: ''
label: 'External network CIDR'
description: 'Network in CIDR notation that includes floating IP ranges'
weight: 75
type: 'text'
regex:
source: '^(?:[0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}$'
error: 'Invalid network in CIDR notation'
floating_net_gw:
value: ''
label: 'Gateway'
description: 'Default gateway for external network, if not defined, first IP address of the network is used'
weight: 80
type: 'text'
internal_net_cidr:
value: ''
label: 'Internal network CIDR'
description: 'Network in CIDR notation for use as internal'
weight: 85
type: 'text'
regex:
source: '^(?:[0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}$'
error: 'Invalid network in CIDR notation'
internal_net_dns:
value: ''
label: 'DNS for internal network'
description: 'Comma separated IP addresses of DNS server for internal network'
weight: 90
type: 'text'