Convert AllNodesExtraConfig to support composable roles

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
This commit is contained in:
Steven Hardy 2016-09-08 12:14:09 +01:00 committed by Emilien Macchi
parent 3a8d20a63d
commit b738e9ca78
9 changed files with 130 additions and 284 deletions

View 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}
servers: {get_param: servers, {{role.name}}}
config: {get_resource: CollectMacConfig}
actions: ['CREATE'] # Only do this on CREATE
{% endfor %}
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}
config: {get_resource: CollectMacConfig}
actions: ['CREATE'] # Only do this on CREATE
# 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

View 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:

View File

@ -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 %}

View File

@ -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"]

View File

@ -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 %}

View File

@ -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"]

View 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:

View 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}

View 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}