Convert AllNodesExtraConfig to support composable roles
authorSteven Hardy <shardy@redhat.com>
Thu, 8 Sep 2016 11:14:09 +0000 (12:14 +0100)
committerEmilien Macchi <emilien@redhat.com>
Fri, 16 Sep 2016 00:24:44 +0000 (00:24 +0000)
This adjusts the interface to OS::TripleO::AllNodesExtraConfig so
it supports custom/composable/optional roles.

Note this does break backwards compatibility, and I can't see any way
to avoid that.  I've converted the in-tree templates, and we'll have
to document carefully and or provide a script (or automated conversion
via mistral perhaps?) to allow folks to easily adjust any out of tree
templates to the new format.

Basically you just have to:

1. Remove all the *_servers parameters, replace with one "servers"
   json parameter

2. Replace references to e.g "controller_servers" with "servers, Controller"
   which does a path-based lookup into the json map provided by overcloud.yaml

Change-Id: I5eebf853646b2f6300d6b542fcd4f43e82d3b413
Partially-Implements: blueprint custom-roles

extraconfig/all_nodes/mac_hostname.j2.yaml [moved from extraconfig/all_nodes/mac_hostname.yaml with 65% similarity]
extraconfig/all_nodes/random_string.j2.yaml [moved from extraconfig/all_nodes/random_string.yaml with 84% similarity]
extraconfig/all_nodes/swap-partition.j2.yaml [new file with mode: 0644]
extraconfig/all_nodes/swap-partition.yaml [deleted file]
extraconfig/all_nodes/swap.j2.yaml [new file with mode: 0644]
extraconfig/all_nodes/swap.yaml [deleted file]
overcloud.j2.yaml
puppet/extraconfig/all_nodes/neutron-midonet-all-nodes.yaml
puppet/extraconfig/all_nodes/neutron-ml2-cisco-nexus-ucsm.yaml

similarity index 65%
rename from extraconfig/all_nodes/mac_hostname.yaml
rename to extraconfig/all_nodes/mac_hostname.j2.yaml
index 7d8704e..af6aa7f 100644 (file)
@@ -9,15 +9,7 @@ description: >
 # out-of-tree templates they may require additional parameters if the
 # in-tree templates add a new role.
 parameters:
-  controller_servers:
-    type: json
-  compute_servers:
-    type: json
-  blockstorage_servers:
-    type: json
-  objectstorage_servers:
-    type: json
-  cephstorage_servers:
+  servers:
     type: json
 # Note extra parameters can be defined, then passed data via the
 # environment parameter_defaults, without modifying the parent template
@@ -37,47 +29,17 @@ resources:
   # FIXME(shardy): Long term it'd be better if Heat SoftwareDeployments accepted
   # list instead of a map, then we could join the lists of servers into one
   # deployment instead of requiring one deployment per-role.
-  CollectMacDeploymentsController:
+{% for role in roles %}
+  CollectMacDeployments{{role.name}}:
     type: OS::Heat::SoftwareDeployments
     properties:
       name: CollectMacDeploymentsController
-      servers:  {get_param: controller_servers}
-      config: {get_resource: CollectMacConfig}
-      actions: ['CREATE'] # Only do this on CREATE
-
-  CollectMacDeploymentsCompute:
-    type: OS::Heat::SoftwareDeployments
-    properties:
-      name: CollectMacDeploymentsCompute
-      servers:  {get_param: compute_servers}
-      config: {get_resource: CollectMacConfig}
-      actions: ['CREATE'] # Only do this on CREATE
-
-  CollectMacDeploymentsBlockStorage:
-    type: OS::Heat::SoftwareDeployments
-    properties:
-      name: CollectMacDeploymentsBlockStorage
-      servers:  {get_param: blockstorage_servers}
-      config: {get_resource: CollectMacConfig}
-      actions: ['CREATE'] # Only do this on CREATE
-
-  CollectMacDeploymentsObjectStorage:
-    type: OS::Heat::SoftwareDeployments
-    properties:
-      name: CollectMacDeploymentsObjectStorage
-      servers:  {get_param: objectstorage_servers}
-      config: {get_resource: CollectMacConfig}
-      actions: ['CREATE'] # Only do this on CREATE
-
-  CollectMacDeploymentsCephStorage:
-    type: OS::Heat::SoftwareDeployments
-    properties:
-      name: CollectMacDeploymentsCephStorage
-      servers:  {get_param: cephstorage_servers}
+      servers:  {get_param: servers, {{role.name}}}
       config: {get_resource: CollectMacConfig}
       actions: ['CREATE'] # Only do this on CREATE
