On 09/05/18 13:36, Arnau wrote:
> Hi all,
>
> I have a hash of hashes in hiera:
>
> cb_data_sync:
> localdata:
> peers: peer1 peer2
> source: /data/1
> target: /data/2
> ssh_key:
> key: XYZ
> type: ssh-rsa
> user: root
>
> Then, in a main class, I call a define using the above data:
>
> class cb_sync(
> Hash $cb_sync = lookup(cb_data_sync),
The lookup here has no effect - it will use APL to do exactly what the
default expression is doing - thus, it will never be called.
(Not the source of your problem, but you can remove that call).
> ) {
>
> $cb_sync.each |$name, $data| {
Variable $name will shadow the meta parameter $name in the outer scope.
better to use a different variable name here. However, doubt this will
cause the problem.
> cb_sync::rsync{ $name:
> data_sync => $data,
> }
> }
>
> }
>
> so far, so good.
>
> cb_sync::rsync is a define and there I'd like to create a
> ssh_authorized_key from the ssh_key nested hash.
>
> So, my code looks like:
>
> define cb_sync::rsync (
> Hash $data_sync = undef,
> ) {
>
> ssh_authorized_key {
> "${name}-ssh_key":
> * => "${data_sync['ssh_key']}",
You are expecting 'ssh_key' to be a key. Your hiera data shows there is
a "localdata" key under which there is a hash with that key.
So, you end up with an empty hash.
Also, you are using interpolation to interpolate a hash as a string.
That is not right. You probably want this:
* => $data_sync['localdata']['ssh_key']
> }
> But puppet complains cause it says that it gets a string but expects a
> Hash.
Well, you interpolated a hash into a string...
> If I "notify" data_sync['ssh_key'] I get:
>
> Notice: {key => XYZ, type => ssh-rsa, user => root}
ok, then maybe your hieradata above is not exactly what you are using?
If that key worked, change what I said you should use above and drop
the 'lokaldata' part.
>
> (which looks like a hash to me,am I wrong?).
A hash in string form (printed) looks very much like a hash in source
code form, but a Hash it was not.
- henrik
--
Visit my Blog "Puppet on the Edge"
http://puppet-on-the-edge.blogspot.se/