Use os-net-config in multinode jobs
authorEmilien Macchi <emilien@redhat.com>
Wed, 25 Jan 2017 15:35:20 +0000 (10:35 -0500)
committerEmilien Macchi <emilien@redhat.com>
Fri, 27 Jan 2017 14:26:31 +0000 (14:26 +0000)
Full credits to James Slagle, author of this code in TripleO CI:
https://review.openstack.org/#/c/409346

This patch adds a new template for configuring networking on the
Overcloud nodes using os-net-config in multinode jobs. Previously we
were not using os-net-config at all.

Also updates the multinode.yaml environment to use this network config
template.

The IP of each subnode is used when the vxlan tunnels are configured in
OVS, given that, each node needs its own unique network configuration.
To accomodate that, the templates makes use of the network_config_hook
function to influence run-os-net-config.sh

This patch is just the first step to totally switching to os-net-config
in multinode jobs. The devstack-gate code is still in use to bootstrap
the initial networking on the undercloud and subnodes. That will be
switched over in subsequent patches.

Change-Id: I6efa71eb23109d0b3b480061135c572ab89f5981
Co-Authorized-By: James Slagle <jslagle@redhat.com>
Implements: blueprint multinode-ci-os-net-config

ci/common/net-config-multinode-os-net-config.yaml [new file with mode: 0644]
ci/environments/multinode.yaml
ci/environments/scenario001-multinode.yaml
ci/environments/scenario002-multinode.yaml
ci/environments/scenario003-multinode.yaml
ci/environments/scenario004-multinode.yaml

diff --git a/ci/common/net-config-multinode-os-net-config.yaml b/ci/common/net-config-multinode-os-net-config.yaml
new file mode 100644 (file)
index 0000000..227c5da
--- /dev/null
@@ -0,0 +1,114 @@
+heat_template_version: 2016-10-14
+
+description: >
+  Software Config to drive os-net-config for a simple bridge configured
+  with a static IP address for the ctlplane network.
+
+parameters:
+  ControlPlaneIp:
+    default: ''
+    description: IP address/subnet on the ctlplane network
+    type: string
+  ExternalIpSubnet:
+    default: ''
+    description: IP address/subnet on the external network
+    type: string
+  InternalApiIpSubnet:
+    default: ''
+    description: IP address/subnet on the internal API network
+    type: string
+  StorageIpSubnet:
+    default: ''
+    description: IP address/subnet on the storage network
+    type: string
+  StorageMgmtIpSubnet:
+    default: ''
+    description: IP address/subnet on the storage mgmt network
+    type: string
+  TenantIpSubnet:
+    default: ''
+    description: IP address/subnet on the tenant network
+    type: string
+  ManagementIpSubnet:
+    default: ''
+    description: IP address/subnet on the management network
+    type: string
+  ControlPlaneSubnetCidr: # Override this via parameter_defaults
+    default: '24'
+    description: The subnet CIDR of the control plane network.
+    type: string
+  OvSBridgeMtu:
+    default: 1300
+    description: The mtu of the OvS bridge
+    type: number
+
+resources:
+
+  OsNetConfigImpl:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config:
+        list_join:
+        - ''
+        - - |
+            #!/bin/bash
+            function network_config_hook {
+              primary_private_ip=$(cat /etc/nodepool/primary_node_private)
+              sed -i "s/primary_private_ip/$primary_private_ip/" /etc/os-net-config/config.json
+              subnode_private_ip=$(cat /etc/nodepool/node_private)
+              sed -i "s/subnode_private_ip/$subnode_private_ip/" /etc/os-net-config/config.json
+              # We start with an arbitrarily high vni key so that we don't
+              # overlap with Neutron created values. These will also match the
+              # values that we've been using previously from the devstack-gate
+              # code.
+              vni=1000002
+              subnode_index=$(grep -n $(cat /etc/nodepool/node_private) /etc/nodepool/sub_nodes_private | cut -d: -f1)
+              let vni+=$subnode_index
+              sed -i "s/vni/$vni/" /etc/os-net-config/config.json
+              export interface_name="br-ex_$primary_private_ip"
+              # Until we are fully migrated to os-net-config we need to clean
+              # up the old bridge first created by devstack-gate
+              ovs-vsctl del-br br-ex
+            }
+
+          -
+            str_replace:
+              template:
+                get_file: ../../network/scripts/run-os-net-config.sh
+              params:
+                $network_config:
+                  network_config:
+                    - type: ovs_bridge
+                      name: bridge_name
+                      mtu:
+                        get_param: OvSBridgeMtu
+                      use_dhcp: false
+                      addresses:
+                        - ip_netmask:
+                            list_join:
+                              - "/"
+                              - - get_param: ControlPlaneIp
+                                - get_param: ControlPlaneSubnetCidr
+                      members:
+                        - type: ovs_tunnel
+                          name: interface_name
+                          tunnel_type: vxlan
+                          ovs_options:
+                            - list_join:
+                              - "="
+                              - - key
+                                - vni
+                            - list_join:
+                              - "="
+                              - - remote_ip
+                                - primary_private_ip
+                            - list_join:
+                              - "="
+                              - - local_ip
+                                - subnode_private_ip
+
+outputs:
+  OS::stack_id:
+    description: The OsNetConfigImpl resource.
+    value: {get_resource: OsNetConfigImpl}
index d7b61bb..11243c8 100644 (file)
@@ -1,6 +1,6 @@
 resource_registry:
