OpenContrail heat templates
authorNicolas Hicher <nhicher@redhat.com>
Thu, 21 Jan 2016 15:21:23 +0000 (16:21 +0100)
committerNicolas Hicher <nhicher@redhat.com>
Thu, 21 Jan 2016 15:49:49 +0000 (10:49 -0500)
Deploy a TripleO overcloud with OpenContrail Vrouter plugin configured
to interact with an existing OpenContrail Server Manager.

OpenContrail is an Apache 2.0-licensed project that is built using
standards-based protocols and provides all the necessary components for
network virtualization–SDN controller, virtual router, analytics engine,
and published northbound APIs. It has an extensive REST API to configure
and gather operational and analytics data from the system.

Co-Authored-By: Jiri Stransky <jistr@redhat.com>
Change-Id: I699a7c4ea09d024fe4d70c6a507c524f0a7aafd5

environments/neutron-opencontrail.yaml [new file with mode: 0644]
puppet/compute.yaml
puppet/controller.yaml
puppet/extraconfig/pre_deploy/compute/neutron-opencontrail.yaml [new file with mode: 0644]
puppet/extraconfig/pre_deploy/controller/neutron-opencontrail.yaml [new file with mode: 0644]
puppet/manifests/overcloud_compute.pp
puppet/manifests/overcloud_controller.pp
puppet/manifests/overcloud_controller_pacemaker.pp

diff --git a/environments/neutron-opencontrail.yaml b/environments/neutron-opencontrail.yaml
new file mode 100644 (file)
index 0000000..4704dbc
--- /dev/null
@@ -0,0 +1,22 @@
+# A Heat environment file which can be used to enable OpenContrail
+# extensions, configured via puppet
+resource_registry:
+  OS::TripleO::ControllerExtraConfigPre: ../puppet/extraconfig/pre_deploy/controller/neutron-opencontrail.yaml
+  OS::TripleO::ComputeExtraConfigPre: ../puppet/extraconfig/pre_deploy/compute/neutron-opencontrail.yaml
+
+parameter_defaults:
+  NeutronCorePlugin: neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2
+  NeutronServicePlugins: neutron_plugin_contrail.plugins.opencontrail.loadbalancer.plugin.LoadBalancerPlugin
+  NeutronEnableDHCPAgent: false
+  NeutronEnableL3Agent: false
+  NeutronEnableMetadataAgent: false
+  NeutronEnableOVSAgent: false
+  NeutronEnableTunnelling: false
+
+  # required params:
+  #ContrailApiServerIp:
+  #ContrailExtensions: ''
+
+  # optional params
+  # ContrailApiServerPort: 8082
+  # ContrailMultiTenancy: false
index a0af231..5b18dc8 100644 (file)
@@ -437,6 +437,7 @@ resources:
             - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
             - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
             - midonet_data # Optionally provided by AllNodesExtraConfig
+            - neutron_opencontrail_data  # Optionally provided by ComputeExtraConfigPre
           datafiles:
             compute_extraconfig:
               mapped_data: {get_param: NovaComputeExtraConfig}
index 7014501..bb0d500 100644 (file)
@@ -1207,6 +1207,7 @@ resources:
             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
             - neutron_nuage_data # Optionally provided by ControllerExtraConfigPre
             - midonet_data #Optionally provided by AllNodesExtraConfig
+            - neutron_opencontrail_data # Optionally provided by ControllerExtraConfigPre
           datafiles:
             controller_extraconfig:
               mapped_data: {get_param: ControllerExtraConfig}
