Merge "composable neutron dhcp service"
authorJenkins <jenkins@review.openstack.org>
Wed, 11 May 2016 12:48:35 +0000 (12:48 +0000)
committerGerrit Code Review <review@openstack.org>
Wed, 11 May 2016 12:48:35 +0000 (12:48 +0000)
12 files changed:
environments/neutron-opencontrail.yaml
environments/neutron-plumgrid.yaml
environments/puppet-pacemaker.yaml
overcloud-resource-registry-puppet.yaml
overcloud.yaml
puppet/controller.yaml
puppet/hieradata/controller.yaml
puppet/manifests/overcloud_controller.pp
puppet/manifests/overcloud_controller_pacemaker.pp
puppet/services/neutron-base.yaml [new file with mode: 0644]
puppet/services/neutron-dhcp.yaml [new file with mode: 0644]
puppet/services/pacemaker/neutron-dhcp.yaml [new file with mode: 0644]

index 4704dbc..c9bd98b 100644 (file)
@@ -7,7 +7,7 @@ resource_registry:
 parameter_defaults:
   NeutronCorePlugin: neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2
   NeutronServicePlugins: neutron_plugin_contrail.plugins.opencontrail.loadbalancer.plugin.LoadBalancerPlugin
-  NeutronEnableDHCPAgent: false
+  OS::TripleO::Services::NeutronDhcpAgent: OS::Heat::None
   NeutronEnableL3Agent: false
   NeutronEnableMetadataAgent: false
   NeutronEnableOVSAgent: false
index b8d6601..5a244e5 100755 (executable)
@@ -23,7 +23,7 @@ parameter_defaults:
   #PLUMgridPlumlibVersion: present
 
   # PLUMgrid doesn't require dhcp, l3, ovs and metadata agents
-  NeutronEnableDHCPAgent: false
+  OS::TripleO::Services::NeutronDhcpAgent: OS::Heat::None
   NeutronEnableL3Agent: false
   NeutronEnableMetadataAgent: false
   NeutronEnableOVSAgent: false
index 2e6e5ec..48e93a0 100644 (file)
@@ -12,3 +12,4 @@ resource_registry:
   OS::TripleO::Services::Keystone: ../puppet/services/pacemaker/keystone.yaml
   OS::TripleO::Services::GlanceApi: ../puppet/services/pacemaker/glance-api.yaml
   OS::TripleO::Services::GlanceRegistry: ../puppet/services/pacemaker/glance-registry.yaml
+  OS::TripleO::Services::NeutronDhcpAgent: ../puppet/services/pacemaker/neutron-dhcp.yaml
index 4f79e51..eb967f1 100644 (file)
@@ -126,6 +126,7 @@ resource_registry:
   OS::TripleO::Services::Keystone: puppet/services/keystone.yaml
   OS::TripleO::Services::GlanceApi: puppet/services/glance-api.yaml
   OS::TripleO::Services::GlanceRegistry: puppet/services/glance-registry.yaml
+  OS::TripleO::Services::NeutronDhcpAgent: puppet/services/neutron-dhcp.yaml
 
 parameter_defaults:
   EnablePackageInstall: false
index 2c34ad1..cf20b51 100644 (file)
@@ -136,10 +136,6 @@ parameters:
     default: 'ctlplane'
     type: string
     description: Neutron ID or name for ctlplane network.
-  NeutronEnableIsolatedMetadata:
-    default: 'False'
-    description: If True, DHCP provide metadata route to VM.
-    type: string
   NeutronEnableTunnelling:
     type: string
     default: "True"
@@ -258,10 +254,6 @@ parameters:
     default: 'False'
     description: Whether to enable l3-agent HA
     type: string
-  NeutronDhcpAgentsPerNetwork:
-    type: number
-    default: 1
-    description: The number of neutron dhcp agents to schedule per network
   NovaIPv6:
     default: false
     description: Enable IPv6 features in Nova
@@ -515,13 +507,6 @@ parameters:
     description: Configures MySQL max_connections config setting
     type: number
     default: 4096
-  NeutronDnsmasqOptions:
-    default: 'dhcp-option-force=26,%MTU%'
-    description: >
-      Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU
-      to be set to the value of NeutronTenantMtu, which should be set to account
-      for tunnel overhead.
-    type: string
   NeutronPublicInterfaceDefaultRoute:
     default: ''
     description: A custom default route for the NeutronPublicInterface.