-  OS::TripleO::Controller::Net::SoftwareConfig: ../common/net-config-multinode.yaml
-  OS::TripleO::Compute::Net::SoftwareConfig: ../common/net-config-multinode.yaml
+  OS::TripleO::Controller::Net::SoftwareConfig: ../common/net-config-multinode-os-net-config.yaml
+  OS::TripleO::Compute::Net::SoftwareConfig: ../common/net-config-multinode-os-net-config.yaml
 
 parameter_defaults:
   ControllerServices:
index bfda8cc..f75c0fd 100644 (file)
@@ -1,6 +1,6 @@
 resource_registry:
-  OS::TripleO::Controller::Net::SoftwareConfig: ../common/net-config-multinode.yaml
-  OS::TripleO::Compute::Net::SoftwareConfig: ../common/net-config-multinode.yaml
+  OS::TripleO::Controller::Net::SoftwareConfig: ../common/net-config-multinode-os-net-config.yaml
+  OS::TripleO::Compute::Net::SoftwareConfig: ../common/net-config-multinode-os-net-config.yaml
   OS::TripleO::Services::CephMon: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-mon.yaml
   OS::TripleO::Services::CephOSD: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-osd.yaml
   OS::TripleO::Services::CephClient: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-client.yaml
index 0dfa78d..e611c6f 100644 (file)
@@ -1,6 +1,6 @@
 resource_registry:
-  OS::TripleO::Controller::Net::SoftwareConfig: ../common/net-config-multinode.yaml
-  OS::TripleO::Compute::Net::SoftwareConfig: ../common/net-config-multinode.yaml
+  OS::TripleO::Controller::Net::SoftwareConfig: ../common/net-config-multinode-os-net-config.yaml
+  OS::TripleO::Compute::Net::SoftwareConfig: ../common/net-config-multinode-os-net-config.yaml
   OS::TripleO::Services::BarbicanApi: ../../puppet/services/barbican-api.yaml
   OS::TripleO::Services::Zaqar: ../../puppet/services/zaqar.yaml
   OS::TripleO::Services::Ec2Api: ../../puppet/services/ec2-api.yaml
index 08e4d19..b26ee0a 100644 (file)
@@ -1,6 +1,6 @@
 resource_registry:
-  OS::TripleO::Controller::Net::SoftwareConfig: ../common/net-config-multinode.yaml
-  OS::TripleO::Compute::Net::SoftwareConfig: ../common/net-config-multinode.yaml
+  OS::TripleO::Controller::Net::SoftwareConfig: ../common/net-config-multinode-os-net-config.yaml
+  OS::TripleO::Compute::Net::SoftwareConfig: ../common/net-config-multinode-os-net-config.yaml
   OS::TripleO::Services::SaharaApi: ../../puppet/services/sahara-api.yaml
   OS::TripleO::Services::SaharaEngine: ../../puppet/services/sahara-engine.yaml
   OS::TripleO::Services::MistralApi: ../../puppet/services/mistral-api.yaml
index e97113b..5b253a8 100644 (file)
@@ -1,6 +1,6 @@
 resource_registry:
-  OS::TripleO::Controller::Net::SoftwareConfig: ../common/net-config-multinode.yaml
-  OS::TripleO::Compute::Net::SoftwareConfig: ../common/net-config-multinode.yaml
+  OS::TripleO::Controller::Net::SoftwareConfig: ../common/net-config-multinode-os-net-config.yaml
+  OS::TripleO::Compute::Net::SoftwareConfig: ../common/net-config-multinode-os-net-config.yaml
   OS::TripleO::Services::CephMon: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-mon.yaml
   OS::TripleO::Services::CephOSD: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-osd.yaml
   OS::TripleO::Services::CephClient: /usr/share/openstack-tripleo-heat-templates/puppet/services/ceph-client.yaml