Fix the bug with custom hostname

There is the task openstack-network-plugins-l2 that works unwell with
environments with custom hostnames. The root of problem is incorrect
detection of neutron nodes. Unfortuantely it happens in core task and
for fixing that task should be replaced.

Change-Id: I663960befa4cfa82348b231728722d774482fb4e
Closes-bug: #1590403
This commit is contained in:
Igor Gajsin 2016-06-20 18:33:15 +03:00
parent e0f03b5262
commit 8e25a8579d
4 changed files with 231 additions and 48 deletions

View File

@ -0,0 +1,6 @@
notice('MODULAR: fuel-plugin-vmware-dvs/plugins/ml2.pp')
class neutron {}
class { 'neutron' :}
class {'::vmware_dvs::l2': }

View File

@ -0,0 +1,183 @@
class vmware_dvs::l2 {
$use_neutron = hiera('use_neutron', false)
if $use_neutron {
# override neutron options
$override_configuration = hiera_hash('configuration', {})
override_resources { 'neutron_agent_ovs':
data => $override_configuration['neutron_agent_ovs']
} ~> Service['neutron-ovs-agent-service']
}
if $use_neutron {
include ::neutron::params
$node_name = hiera('node_name')
$neutron_primary_controller_roles = hiera('neutron_primary_controller_roles', ['primary-controller'])
$neutron_compute_roles = hiera('neutron_compute_nodes', ['compute'])
$primary_controller = roles_include($neutron_primary_controller_roles)
$compute = roles_include($neutron_compute_roles)
$neutron_config = hiera_hash('neutron_config')
$neutron_server_enable = pick($neutron_config['neutron_server_enable'], true)
$neutron_nodes = hiera_hash('neutron_nodes')
$dpdk_config = hiera_hash('dpdk', {})
$enable_dpdk = pick($dpdk_config['enabled'], false)
$management_vip = hiera('management_vip')
$service_endpoint = hiera('service_endpoint', $management_vip)
$ssl_hash = hiera_hash('use_ssl', {})
$internal_auth_protocol = get_ssl_property($ssl_hash, {}, 'keystone', 'internal', 'protocol', 'http')
$internal_auth_address = get_ssl_property($ssl_hash, {}, 'keystone', 'internal', 'hostname', [$service_endpoint])
$auth_api_version = 'v2.0'
$identity_uri = "${internal_auth_protocol}://${internal_auth_address}:5000"
$auth_url = "${identity_uri}/${auth_api_version}"
$auth_password = $neutron_config['keystone']['admin_password']
$auth_user = pick($neutron_config['keystone']['admin_user'], 'neutron')
$auth_tenant = pick($neutron_config['keystone']['admin_tenant'], 'services')
$auth_region = hiera('region', 'RegionOne')
$auth_endpoint_type = 'internalURL'
$network_scheme = hiera_hash('network_scheme', {})
prepare_network_config($network_scheme)
$neutron_advanced_config = hiera_hash('neutron_advanced_configuration', { })
$l2_population = try_get_value($neutron_advanced_config, 'neutron_l2_pop', false)
$dvr = try_get_value($neutron_advanced_config, 'neutron_dvr', false)
$enable_qos = pick($neutron_advanced_config['neutron_qos'], false)
$segmentation_type = try_get_value($neutron_config, 'L2/segmentation_type')
if $compute and ! $dvr {
$do_floating = false
} else {
$do_floating = true
}
if $enable_qos {
$extensions = ['qos']
} else {
$extensions = undef
}
$bridge_mappings = generate_bridge_mappings($neutron_config, $network_scheme, {
'do_floating' => $do_floating,
'do_tenant' => true,
'do_provider' => false
})
if $segmentation_type == 'vlan' {
$net_role_property = 'neutron/private'
$iface = get_network_role_property($net_role_property, 'phys_dev')
$enable_tunneling = false
$network_type = 'vlan'
$tunnel_types = []
} else {
$net_role_property = 'neutron/mesh'
$tunneling_ip = get_network_role_property($net_role_property, 'ipaddr')
$iface = get_network_role_property($net_role_property, 'phys_dev')
$physical_net_mtu = pick(get_transformation_property('mtu', $iface[0]), '1500')
if $segmentation_type == 'gre' {
$mtu_offset = '42'
$network_type = 'gre'
} else {
# vxlan is the default segmentation type for non-vlan cases
$mtu_offset = '50'
$network_type = 'vxlan'
}
$tunnel_types = [$network_type]
$enable_tunneling = true
}
if $enable_dpdk and $compute {
neutron_agent_ovs {
'securitygroup/enable_security_group': value => false;
}
$firewall_driver = 'neutron.agent.firewall.NoopFirewallDriver'
$ovs_datapath_type = 'netdev'
$ovs_vhostuser_socket_dir = '/var/run/openvswitch'
} else {
neutron_agent_ovs {
'securitygroup/enable_security_group': value => true;
}
$firewall_driver = 'neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver'
# Leave default values when passed to the class
$ovs_datapath_type = undef
$ovs_vhostuser_socket_dir = undef
}
Neutron_agent_ovs<||> ~> Service['neutron-ovs-agent-service']
class { '::neutron::agents::ml2::ovs':
bridge_mappings => $bridge_mappings,
enable_tunneling => $enable_tunneling,
local_ip => $tunneling_ip,
tunnel_types => $tunnel_types,
enable_distributed_routing => $dvr,
l2_population => $l2_population,
arp_responder => $l2_population,
firewall_driver => $firewall_driver,
datapath_type => $ovs_datapath_type,
vhostuser_socket_dir => $ovs_vhostuser_socket_dir,
extensions => $extensions,
manage_vswitch => false,
manage_service => true,
enabled => true,
}
if str2bool(inline_template('<%= @neutron_nodes.values.keep_if {|h| h["name"] == @node_name}.length > 0%>')) {
if $neutron_server_enable {
$service_ensure = 'running'
} else {
$service_ensure = 'stopped'
}
service { 'neutron-server':
name => $::neutron::params::server_service,
enable => $neutron_server_enable,
ensure => $service_ensure,
hasstatus => true,
hasrestart => true,
tag => 'neutron-service',
}
exec { 'waiting-for-neutron-api':
environment => [
"OS_TENANT_NAME=${auth_tenant}",
"OS_USERNAME=${auth_user}",
"OS_PASSWORD=${auth_password}",
"OS_AUTH_URL=${auth_url}",
"OS_REGION_NAME=${auth_region}",
"OS_ENDPOINT_TYPE=${auth_endpoint_type}",
],
path => '/usr/sbin:/usr/bin:/sbin:/bin',
tries => '30',
try_sleep => '4',
command => 'neutron net-list --http-timeout=4 2>&1 > /dev/null',
provider => 'shell',
subscribe => Service['neutron-server'],
refreshonly => true,
}
$ha_agent = try_get_value($neutron_advanced_config, 'l2_agent_ha', true)
if $ha_agent {
#Exec<| title == 'waiting-for-neutron-api' |> ->
class { '::cluster::neutron::ovs' :
primary => $primary_controller,
}
}
}
# Stub for upstream neutron manifests
package { 'neutron':
name => 'binutils',
ensure => 'installed',
}
}
}

