tripleo-puppet-elements/elements/hiera
Jiri Stransky 5d2d14f690 Preserve data types in Hiera where possible
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
2015-06-05 15:26:23 +02:00
..
install.d Symlink /etc/hiera.yaml -> /etc/puppet/hiera.yaml 2015-02-06 06:03:57 -05:00
os-apply-config/etc/puppet Add a Hiera element 2015-01-09 14:27:02 -05:00
os-refresh-config/configure.d Preserve data types in Hiera where possible 2015-06-05 15:26:23 +02:00
element-deps Add a Hiera element 2015-01-09 14:27:02 -05:00
README.md Add a Hiera element 2015-01-09 14:27:02 -05:00

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.