@@ -682,6 +667,7 @@ parameters:
       - OS::TripleO::Services::Keystone
       - OS::TripleO::Services::GlanceApi
       - OS::TripleO::Services::GlanceRegistry
+      - OS::TripleO::Services::NeutronDhcpAgent
     description: A list of service resources (configured in the Heat
                  resource_registry) which represent nested stacks
                  for each service that should get installed on the Controllers.
@@ -943,7 +929,6 @@ resources:
           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
           NeutronTenantMtu: {get_param: NeutronTenantMtu}
           NeutronExternalNetworkBridge: {get_param: NeutronExternalNetworkBridge}
-          NeutronEnableIsolatedMetadata: {get_param: NeutronEnableIsolatedMetadata}
           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
           NeutronEnableL2Pop: {get_param: NeutronEnableL2Pop}
           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
@@ -951,11 +936,6 @@ resources:
           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
           NeutronPassword: {get_param: NeutronPassword}
-          NeutronDnsmasqOptions:
-            str_replace:
-              template: {get_param: NeutronDnsmasqOptions}
-              params:
-                '%MTU%': {get_param: NeutronTenantMtu}
           NeutronDVR: {get_param: NeutronDVR}
           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
           NeutronAgentMode: {get_param: NeutronAgentMode}
@@ -967,7 +947,6 @@ resources:
           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
           NeutronL3HA: {get_param: NeutronL3HA}
-          NeutronDhcpAgentsPerNetwork: {get_param: NeutronDhcpAgentsPerNetwork}
           NeutronNetworkType: {get_param: NeutronNetworkType}
           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
           NovaIPv6: {get_param: NovaIPv6}
index a08ed1b..7334d4a 100644 (file)
@@ -328,14 +328,6 @@ parameters:
       scripts or be sure to keep 'datacentre' as a mapping network name.
     type: comma_delimited_list
     default: "datacentre:br-ex"
-  NeutronDnsmasqOptions:
-    default: 'dhcp-option-force=26,1400'
-    description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the gre tunnel overhead.
-    type: string
-  NeutronEnableDHCPAgent:
-    description: Knob to enable/disable DHCP Agent
-    type: boolean
-    default: true
   NeutronEnableL3Agent:
     description: Knob to enable/disable L3 agent
     type: boolean
@@ -356,10 +348,6 @@ parameters:
     default: 'False'
     description: Whether to enable l3-agent HA
     type: string
-  NeutronDhcpAgentsPerNetwork:
-    type: number
-    default: 3
-    description: The number of neutron dhcp agents to schedule per network
   NeutronDVR:
     default: 'False'
     description: Whether to configure Neutron Distributed Virtual Routers
@@ -394,10 +382,6 @@ parameters:
     default: 'True'
     description: Allow automatic l3-agent failover
     type: string
-  NeutronEnableIsolatedMetadata:
-    default: 'False'
-    description: If True, DHCP provide metadata route to VM.
-    type: string
   NeutronEnableTunnelling:
     type: string
     default: "True"
@@ -886,7 +870,6 @@ resources:
         swift_workers: {get_param: SwiftWorkers}
         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
-        neutron_enable_isolated_metadata: {get_param: NeutronEnableIsolatedMetadata}
         haproxy_log_address: {get_param: HAProxySyslogAddress}
         haproxy_stats_password: {get_param: HAProxyStatsPassword}
         haproxy_stats_user: {get_param: HAProxyStatsUser}
@@ -993,7 +976,6 @@ resources:
             template: DRIVERS
             params:
               DRIVERS: {get_param: NeutronTypeDrivers}
-        neutron_enable_dhcp_agent: {get_param: NeutronEnableDHCPAgent}
         neutron_enable_l3_agent: {get_param: NeutronEnableL3Agent}
         neutron_enable_metadata_agent: {get_param: NeutronEnableMetadataAgent}
         neutron_enable_ovs_agent: {get_param: NeutronEnableOVSAgent}
@@ -1004,7 +986,6 @@ resources:
               MECHANISMS: {get_param: NeutronMechanismDrivers}
         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
         neutron_l3_ha: {get_param: NeutronL3HA}
-        neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
         neutron_network_vlan_ranges:
           str_replace:
             template: RANGES
@@ -1052,7 +1033,6 @@ resources:
               AGENT_EXTENSIONS: {get_param: NeutronAgentExtensions}
         neutron_password: {get_param: NeutronPassword}
         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
-        neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
         neutron_dsn:
           list_join:
             - ''