+{% endfor %}
 
-  # Now we distribute all-the-macs to all nodes
+  # Now we distribute all-the-macs to all Controller nodes
   DistributeMacConfig:
     type: OS::Heat::SoftwareConfig
     properties:
@@ -101,7 +63,7 @@ resources:
     type: OS::Heat::SoftwareDeployments
     properties:
       name: DistributeMacDeploymentsController
-      servers:  {get_param: controller_servers}
+      servers:  {get_param: servers, Controller}
       config: {get_resource: DistributeMacConfig}
       input_values:
         # FIXME(shardy): It'd be more convenient if we could join these
similarity index 84%
rename from extraconfig/all_nodes/random_string.yaml
rename to extraconfig/all_nodes/random_string.j2.yaml
index d38701e..1c42cb8 100644 (file)
@@ -10,15 +10,7 @@ description: >
 # out-of-tree templates they may require additional parameters if the
 # in-tree templates add a new role.
 parameters:
-  controller_servers:
-    type: json
-  compute_servers:
-    type: json
-  blockstorage_servers:
-    type: json
-  objectstorage_servers:
-    type: json
-  cephstorage_servers:
+  servers:
     type: json
 # Note extra parameters can be defined, then passed data via the
 # environment parameter_defaults, without modifying the parent template
@@ -42,7 +34,7 @@ resources:
     type: OS::Heat::SoftwareDeployments
     properties:
       name: RandomDeploymentsController
-      servers:  {get_param: controller_servers}
+      servers:  {get_param: servers, Controller}
       config: {get_resource: RandomConfig}
       actions: ['CREATE'] # Only do this on CREATE
       input_values:
@@ -52,7 +44,7 @@ resources:
     type: OS::Heat::SoftwareDeployments
     properties:
       name: RandomDeploymentsCompute
-      servers:  {get_param: compute_servers}
+      servers:  {get_param: servers, Compute}
       config: {get_resource: RandomConfig}
       actions: ['CREATE'] # Only do this on CREATE
       input_values:
