5d2d14f690
We didn't preserve the data types from Heat metadata when writing hiera files. We treated the metadata as raw YAML, unless it was multiline, in which case we wrapped it in quotes. This commit fixes those things as much as possible: * Proper JSON escaping is preserved for multi-line strings. * Other data types such as arrays and hashes are properly passed into hiera, regardless if their string representation would be single-line or multi-line. However, single-line strings are still treated as raw YAML, because tripleo-heat-templates already depend on that behavior (instead of having arrays in Heat metadata, we have strings there formatted as arrays). Change-Id: Ie984f3c7782687235cdc2d72ef1f94af89dc3ed4 Closes-Bug: #1462369 |
||
---|---|---|
.. | ||
install.d | ||
os-apply-config/etc/puppet | ||
os-refresh-config/configure.d | ||
element-deps | ||
README.md |
Configure Hiera for use w/ Puppet and Heat metadata.
Configuration
hiera:
hierarchy: []
- The order to load datafiles. This is configured in hiera.yaml.
datafiles: {}
Data files is a hash of filename -> {data/mappings} to inject
into each named hiera datafile. There are three types:
raw_data: contains static raw data to inject directly into this hiera
datafile. Can be an inline string or imported via get_file in a
Heat template.
mapped_data: Name value pairs that will be injected into the
hiera data file. Hiera name on the left, Hiera value on the right.
oac_data: A hash of puppet -> OAC (os-apply-config) named key value
pairs. Arbitrary os-apply-config data can be mapped to Hiera keys
using this data. Hiera name on the left. The Hiera value is generated
at os-refresh-config time via os-apply-config lookup of the value.
Example:
HieraConfig:
type: OS::Heat::StructuredConfig
properties:
group: os-apply-config
config:
hiera:
hierarchy:
- heat_config_%{::deploy_config_name}
- controller
- common
datafiles:
controller:
raw_data: {get_file: puppet/hieradata/controller.yaml}
oac_data:
bootstrap_nodeid: bootstrap_host.bootstrap_nodeid
common:
data: {get_file: puppet/hieradata/common.yaml}
HieraDeployment:
type: OS::Heat::StructuredDeployment
properties:
server: {get_resource: MyServer}
config: {get_resource: HieraConfig}
signal_transport: NO_SIGNAL
In this example the 'hierarchy' config section controls the ordering of the hiera files within hiera.yaml. The 'datafiles' config section controls the actual hiera data files which gets injected into the node.
NOTE: This example makes use of a special heat_config_%{::deploy_config_name} heira datafile which gets generated via the heat-config-puppet element when enable_hiera is set to True. Since this file is injected automatically we don't specify it in 'datafiles' but we do have it listed in the 'hierarchy'. A FACTER_ variable is used to provide access to the ::deploy_config_name variable which is automatically set via the heat-config-puppet element when puppet apply is executed.