diff --git a/puppet/extraconfig/pre_deploy/compute/neutron-opencontrail.yaml b/puppet/extraconfig/pre_deploy/compute/neutron-opencontrail.yaml
new file mode 100644 (file)
index 0000000..e496553
--- /dev/null
@@ -0,0 +1,47 @@
+heat_template_version: 2015-04-30
+
+description: Compute node hieradata for Neutron OpenContrail configuration
+
+parameters:
+  server:
+    description: ID of the compute node to apply this config to
+    type: string
+  ContrailApiServerIp:
+    description: IP address of the OpenContrail API server
+    type: string
+  ContrailApiServerPort:
+    description: Port of the OpenContrail API
+    type: string
+    default: 8082
+
+resources:
+  ComputeContrailConfig:
+    type: OS::Heat::StructuredConfig
+    properties:
+      group: os-apply-config
+      config:
+        hiera:
+          datafiles:
+            neutron_opencontrail_data:
+              mapped_data:
+                nova::network::neutron::network_api_class: nova.network.neutronv2.api.API
+
+                contrail::vrouter::provision_vrouter::api_address: {get_input: contrail_api_server_ip}
+                contrail::vrouter::provision_vrouter::api_port: {get_input: contrail_api_server_port}
+                contrail::vrouter::provision_vrouter::keystone_admin_user: admin
+                contrail::vrouter::provision_vrouter::keystone_admin_tenant_name: admin
+                contrail::vrouter::provision_vrouter::keystone_admin_password: '"%{::admin_password}"'
+
+  ComputeContrailDeployment:
+    type: OS::Heat::StructuredDeployment
+    properties:
+      config: {get_resource: ComputeContrailConfig}
+      server: {get_param: server}
+      input_values:
+        contrail_api_server_ip: {get_param: ContrailApiServerIp}
+        contrail_api_server_port: {get_param: ContrailApiServerPort}
+
+outputs:
+  deploy_stdout:
+    description: Output of the extra hiera data deployment
+    value: {get_attr: [ComputeContrailDeployment, deploy_stdout]}
diff --git a/puppet/extraconfig/pre_deploy/controller/neutron-opencontrail.yaml b/puppet/extraconfig/pre_deploy/controller/neutron-opencontrail.yaml
new file mode 100644 (file)
index 0000000..5c686fe
--- /dev/null
@@ -0,0 +1,62 @@
+heat_template_version: 2015-04-30
+
+description: Controller hieradata for Neutron OpenContrail configuration
+
+parameters:
+  server:
+    description: ID of the controller node to apply this config to
+    type: string
+  ContrailApiServerIp:
+    description: IP address of the OpenContrail API server
+    type: string
+  ContrailApiServerPort:
+    description: Port of the OpenContrail API
+    type: string
+    default: 8082
+  ContrailMultiTenancy:
+    description: Whether to enable multi tenancy
+    type: boolean
+    default: false
+  ContrailExtensions:
+    description: List of OpenContrail extensions to be enabled
+    type: comma_delimited_list
+    default: ''
+
+resources:
+  ControllerContrailConfig:
+    type: OS::Heat::StructuredConfig
+    properties:
+      group: os-apply-config
+      config:
+        hiera:
+          datafiles:
+            neutron_opencontrail_data:
+              mapped_data:
+                neutron::api_extensions_path: /usr/lib/python2.7/site-packages/neutron_plugin_contrail/extensions
+
+                neutron::plugins::opencontrail::api_server_ip: {get_input: contrail_api_server_ip}
+                neutron::plugins::opencontrail::api_server_port: {get_input: contrail_api_server_port}
+                neutron::plugins::opencontrail::multi_tenancy: {get_input: contrail_multi_tenancy}
+                neutron::plugins::opencontrail::contrail_extensions: {get_input: contrail_extensions}
+                neutron::plugins::opencontrail::keystone_auth_url: '"%{hiera(''keystone_auth_uri'')}"'
+                neutron::plugins::opencontrail::keystone_admin_user: admin
+                neutron::plugins::opencontrail::keystone_admin_tenant_name: admin
+                neutron::plugins::opencontrail::keystone_admin_password: '"%{hiera(''admin_password'')}"'
+                neutron::plugins::opencontrail::keystone_admin_token: '"%{hiera(''keystone::admin_token'')}"'
+
+  ControllerContrailDeployment:
+    type: OS::Heat::StructuredDeployment
+    properties:
+      config: {get_resource: ControllerContrailConfig}
+      server: {get_param: server}
+      input_values:
+        contrail_api_server_ip: {get_param: ContrailApiServerIp}
+        contrail_api_server_port: {get_param: ContrailApiServerPort}
+        contrail_multi_tenancy: {get_param: ContrailMultiTenancy}
+        contrail_extensions: {get_param: ContrailExtensions}
+
+
+outputs:
+  deploy_stdout:
+    description: Output of the extra hiera data deployment
+    value: {get_attr: [ControllerContrailDeployment, deploy_stdout]}
index bb3575c..dec6c6a 100644 (file)
@@ -106,6 +106,15 @@ elsif hiera('neutron::core_plugin') == 'midonet.neutron.plugin_v1.MidonetPluginV
     cassandra_seeds   => $cassandra_node_ips
   }
 }
+elsif hiera('neutron::core_plugin') == 'neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2' {
+
+  include ::contrail::vrouter
+  # NOTE: it's not possible to use this class without a functional
+  # contrail controller up and running
+  #class {'::contrail::vrouter::provision_vrouter':
+  #  require => Class['contrail::vrouter'],
+  #}
+}
 else {
 
   include ::neutron::plugins::ml2
index ea63b1a..347ea7b 100644 (file)
@@ -284,11 +284,13 @@ if hiera('step') >= 3 {
   include ::neutron::server
   include ::neutron::server::notifications
 
-  # If the value of core plugin is set to 'nuage',
-  # include nuage core plugin, and it does not
+  # If the value of core plugin is set to 'nuage' or 'opencontrail',
+  # include nuage or opencontrail core plugins, and it does not
   # need the l3, dhcp and metadata agents
   if hiera('neutron::core_plugin') == 'neutron.plugins.nuage.plugin.NuagePlugin' {
     include ::neutron::plugins::nuage
+  } elsif hiera('neutron::core_plugin') == 'neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2' {
+    include ::neutron::plugins::opencontrail
   } else {
     include ::neutron::agents::l3
     include ::neutron::agents::dhcp
index f8d3fd7..c41ab2c 100644 (file)
@@ -654,6 +654,9 @@ if hiera('step') >= 3 {
   if  hiera('neutron::core_plugin') == 'neutron.plugins.nuage.plugin.NuagePlugin' {
     include ::neutron::plugins::nuage
   }
+  if  hiera('neutron::core_plugin') == 'neutron_plugin_contrail.plugins.opencontrail.contrail_plugin.NeutronPluginContrailCoreV2' {
+    include ::neutron::plugins::opencontrail
+  }
   if hiera('neutron::core_plugin') == 'midonet.neutron.plugin_v1.MidonetPluginV2' {
     class {'::neutron::plugins::midonet':
       midonet_api_ip    => $public_vip,