diff --git a/extraconfig/all_nodes/swap-partition.j2.yaml b/extraconfig/all_nodes/swap-partition.j2.yaml
new file mode 100644 (file)
index 0000000..014a96a
--- /dev/null
@@ -0,0 +1,44 @@
+heat_template_version: 2014-10-16
+
+description: >
+  Extra config to add swap space to nodes.
+
+# Parameters passed from the parent template - note if you maintain
+# out-of-tree templates they may require additional parameters if the
+# in-tree templates add a new role.
+parameters:
+  servers:
+    type: json
+  swap_partition_label:
+    type: string
+    description: Swap partition label
+    default: 'swap1'
+
+
+resources:
+
+  SwapConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config: |
+        #!/bin/bash
+        set -eux
+        swap_partition=$(realpath /dev/disk/by-label/$swap_partition_label)
+        swapon $swap_partition
+        echo "$swap_partition swap swap defaults 0 0" >> /etc/fstab
+      inputs:
+        - name: swap_partition_label
+          description: Swap partition label
+          default: 'swap1'
+
+{% for role in roles %}
+  {{role.name}}SwapDeployment:
+    type: OS::Heat::SoftwareDeploymentGroup
+    properties:
+      config: {get_resource: SwapConfig}
+      servers: {get_param: servers, {{role.name}}}
+      input_values:
+        swap_partition_label: {get_param: swap_partition_label}
+      actions: ["CREATE"]
+{% endfor %}
diff --git a/extraconfig/all_nodes/swap-partition.yaml b/extraconfig/all_nodes/swap-partition.yaml
deleted file mode 100644 (file)
index e6fa9ec..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-heat_template_version: 2014-10-16
-
-description: >
-  Extra config to add swap space to nodes.
-
-# Parameters passed from the parent template - note if you maintain
-# out-of-tree templates they may require additional parameters if the
-# in-tree templates add a new role.
-parameters:
-  controller_servers:
-    type: json
-  compute_servers:
-    type: json
-  blockstorage_servers:
-    type: json
-  objectstorage_servers:
-    type: json
-  cephstorage_servers:
-    type: json
-  swap_partition_label:
-    type: string
-    description: Swap partition label
-    default: 'swap1'
-
-
-resources:
-
-  SwapConfig:
-    type: OS::Heat::SoftwareConfig
-    properties:
-      group: script
-      config: |
-        #!/bin/bash
-        set -eux
-        swap_partition=$(realpath /dev/disk/by-label/$swap_partition_label)
-        swapon $swap_partition
-        echo "$swap_partition swap swap defaults 0 0" >> /etc/fstab
-      inputs:
-        - name: swap_partition_label
-          description: Swap partition label
-          default: 'swap1'
-
-  ControllerSwapDeployment:
-    type: OS::Heat::SoftwareDeploymentGroup
-    properties:
-      config: {get_resource: SwapConfig}
-      servers: {get_param: controller_servers}
-      input_values:
-        swap_partition_label: {get_param: swap_partition_label}
-      actions: ["CREATE"]
-
-  ComputeSwapDeployment:
-    type: OS::Heat::SoftwareDeploymentGroup
-    properties:
-      config: {get_resource: SwapConfig}
-      servers: {get_param: compute_servers}
-      input_values:
-        swap_partition_label: {get_param: swap_partition_label}
-      actions: ["CREATE"]
-
-  BlockStorageSwapDeployment:
-    type: OS::Heat::SoftwareDeploymentGroup
-    properties:
-      config: {get_resource: SwapConfig}
-      servers: {get_param: blockstorage_servers}
-      input_values:
-        swap_partition_label: {get_param: swap_partition_label}
-      actions: ["CREATE"]
-
-  ObjectStorageSwapDeployment:
-    type: OS::Heat::SoftwareDeploymentGroup
-    properties:
-      config: {get_resource: SwapConfig}
-      servers: {get_param: objectstorage_servers}
-      input_values:
-        swap_partition_label: {get_param: swap_partition_label}
-      actions: ["CREATE"]
-
-  CephStorageSwapDeployment:
-    type: OS::Heat::SoftwareDeploymentGroup
-    properties:
-      config: {get_resource: SwapConfig}
-      servers: {get_param: cephstorage_servers}
-      input_values:
-        swap_partition_label: {get_param: swap_partition_label}
-      actions: ["CREATE"]
diff --git a/extraconfig/all_nodes/swap.j2.yaml b/extraconfig/all_nodes/swap.j2.yaml
new file mode 100644 (file)
index 0000000..9714908
--- /dev/null
@@ -0,0 +1,58 @@
+heat_template_version: 2014-10-16
+
+description: >
+  Extra config to add swap space to nodes.
+
+# Parameters passed from the parent template - note if you maintain
+# out-of-tree templates they may require additional parameters if the
+# in-tree templates add a new role.
+parameters:
+  servers:
+    type: json
+  swap_size_megabytes:
+    type: string
+    description: Amount of swap space to allocate in megabytes
+    default: '4096'
+  swap_path:
+    type: string
+    description: Full path to location of swap file
+    default: '/swap'
+
+
+resources:
+
+  SwapConfig:
+    type: OS::Heat::SoftwareConfig
+    properties:
+      group: script
+      config: |
+        #!/bin/bash
+        set -eux
+        if [ ! -f $swap_path ]; then
+          dd if=/dev/zero of=$swap_path count=$swap_size_megabytes bs=1M
+          chmod 0600 $swap_path
+          mkswap $swap_path
+          swapon $swap_path
+        else
+          echo "$swap_path already exists"
+        fi
+        echo "$swap_path swap swap defaults 0 0" >> /etc/fstab
+      inputs:
+        - name: swap_size_megabytes
+          description: Amount of swap space to allocate in megabytes
+          default: '4096'
+        - name: swap_path
+          description: Full path to location of swap file
+          default: '/swap'
+
+{% for role in roles %}
+  {{role.name}}SwapDeployment:
+    type: OS::Heat::SoftwareDeploymentGroup
+    properties:
+      config: {get_resource: SwapConfig}
+      servers: {get_param: servers, {{role.name}}}
+      input_values:
+        swap_size_megabytes: {get_param: swap_size_megabytes}
+        swap_path: {get_param: swap_path}
+      actions: ["CREATE"]
+{% endfor %}
diff --git a/extraconfig/all_nodes/swap.yaml b/extraconfig/all_nodes/swap.yaml
deleted file mode 100644 (file)
index 5383ffc..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-heat_template_version: 2014-10-16
-
-description: >
-  Extra config to add swap space to nodes.
-
-# Parameters passed from the parent template - note if you maintain
-# out-of-tree templates they may require additional parameters if the
-# in-tree templates add a new role.
-parameters:
-  controller_servers:
-    type: json
-  compute_servers:
-    type: json
-  blockstorage_servers:
-    type: json
-  objectstorage_servers:
-    type: json
-  cephstorage_servers:
-    type: json
-  swap_size_megabytes:
-    type: string
-    description: Amount of swap space to allocate in megabytes
-    default: '4096'
-  swap_path:
-    type: string
-    description: Full path to location of swap file
-    default: '/swap'
-
-
-resources:
-
-  SwapConfig:
-    type: OS::Heat::SoftwareConfig
-    properties:
-      group: script
-      config: |
-        #!/bin/bash
-        set -eux
-        if [ ! -f $swap_path ]; then
-          dd if=/dev/zero of=$swap_path count=$swap_size_megabytes bs=1M
-          chmod 0600 $swap_path
-          mkswap $swap_path
-          swapon $swap_path
-        else
-          echo "$swap_path already exists"
-        fi
-        echo "$swap_path swap swap defaults 0 0" >> /etc/fstab
-      inputs:
-        - name: swap_size_megabytes
-          description: Amount of swap space to allocate in megabytes
-          default: '4096'
-        - name: swap_path
-          description: Full path to location of swap file
-          default: '/swap'
-
-  ControllerSwapDeployment:
-    type: OS::Heat::SoftwareDeploymentGroup
-    properties:
-      config: {get_resource: SwapConfig}
-      servers: {get_param: controller_servers}
-      input_values:
-        swap_size_megabytes: {get_param: swap_size_megabytes}
-        swap_path: {get_param: swap_path}
-      actions: ["CREATE"]
-
-  ComputeSwapDeployment:
-    type: OS::Heat::SoftwareDeploymentGroup
-    properties:
-      config: {get_resource: SwapConfig}
-      servers: {get_param: compute_servers}
-      input_values:
-        swap_size_megabytes: {get_param: swap_size_megabytes}
-        swap_path: {get_param: swap_path}
-      actions: ["CREATE"]
-
-  BlockStorageSwapDeployment:
-    type: OS::Heat::SoftwareDeploymentGroup
-    properties:
-      config: {get_resource: SwapConfig}
-      servers: {get_param: blockstorage_servers}
-      input_values:
-        swap_size_megabytes: {get_param: swap_size_megabytes}
-        swap_path: {get_param: swap_path}
-      actions: ["CREATE"]
-
-  ObjectStorageSwapDeployment:
-    type: OS::Heat::SoftwareDeploymentGroup
-    properties:
-      config: {get_resource: SwapConfig}
-      servers: {get_param: objectstorage_servers}
-      input_values:
-        swap_size_megabytes: {get_param: swap_size_megabytes}
-        swap_path: {get_param: swap_path}
-      actions: ["CREATE"]
-
-  CephStorageSwapDeployment:
-    type: OS::Heat::SoftwareDeploymentGroup
-    properties:
-      config: {get_resource: SwapConfig}
-      servers: {get_param: cephstorage_servers}
-      input_values:
-        swap_size_megabytes: {get_param: swap_size_megabytes}
-        swap_path: {get_param: swap_path}
-      actions: ["CREATE"]
index 5c0d914..067f151 100644 (file)
@@ -442,17 +442,13 @@ resources:
     type: OS::TripleO::AllNodesExtraConfig
     depends_on:
       - UpdateWorkflow
