Quantcast
Channel: Ask Puppet: Puppet DevOps Q&A Community - RSS feed
Viewing all articles
Browse latest Browse all 257

Hiera.conf 5 mapped_paths based on a Array fact from split string

$
0
0
Hi, I'm trying to setup a generic hierarchy based on Hiera 5 under the following assumptions: * a fact `roles` holds a comma-separated list of roles to use in hiera. Example: `[ 'role1', 'role2' ].join(',')` aka `"role1,role2"` * this `roles` fact is passed to `puppet apply` using the `FACTER_roles` environment variable (which explain why the array is not passed directly). I'm trying now to setup the `:hierarchy`section of `hiera.conf` to handle properly `facts.roles` as an array to iterate on it using [`mapped_paths`](https://docs.puppet.com/puppet/latest/hiera_config_yaml_5.html#the-hierarchy-key). Ideally, I would like to express this iteration as follows:
#  hiera.conf
---
version: 5      # below version 5 are deprecated starting puppet 4.9

### default datadir and backend for hierarchy levels.
defaults:  # Used for any hierarchy level that omits these keys.
  datadir: hieradata    # This path is relative to hiera.yaml's directory.
  data_hash: yaml_data  # Use the built-in YAML backend.
hierarchy:
  #______________________
  - name: "Per-node data"
    path: "nodes/%{trusted.certname}.yaml"
  - name: "Role Specific data"
    mapped_paths: [ "%{split(facts.roles, ',')}", role, "role/%{role}.yaml" ]
  - name: "Common data"
    path: "common.yaml"
Assuming the above setup, I'm expecting to see hiera "loading" the following hiera files: * `hieradata/role/role1.yaml` * `hieradata/role/role2.yaml` * `hieradata/common.yaml` However it does not work: I end with a strange message ``` ==> master: Error: Evaluation Error: Error while evaluating a Function Call, Lookup of key 'noop_mode' failed: Syntax error in string: mapped_path[0] at /tmp/vagrant-puppet/manifests-a11d1078b1b1f2e3bdea27312f6ba513/default.pp:33:14 on node puppet-master.vagrant.dev ``` I don't see the proper way to define a call to the `split` function **within** `hiera.yaml`. Can anyone help me ? ## Appendix: `mapped_paths` > The mapped_paths key must contain three string elements, in the following order:> A scope variable that points to a collection of strings.> The variable name that will be mapped to each element of the collection.> A template where that variable can be used in interpolation expressions.> For example, a fact named $services contains the array `[“a”, “b”, “c”]`. Then this configuration: >> `mapped_paths: [services, tmp, "service/%{tmp}/common.yaml"]`>> has the same results as if paths had been specified to be `[service/a/common.yaml, service/b/common.yaml, service/c/common.yaml]`.

Viewing all articles
Browse latest Browse all 257

Trending Articles