
This issue was spotted during major upgrade where we had calls like this: servers: {get_param: servers, Controller} These get_param calls are hanging indefinitely and make the whole upgrade end in a timeout. We need to put brackets around the get_param function when there are multiple arguments: http://docs.openstack.org/developer/heat/template_guide/hot_spec.html#get-param This is already done in most of the tree, and the few places where this was not happening were parts not under CI. After this change the following grep returns only one false positive: grep -ir get_param: |grep -v -- '\[' |grep ',' Change-Id: I65b23bb44f37b93e017dd15a5212939ffac76614 Closes-Bug: #1626628
78 lines
3.1 KiB
YAML
78 lines
3.1 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:
|
|
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
|