View File

@ -1,9 +1,5 @@
# PRE_DEPLOYMENT TASKS
# DEPLYMENT TASKS
- id: vmware-dvs-override-hiera
version: 2.0.0
version: 2.1.0
role: ['primary-controller','controller', 'compute-vmware']
required_for: [openstack-network-server-config, vmware-dvs-network-common-config]
requires: [deploy_start]
@ -14,9 +10,9 @@
timeout: 720
- id: vmware-dvs-setup-neutron-plugin
version: 2.0.0
version: 2.1.0
groups: ['primary-controller','controller', 'compute-vmware']
required_for: [primary-openstack-network-plugins-l2,openstack-network-plugins-l2,vmware-dvs-network-plugins-l2]
required_for: [primary-openstack-network-plugins-l2,openstack-network-plugins-l2]
requires: [openstack-network-common-config, vmware-dvs-network-common-config]
type: puppet
parameters:
@ -25,7 +21,7 @@
timeout: 720
- id: vmware-dvs-neutron-agent-install
version: 2.0.0
version: 2.1.0
groups: ['primary-controller','controller','compute-vmware']
require_for: [openstack-network-networks]
requires: [vmware-dvs-network-common-config]
@ -36,7 +32,7 @@
timeout: 720
- id: vmware-dvs-compute-vmware
version: 2.0.0
version: 2.1.0
groups: ['compute-vmware']
requires: [top-role-compute-vmware]
type: puppet
@ -46,7 +42,7 @@
timeout: 720
- id: vmware-dvs-set-neutron-timeout
version: 2.0.0
version: 2.1.0
groups: ['primary-controller','controller']
required_for: [deploy_end]
requires: [openstack-network-server-nova]
@ -59,7 +55,7 @@
# Anchor (empty task) for another tasks, say 'tenant network FW setup starting'
- id: vmware-dvs-network-start
type: skipped
version: 2.0.0
version: 2.1.0
groups: ['primary-controller','controller','compute-vmware']
requires: [neutron-keystone, neutron-db, netconfig, openstack-controller, top-role-compute]
required_for: [openstack-network-common-config]
@ -70,7 +66,7 @@
- id: vmware-dvs-network-common-config
type: puppet
version: 2.0.0
version: 2.1.0
groups: ['primary-controller','controller','compute-vmware']
required_for: [vmware-dvs-network-end]
requires: [vmware-dvs-network-start]
@ -79,26 +75,47 @@
puppet_modules: /etc/puppet/modules
timeout: 1800
- id: vmware-dvs-network-plugins-l2
- id: primary-openstack-network-plugins-l2
type: puppet
version: 2.0.0
groups: ['primary-controller','controller','compute-vmware']
required_for: [vmware-dvs-network-end]
requires: [vmware-dvs-network-common-config, openstack-network-server-config]
refresh_on: [neutron_plugin_ml2, neutron_agent_ovs, neutron_config, neutron_api_config]
version: 2.1.0
groups: [primary-controller]
required_for: [openstack-network-end]
requires: [openstack-network-start, openstack-network-common-config, openstack-network-server-config]
condition:
yaql_exp: &network_plugins_l2 >
changedAny($.quantum, $.configuration, $.fqdn,
$.get('neutron_primary_controller_roles'),
$.get('neutron_compute_nodes'), $.quantum_settings, $.public_ssl,
$.get('use_ssl'), $.get('region'), $.network_scheme,
$.neutron_advanced_configuration)
refresh_on: [neutron_agent_ovs]
parameters:
puppet_manifest: puppet/manifests/vmware-dvs-network-plugins-l2.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 1800
- id: openstack-network-plugins-l2
type: puppet
version: 2.1.0
groups: [controller,compute,compute-vmware]
required_for: [openstack-network-end]
requires: [openstack-network-start, openstack-network-common-config, openstack-network-server-config]
condition:
yaql_exp: *network_plugins_l2
refresh_on: [neutron_agent_ovs]
cross-depends:
- name: primary-openstack-network-plugins-l2
parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/openstack-network/plugins/ml2.pp
puppet_modules: /etc/puppet/modules
puppet_manifest: puppet/manifests/vmware-dvs-network-plugins-l2.pp
puppet_modules: puppet/modules:/etc/puppet/modules
timeout: 1800
- id: vmware-dvs-network-agents-l3
type: puppet
version: 2.0.0
version: 2.1.0
groups: ['primary-controller','controller','compute-vmware']
required_for: [vmware-dvs-network-end]
requires: [openstack-network-networks, openstack-network-routers, primary-openstack-network-plugins-l2, vmware-dvs-network-plugins-l2]
requires: [openstack-network-networks, openstack-network-routers, primary-openstack-network-plugins-l2]
refresh_on: [neutron_l3_agent_config]
cross-depends:
- name: /(primary-)?openstack-network-plugins-l2/
@ -110,7 +127,7 @@
- id: vmware-dvs-network-agents-metadata
type: puppet
version: 2.0.0
version: 2.1.0
groups: ['primary-controller','controller','compute-vmware']
required_for: [vmware-dvs-network-end]
requires: [vmware-dvs-network-common-config, openstack-network-server-nova,vmware-dvs-network-agents-l3]
@ -126,30 +143,7 @@
# Anchor (empty task) for another tasks, say 'tenant network FW setup done'
- id: vmware-dvs-network-end
type: skipped
version: 2.0.0
version: 2.1.0
groups: ['primary-controller','controller','compute-vmware']
required_for: [deploy_end]
requires: []
# POST_DEPLOYMENT TASKS
#- id: vmware-dvs-property-hypervisor_type
# version: 2.0.0
# role: ['primary-controller']
# required_for: [post_deployment_end]
# requires: [disable_keystone_service_token]
# type: shell
# parameters:
# cmd: bash add_hyperv_type.sh 2>&1 | tee -a /tmp/add_hyper_type.log
# timeout: 240
# explicit restart nova-compute #1557980
#- id: vmware-dvs-restart-nova-compute
# version: 2.0.0
# role: [primary-controller, controller, compute-vmware]
# requires: [post_deployment_start]
# required_for: [post_deployment_end]
# type: puppet
# parameters:
# puppet_manifest: puppet/manifests/restart-nova-compute.pp
# puppet_modules: puppet/modules:/etc/puppet/modules
# timeout: 720

View File

@ -3,7 +3,7 @@ name: fuel-plugin-vmware-dvs
# Human-readable name for your plugin
title: Neutron VMware DVS ML2 plugin
# Plugin version
version: '3.0.0'
version: '3.0.2'
# Description
description: Enable to use plugin vmware_dvs for Neutron
# Required fuel version