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 <[email protected]>:

> 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 [email protected].
> 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 [email protected].
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