-      - ComputeAllNodesValidationDeployment
-      - BlockStorageAllNodesValidationDeployment
-      - ObjectStorageAllNodesValidationDeployment
-      - CephStorageAllNodesValidationDeployment
-      - ControllerAllNodesValidationDeployment
+{% for role in roles %}
+      - {{role.name}}AllNodesValidationDeployment
+{% endfor %}
     properties:
-      controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
-      compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
-      blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
-      objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
-      cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
+{% for role in roles %}
+      servers: {get_attr: [{{role.name}}, attributes, nova_server_resource]}
+{% endfor %}
 
   # Post deployment steps for all roles
   AllNodesDeploySteps:
index aa5c3c4..5dea044 100644 (file)
@@ -4,15 +4,7 @@ description: Configure hieradata for all MidoNet nodes
 
 parameters:
   # Parameters passed from the parent template
-  controller_servers:
-    type: json
-  compute_servers:
-    type: json
-  blockstorage_servers:
-    type: json
-  objectstorage_servers:
-    type: json
-  cephstorage_servers:
+  servers:
     type: json
 
   EnableZookeeperOnController:
@@ -102,10 +94,10 @@ resources:
     type: OS::Heat::StructuredDeploymentGroup
     properties:
       config: {get_resource: NetworkMidoNetConfig}
