1733d74392
There are two reasons the name property should always be set for deployment resources: - The name often shows up in logs, files and API calls, the default derived name is long and unhelpful - Sorting by name determines the merge order of os-apply-config, and the execution order of puppet/shell scripts (note this is different to resource dependency order) so leaving the default name results in an undetermined order which could lead to unpredictable deployment of configs This change simply sets the name to the resource name, but a future change should prepend each name with a run-parts style 2 digit prefix so that the order is explicitly stated. Documentation for extraconfig needs to clearly state what prefix is needed to override which merge/execution order. For existing overcloud stacks, heat currently replaces deployment resources when the name changes, so this change Depends-On: I95037191915ccd32b2efb72203b146897a4edbc9 Change-Id: Ic4bcd56aa65b981275c3d4214588bfc4de63b3b0
123 lines
4.5 KiB
YAML
123 lines
4.5 KiB
YAML
heat_template_version: 2014-10-16
|
|
|
|
description: >
|
|
Example extra config for cluster config
|
|
this example collects the hostname and MAC addresses for each node in
|
|
the deployment, then distributes that info to all Controller 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
|
|
# Note extra parameters can be defined, then passed data via the
|
|
# environment parameter_defaults, without modifying the parent template
|
|
|
|
resources:
|
|
|
|
CollectMacConfig:
|
|
type: OS::Heat::SoftwareConfig
|
|
properties:
|
|
group: script
|
|
config: |
|
|
#!/bin/sh
|
|
MACS=$(ifconfig | grep ether | awk '{print $2}' | tr "\n" " ")
|
|
HOSTNAME=$(hostname -s)
|
|
echo "$HOSTNAME $MACS"
|
|
|
|
# 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:
|
|
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}
|
|
config: {get_resource: CollectMacConfig}
|
|
actions: ['CREATE'] # Only do this on CREATE
|
|
|
|
# Now we distribute all-the-macs to all nodes
|
|
DistributeMacConfig:
|
|
type: OS::Heat::SoftwareConfig
|
|
properties:
|
|
group: script
|
|
inputs:
|
|
- name: controller_mappings
|
|
- name: compute_mappings
|
|
- name: blockstorage_mappings
|
|
- name: objectstorage_mappings
|
|
- name: cephstorage_mappings
|
|
config: |
|
|
#!/bin/sh
|
|
echo $controller_mappings > /root/controller_mappings
|
|
echo $compute_mappings > /root/compute_mappings
|
|
echo $blockstorage_mappings > /root/blockstorage_mappings
|
|
echo $objectstorage_mappings > /root/objectstorage_mappings
|
|
echo $cephstorage_mappings > /root/cephstorage_mappings
|
|
echo "mappings = $(cat /root/*_mappings)"
|
|
|
|
DistributeMacDeploymentsController:
|
|
type: OS::Heat::SoftwareDeployments
|
|
properties:
|
|
name: DistributeMacDeploymentsController
|
|
servers: {get_param: controller_servers}
|
|
config: {get_resource: DistributeMacConfig}
|
|
input_values:
|
|
# FIXME(shardy): It'd be more convenient if we could join these
|
|
# items together but because the returned format is a map (not a list)
|
|
# we can't use list_join or str_replace. Possible Heat TODO.
|
|
controller_mappings: {get_attr: [CollectMacDeploymentsController, deploy_stdouts]}
|
|
compute_mappings: {get_attr: [CollectMacDeploymentsCompute, deploy_stdouts]}
|
|
blockstorage_mappings: {get_attr: [CollectMacDeploymentsBlockStorage, deploy_stdouts]}
|
|
objectstorage_mappings: {get_attr: [CollectMacDeploymentsObjectStorage, deploy_stdouts]}
|
|
cephstorage_mappings: {get_attr: [CollectMacDeploymentsCephStorage, deploy_stdouts]}
|
|
actions: ['CREATE'] # Only do this on CREATE
|
|
|
|
outputs:
|
|
# This value should change if the configuration data has changed
|
|
# It is used to e.g re-apply puppet after hieradata values change.
|
|
config_identifier:
|
|
value: {get_attr: [DistributeMacDeploymentsController, deploy_stdouts]}
|
|
|