@@ -1405,11 +1385,6 @@ resources:
 
                 # Neutron
                 neutron::bind_host: {get_input: neutron_api_network}
-                neutron::rabbit_password: {get_input: rabbit_password}
-                neutron::rabbit_user: {get_input: rabbit_username}
-                neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
-                neutron::rabbit_port: {get_input: rabbit_client_port}
-                neutron::debug: {get_input: debug}
                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
                 neutron::server::database_connection: {get_input: neutron_dsn}
@@ -1418,7 +1393,6 @@ resources:
                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
-                neutron::agents::dhcp::enable_isolated_metadata: {get_input: neutron_enable_isolated_metadata}
                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
                 neutron::plugins::ml2::flat_networks: {get_input: neutron_flat_networks}
                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
@@ -1428,7 +1402,6 @@ resources:
                 neutron_router_distributed: {get_input: neutron_router_distributed}
                 neutron::core_plugin: {get_input: neutron_core_plugin}
                 neutron::service_plugins: {get_input: neutron_service_plugins}
-                neutron::enable_dhcp_agent: {get_input: neutron_enable_dhcp_agent}
                 neutron::enable_l3_agent: {get_input: neutron_enable_l3_agent}
                 neutron::enable_metadata_agent: {get_input: neutron_enable_metadata_agent}
                 neutron::enable_ovs_agent: {get_input: neutron_enable_ovs_agent}
@@ -1437,7 +1410,6 @@ resources:
                 neutron::plugins::ml2::extension_drivers: {get_input: neutron_plugin_extensions}
                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
-                neutron::dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
@@ -1451,7 +1423,6 @@ resources:
                 neutron::agents::ml2::ovs::extensions: {get_input: neutron_agent_extensions}
                 neutron::server::auth_password: {get_input: neutron_password}
                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
-                neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
                 neutron_dsn: {get_input: neutron_dsn}
                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
                 neutron::db::mysql::password: {get_input: neutron_password}
index b662bc6..416233c 100644 (file)
@@ -50,7 +50,6 @@ glance::registry::keystone_tenant: 'service'
 neutron::server::auth_tenant: 'service'
 neutron::agents::metadata::auth_tenant: 'service'
 neutron::agents::l3::router_delete_namespaces: True
-neutron::agents::dhcp::dhcp_delete_namespaces: True
 cinder::api::keystone_tenant: 'service'
 swift::proxy::authtoken::admin_tenant_name: 'service'
 ceilometer::api::keystone_tenant: 'service'
@@ -110,7 +109,6 @@ glance_file_pcmk_directory: '/var/lib/glance/images'
 
 # neutron
 neutron::server::sync_db: true
-neutron::agents::dhcp::dnsmasq_config_file: /etc/neutron/dnsmasq-neutron.conf
 
 # nova
 nova::notify_on_state_change: 'vm_and_task_state'
index ef330e2..34ca845 100644 (file)
@@ -306,17 +306,8 @@ if hiera('step') >= 4 {
     }
   } else {
     include ::neutron::agents::l3
-    include ::neutron::agents::dhcp
     include ::neutron::agents::metadata
 
-    file { '/etc/neutron/dnsmasq-neutron.conf':
-      content => hiera('neutron_dnsmasq_options'),
-      owner   => 'neutron',
-      group   => 'neutron',
-      notify  => Service['neutron-dhcp-service'],
-      require => Package['neutron'],
-    }
-
     # If the value of core plugin is set to 'midonet',
     # skip all the ML2 configuration
     if hiera('neutron::core_plugin') == 'midonet.neutron.plugin_v1.MidonetPluginV2' {
@@ -361,13 +352,9 @@ if hiera('step') >= 4 {
       neutron_l3_agent_config {
         'DEFAULT/ovs_use_veth': value => hiera('neutron_ovs_use_veth', false);
       }
-      neutron_dhcp_agent_config {
-        'DEFAULT/ovs_use_veth': value => hiera('neutron_ovs_use_veth', false);
-      }
       Service['neutron-server'] -> Service['neutron-ovs-agent-service']
     }
 
-    Service['neutron-server'] -> Service['neutron-dhcp-service']
     Service['neutron-server'] -> Service['neutron-l3']
     Service['neutron-server'] -> Service['neutron-metadata']
   }
index 0b5aefd..1890918 100644 (file)
@@ -592,19 +592,6 @@ if hiera('step') >= 4 or ( hiera('step') >= 3 and $sync_db ) {
       metadata_proxy_shared_secret => hiera('nova::api::neutron_metadata_proxy_shared_secret'),
     }
   }
