Hi Henrik,

thanks for your answer.

The answer is:

* => $data_sync['ssh_key']

Without interpolation the resource is created as it's areal hash... (you
can't imagine how much time I spent in this one.... Fun fact: the notify is
correct)


* The localdata key does not exists in the define as it's the main key of
the hash passed from the main class.

Thanks a lot for your answer.

Best,
Arnau

2018-05-09 14:09 GMT+02:00 Henrik Lindberg <henrik.lindb...@puppet.com>:

> 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/
>
> --
> You received this message because you are subscribed to the Google Groups
> "Puppet Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to puppet-users+unsubscr...@googlegroups.com.
> To view this discussion on the web visit https://groups.google.com/d/ms
> gid/puppet-users/pcuoa2%249ml%241%40blaine.gmane.org.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Puppet Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to puppet-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/puppet-users/CAM69jx82RtmrYD%2Btd%2BeV5x2YFspNKjU2qDQnJceTZ2htXsOHRA%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to