-      servers: {get_param: controller_servers}
+      servers: {get_param: servers, Controller}
 
   NetworkMidonetDeploymentComputes:
     type: OS::Heat::StructuredDeploymentGroup
     properties:
       config: {get_resource: NetworkMidoNetConfig}
-      servers: {get_param: compute_servers}
+      servers: {get_param: servers, Compute}
index e924fc8..728c7cc 100644 (file)
@@ -4,15 +4,7 @@ description: Configure hieradata for Network Cisco configuration
 
 parameters:
   # Parameters passed from the parent template
-  controller_servers:
-    type: json
-  compute_servers:
-    type: json
-  blockstorage_servers:
-    type: json
-  objectstorage_servers:
-    type: json
-  cephstorage_servers:
+  servers:
     type: json
 
   # extra parameters passed via parameter_defaults
@@ -140,7 +132,7 @@ resources:
     properties:
       name: NetworkCiscoDeployment
       config: {get_resource: NetworkCiscoConfig}
-      servers:  {get_param: controller_servers}
+      servers:  {get_param: servers, Controller}
       input_values:
         UCSM_ip: {get_param: NetworkUCSMIp}
         UCSM_username: {get_param: NetworkUCSMUsername}
@@ -187,7 +179,7 @@ resources:
     type: OS::Heat::SoftwareDeployments
     properties:
       name: CollectMacDeploymentsController
-      servers:  {get_param: controller_servers}
+      servers:  {get_param: servers, Controller}
       config: {get_resource: CollectMacConfig}
       actions: ['CREATE'] # Only do this on CREATE
 
@@ -195,7 +187,7 @@ resources:
     type: OS::Heat::SoftwareDeployments
     properties:
       name: CollectMacDeploymentsCompute
-      servers:  {get_param: compute_servers}
+      servers:  {get_param: servers, Compute}
       config: {get_resource: CollectMacConfig}
       actions: ['CREATE'] # Only do this on CREATE
 
@@ -203,7 +195,7 @@ resources:
     type: OS::Heat::SoftwareDeployments
     properties:
       name: CollectMacDeploymentsBlockStorage
-      servers:  {get_param: blockstorage_servers}
+      servers:  {get_param: servers, BlockStorage}
       config: {get_resource: CollectMacConfig}
       actions: ['CREATE'] # Only do this on CREATE
 
@@ -211,7 +203,7 @@ resources:
     type: OS::Heat::SoftwareDeployments
     properties:
       name: CollectMacDeploymentsObjectStorage
-      servers:  {get_param: objectstorage_servers}
+      servers:  {get_param: servers, ObjectStorage}
       config: {get_resource: CollectMacConfig}
       actions: ['CREATE'] # Only do this on CREATE
 
@@ -219,7 +211,7 @@ resources:
     type: OS::Heat::SoftwareDeployments
     properties:
       name: CollectMacDeploymentsCephStorage
-      servers:  {get_param: cephstorage_servers}
+      servers:  {get_param: servers, CephStorage}
       config: {get_resource: CollectMacConfig}
       actions: ['CREATE'] # Only do this on CREATE
 
@@ -294,7 +286,7 @@ resources:
     type: OS::Heat::SoftwareDeployment
     properties:
       name: MappingToNexusDeploymentsController
-      server:  {get_param: [controller_servers, '0']}
+      server:  {get_param: [servers, Controller, '0']}
       config: {get_resource: MappingToNexusConfig}
       input_values:
         # FIXME(shardy): It'd be more convenient if we could join these
@@ -338,7 +330,7 @@ resources:
     depends_on: MappingToNexusDeploymentsController
     properties:
       name: MappingToUCSMDeploymentsController
-      server:  {get_param: [controller_servers, '0']}
+      server:  {get_param: [servers, Controller, '0']}
       config: {get_resource: MappingToUCSMConfig}
       input_values:
         ucsm_config: {get_param: NetworkUCSMHostList}