-  if hiera('neutron::enable_dhcp_agent',true) {
-    class { '::neutron::agents::dhcp' :
-      manage_service => false,
-      enabled        => false,
-    }
-    file { '/etc/neutron/dnsmasq-neutron.conf':
-      content => hiera('neutron_dnsmasq_options'),
-      owner   => 'neutron',
-      group   => 'neutron',
-      notify  => Service['neutron-dhcp-service'],
-      require => Package['neutron'],
-    }
-  }
   if hiera('neutron::enable_l3_agent',true) {
     class { '::neutron::agents::l3' :
       manage_service => false,
@@ -651,12 +638,6 @@ if hiera('step') >= 4 or ( hiera('step') >= 3 and $sync_db ) {
   neutron_l3_agent_config {
     'DEFAULT/ovs_use_veth': value => hiera('neutron_ovs_use_veth', false);
   }
-  neutron_dhcp_agent_config {
-    'DEFAULT/ovs_use_veth': value => hiera('neutron_ovs_use_veth', false);
-  }
-  neutron_config {
-    'DEFAULT/notification_driver': value => 'messaging';
-  }
 
   include ::cinder
   include ::cinder::config
@@ -1149,43 +1130,12 @@ if hiera('step') >= 5 {
                           Pacemaker::Resource::Service[$::sahara::params::engine_service_name]],
     }
 
-    if hiera('step') == 5 {
-      # Neutron
-      # NOTE(gfidente): Neutron will try to populate the database with some data
-      # as soon as neutron-server is started; to avoid races we want to make this
-      # happen only on one node, before normal Pacemaker initialization
-      # https://bugzilla.redhat.com/show_bug.cgi?id=1233061
-      # NOTE(emilien): we need to run this Exec only at Step 4 otherwise this exec
-      # will try to start the service while it's already started by Pacemaker
-      # It would result to a deployment failure since systemd would return 1 to Puppet
-      # and the overcloud would fail to deploy (6 would be returned).
-      # This conditional prevents from a race condition during the deployment.
-      # https://bugzilla.redhat.com/show_bug.cgi?id=1290582
-      exec { 'neutron-server-systemd-start-sleep' :
-        command => 'systemctl start neutron-server && /usr/bin/sleep 5',
-        path    => '/usr/bin',
-        unless  => '/sbin/pcs resource show neutron-server',
-      } ->
-      pacemaker::resource::service { $::neutron::params::server_service:
-        clone_params => 'interleave=true',
-        require      => Pacemaker::Resource::Ocf['openstack-core']
-      }
-    } else {
-      pacemaker::resource::service { $::neutron::params::server_service:
-        clone_params => 'interleave=true',
-        require      => Pacemaker::Resource::Ocf['openstack-core']
-      }
-    }
     if hiera('neutron::enable_l3_agent', true) {
       pacemaker::resource::service { $::neutron::params::l3_agent_service:
         clone_params => 'interleave=true',
       }
     }
-    if hiera('neutron::enable_dhcp_agent', true) {
-      pacemaker::resource::service { $::neutron::params::dhcp_agent_service:
-        clone_params => 'interleave=true',
-      }
-    }
+
     if hiera('neutron::enable_ovs_agent', true) {
       pacemaker::resource::service { $::neutron::params::ovs_agent_service:
         clone_params => 'interleave=true',
@@ -1245,81 +1195,6 @@ if hiera('step') >= 5 {
                     Pacemaker::Resource::Service[$::neutron::params::ovs_agent_service]],
       }
     }
-    pacemaker::constraint::base { 'keystone-to-neutron-server-constraint':
-      constraint_type => 'order',
-      first_resource  => 'openstack-core-clone',
-      second_resource => "${::neutron::params::server_service}-clone",
-      first_action    => 'start',
-      second_action   => 'start',
-      require         => [Pacemaker::Resource::Ocf['openstack-core'],
-                          Pacemaker::Resource::Service[$::neutron::params::server_service]],
-    }
-    if hiera('neutron::enable_ovs_agent',true) {
-      pacemaker::constraint::base { 'neutron-openvswitch-agent-to-dhcp-agent-constraint':
-        constraint_type => 'order',
-        first_resource  => "${::neutron::params::ovs_agent_service}-clone",
-        second_resource => "${::neutron::params::dhcp_agent_service}-clone",
-        first_action    => 'start',
-        second_action   => 'start',
-        require         => [Pacemaker::Resource::Service[$::neutron::params::ovs_agent_service],
-                            Pacemaker::Resource::Service[$::neutron::params::dhcp_agent_service]],
-      }
-    }
-    if hiera('neutron::enable_dhcp_agent',true) and hiera('neutron::enable_ovs_agent',true) {
-      pacemaker::constraint::base { 'neutron-server-to-openvswitch-agent-constraint':
-        constraint_type => 'order',
-        first_resource  => "${::neutron::params::server_service}-clone",
-        second_resource => "${::neutron::params::ovs_agent_service}-clone",
-        first_action    => 'start',
-        second_action   => 'start',
-        require         => [Pacemaker::Resource::Service[$::neutron::params::server_service],
-                            Pacemaker::Resource::Service[$::neutron::params::ovs_agent_service]],
-    }
-
-      pacemaker::constraint::colocation { 'neutron-openvswitch-agent-to-dhcp-agent-colocation':
-        source  => "${::neutron::params::dhcp_agent_service}-clone",
-        target  => "${::neutron::params::ovs_agent_service}-clone",
-        score   => 'INFINITY',
-        require => [Pacemaker::Resource::Service[$::neutron::params::ovs_agent_service],
-                    Pacemaker::Resource::Service[$::neutron::params::dhcp_agent_service]],
-      }
-    }
-    if hiera('neutron::enable_dhcp_agent',true) and hiera('neutron::enable_l3_agent',true) {
-      pacemaker::constraint::base { 'neutron-dhcp-agent-to-l3-agent-constraint':
-        constraint_type => 'order',
-        first_resource  => "${::neutron::params::dhcp_agent_service}-clone",
-        second_resource => "${::neutron::params::l3_agent_service}-clone",
-        first_action    => 'start',
-        second_action   => 'start',
-        require         => [Pacemaker::Resource::Service[$::neutron::params::dhcp_agent_service],
-                            Pacemaker::Resource::Service[$::neutron::params::l3_agent_service]]
-      }
-      pacemaker::constraint::colocation { 'neutron-dhcp-agent-to-l3-agent-colocation':
-        source  => "${::neutron::params::l3_agent_service}-clone",
-        target  => "${::neutron::params::dhcp_agent_service}-clone",
-        score   => 'INFINITY',
-        require => [Pacemaker::Resource::Service[$::neutron::params::dhcp_agent_service],
-                    Pacemaker::Resource::Service[$::neutron::params::l3_agent_service]]
-      }
-    }
-    if hiera('neutron::enable_l3_agent',true) and hiera('neutron::enable_metadata_agent',true) {
-      pacemaker::constraint::base { 'neutron-l3-agent-to-metadata-agent-constraint':
-        constraint_type => 'order',
-        first_resource  => "${::neutron::params::l3_agent_service}-clone",
-        second_resource => "${::neutron::params::metadata_agent_service}-clone",
-        first_action    => 'start',
-        second_action   => 'start',
-        require         => [Pacemaker::Resource::Service[$::neutron::params::l3_agent_service],
-                            Pacemaker::Resource::Service[$::neutron::params::metadata_agent_service]]
-      }
-      pacemaker::constraint::colocation { 'neutron-l3-agent-to-metadata-agent-colocation':
-        source  => "${::neutron::params::metadata_agent_service}-clone",
-        target  => "${::neutron::params::l3_agent_service}-clone",
-        score   => 'INFINITY',
-        require => [Pacemaker::Resource::Service[$::neutron::params::l3_agent_service],
-                    Pacemaker::Resource::Service[$::neutron::params::metadata_agent_service]]
-      }
-    }
     if hiera('neutron::core_plugin') == 'midonet.neutron.plugin_v1.MidonetPluginV2' {
       #midonet-chain chain keystone-->neutron-server-->dhcp-->metadata->tomcat
       pacemaker::constraint::base { 'neutron-server-to-dhcp-agent-constraint':
diff --git a/puppet/services/neutron-base.yaml b/puppet/services/neutron-base.yaml
new file mode 100644 (file)
index 0000000..b34bdd2
--- /dev/null
@@ -0,0 +1,44 @@
+heat_template_version: 2016-04-08
+
+description: >
+  OpenStack Neutron base service. Shared for all Neutron agents.
+
+parameters:
+  RabbitPassword:
+    description: The password for RabbitMQ
+    type: string
+    hidden: true
+  RabbitUserName:
+    default: guest
+    description: The username for RabbitMQ
+    type: string
+  RabbitClientUseSSL:
+    default: false
+    description: >
+        Rabbit client subscriber parameter to specify
+        an SSL connection to the RabbitMQ host.
+    type: string
+  RabbitClientPort:
+    default: 5672
+    description: Set rabbit subscriber port, change this if using SSL
+    type: number
+  NeutronDhcpAgentsPerNetwork:
+    type: number
+    default: 3
+    description: The number of neutron dhcp agents to schedule per network
+  Debug:
+    type: string
+    default: ''
+    description: Set to True to enable debugging on all services.
+
+outputs:
+  role_data:
+    description: Role data for the Neutron base service.
+    value:
+      config_settings:
+        neutron::rabbit_password: {get_param: RabbitPassword}
+        neutron::rabbit_user: {get_param: RabbitUserName}
+        neutron::rabbit_use_ssl: {get_param: RabbitClientUseSSL}
+        neutron::rabbit_port: {get_param: RabbitClientPort}
+        neutron::dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
+        neutron::debug: {get_param: Debug}
diff --git a/puppet/services/neutron-dhcp.yaml b/puppet/services/neutron-dhcp.yaml
new file mode 100644 (file)
index 0000000..548b4ba
--- /dev/null
@@ -0,0 +1,56 @@
+heat_template_version: 2016-04-08
+
+description: >
+  OpenStack Neutron DHCP agent configured with Puppet
+
+parameters:
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    type: json
+  MysqlVirtualIPUri:
+    type: string
+    default: ''
+  NeutronEnableIsolatedMetadata:
+    default: 'False'
+    description: If True, DHCP provide metadata route to VM.
+    type: string
+  NeutronDnsmasqOptions:
+    default: 'dhcp-option-force=26,%MTU%'
+    description: >
+      Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU
+      to be set to the value of NeutronTenantMtu, which should be set to account
+      for tunnel overhead.
+    type: string
+  NeutronTenantMtu:
+    description: >
+      The default MTU for tenant networks. For VXLAN/GRE tunneling, this should
+      be at least 50 bytes smaller than the MTU on the physical network. This
+      value will be used to set the MTU on the virtual Ethernet device.
+      This value will be used to construct the NeutronDnsmasqOptions, since that
+      will determine the MTU that is assigned to the VM host through DHCP.
+    default: "1400"
+    type: string
+
+resources:
+
+  NeutronBase:
+    type: ./neutron-base.yaml
+
+outputs:
+  role_data:
+    description: Role data for the Neutron DHCP agent service.
+    value:
+      config_settings:
+        map_merge:
+          - get_attr: [NeutronBase, role_data, config_settings]
+          - neutron::agents::dhcp::dnsmasq_config_file: /etc/neutron/dnsmasq-neutron.conf
+            tripleo::profile::base::neutron::dhcp:
+              str_replace:
+                template: {get_param: NeutronDnsmasqOptions}
+                params:
+                  '%MTU%': {get_param: NeutronTenantMtu}
+            neutron::agents::dhcp::enable_isolated_metadata: {get_param: NeutronEnableIsolatedMetadata}
+      step_config: |
+        include tripleo::profile::base::neutron::dhcp
diff --git a/puppet/services/pacemaker/neutron-dhcp.yaml b/puppet/services/pacemaker/neutron-dhcp.yaml
new file mode 100644 (file)
index 0000000..4be711c
--- /dev/null
@@ -0,0 +1,33 @@
+heat_template_version: 2016-04-08
+
+description: >
+  OpenStack Neutron DHCP service with Pacemaker configured with Puppet.
+
+parameters:
+  EndpointMap:
+    default: {}
+    description: Mapping of service endpoint -> protocol. Typically set
+                 via parameter_defaults in the resource registry.
+    type: json
+  MysqlVirtualIPUri:
+    type: string
+    default: ''
+
+resources:
+
+  NeutronDhcpBase:
+    type: ../neutron-dhcp.yaml
+    properties:
+      EndpointMap: {get_param: EndpointMap}
+      MysqlVirtualIPUri: {get_param: MysqlVirtualIPUri}
+
+outputs:
+  role_data:
+    description: Role data for the Neutron DHCP role.
+    value:
+      config_settings:
+        map_merge:
+          - get_attr: [NeutronDhcpBase, role_data, config_settings]
+          - tripleo::profile::pacemaker::neutron::enable_dhcp: True
+      step_config: |
+        include ::tripleo::profile::pacemaker::neutron::dhcp