heat_template_version: rocky 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: 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. {% for role in roles %} CollectMacDeployments{{role.name}}: type: OS::Heat::SoftwareDeployments properties: name: CollectMacDeploymentsController 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 Controller 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: [servers, Controller]} 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