44ef2a3ec1
The new master branch should point now to rocky. So, HOT templates should specify that they might contain features for rocky release [1] Also, this submission updates the yaml validation to use only latest heat_version alias. There are cases in which we will need to set the version for specific templates i.e. mixed versions, so there is added a variable to assign specific templates to specific heat_version aliases, avoiding the introductions of error by bulk replacing the the old version in new releases. [1]: https://docs.openstack.org/heat/latest/template_guide/hot_spec.html#rocky Change-Id: Ib17526d9cc453516d99d4659ee5fa51a5aa7fb4b
58 lines
1.9 KiB
YAML
58 lines
1.9 KiB
YAML
heat_template_version: rocky
|
|
|
|
description: Configure hieradata overrides for specific nodes
|
|
|
|
parameters:
|
|
server:
|
|
description: ID of the controller node to apply this config to
|
|
type: string
|
|
|
|
# Config specific parameters, to be provided via parameter_defaults
|
|
# This would be a lookup of the node UUID as provided by dmidecode
|
|
# to the json required for the node-specific hieradata
|
|
# Note this needs to be a json blob e.g:
|
|
# parameter_defaults:
|
|
# NodeDataLookup: |
|
|
# {"AB4114B1-9C9D-409A-BEFB-D88C151BF2C3": {"foo": "bar"},
|
|
# "8CF1A7EA-7B4B-4433-AC83-17675514B1B8": {"foo2": "bar2"}}
|
|
NodeDataLookup:
|
|
type: string
|
|
default: '{}'
|
|
description: json string containing per-node configuration map
|
|
|
|
resources:
|
|
NodeSpecificConfig:
|
|
type: OS::Heat::SoftwareConfig
|
|
properties:
|
|
group: script
|
|
inputs:
|
|
- name: node_lookup
|
|
config: |
|
|
#!/bin/sh
|
|
node_id=$(dmidecode --s system-uuid | awk 'match($0, /[0-9A-Fa-f]{8}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{4}-[0-9A-Fa-f]{12}/) { print substr($0, RSTART, RLENGTH) }')
|
|
|
|
# Create a /etc/puppet/hieradata/UUID.json file to provide
|
|
# the data of the NodeDataLookup parameter that matches the
|
|
# system UUID
|
|
echo $node_lookup | python -c "
|
|
import json
|
|
import sys
|
|
input = sys.stdin.readline() or '{}'
|
|
cnt = json.loads(input)
|
|
print json.dumps(cnt.get('${node_id}', {}))
|
|
" > /etc/puppet/hieradata/${node_id}.json
|
|
|
|
NodeSpecificDeployment:
|
|
type: OS::Heat::SoftwareDeployment
|
|
properties:
|
|
name: NodeSpecificDeployment
|
|
config: {get_resource: NodeSpecificConfig}
|
|
server: {get_param: server}
|
|
input_values:
|
|
node_lookup: {get_param: NodeDataLookup}
|
|
|
|
outputs:
|
|
deploy_stdout:
|
|
description: Deployment reference, used to trigger puppet apply on changes
|
|
value: {get_attr: [NodeSpecificDeployment, deploy_stdout]}
|