Hiera data is great for separating code and data.
Within hiera one can put different types of variables:
- text
- arrays
- hashes
Working with text and arrays is easy for most Puppet users.
Hashes still seem to have some kind of magic.
This post tries to show you an idea on how to work with hashes in hiera.
Assumption:
we want ssh host keys in hiera to get added to a system.
First we are building our hiera data:
host_key:
- server1:
alias: webserver
key: erupeurzbgpeurhgfpuerfgp
type: ssh-rsa
- server2:
alias: dbserver
key: oeurzhgopeurzgbperuzfg
type: ssh-dsa
- server3:
alias: proxy
key: 346508365384
type: ssh-rsa
One solution is to create a define and use the hash elements within an array.
The define would look like this:
define process_hostkeys () {
ssh_key { $name:
alias => $host_key[$name][alias],
key => $host_key[$name][key],
type => $host_key[$name][type],
}
So far so good. But... how do we get the elements from the hash?
Luckily puppet stdlib has the answer: there is a keys() function available.
The keys function extracts all keys from a hash and returns them as an array.
So in our case this will look like the following:
$host_array = keys($host_key)
And now we can use our define with this array variable:
process_hostkeys { $host_array: }
Due to the reason that we may use arrays in titles we are now happy.
hth.
No comments:
Post a Comment