Hi all, I'm using puppet 5.3.
I'd like to build proxy_pass array of hashes using the *reduce *puppet built-in function <https://puppet.com/docs/puppet/5.5/function.html#reduce>and picking the values from a nested hash in hiera. I first played a little bit with the reduce function: $dirs = ['static','media','photos'] $proxy = $dirs.reduce([ { 'path' => '/', 'url' => "http://localhost: ${port}/" } ]) |$memo, $value| { $memo + [ { 'path' => "/$value/", 'url' => '!' } ] } notify { "MemoOut: $proxy" : ;} If I puppet apply the above code the output looks like: Notice: MemoOut: [{path => /, url => http://localhost:189/}, {path => /static/, url => !}, {path => /media/, url => !}, {path => /photos/, url => !}] Notice: /Stage[main]/Main/Node[default]/Notify[MemoOut: [{path => /, url => http://localhost:189/}, {path => /static/, url => !}, {path => /media/, url => !}, {path => /photos/, url => !}]]/message: defined 'message' as 'MemoOut: [{path => /, url => http://localhost:189/}, {path => /static/, url => !}, {path => /media/, url => !}, {path => /photos/, url => !}]' *To my eyes this is an array of hashes, and that's what I need to pass to the apache vhost define.* So, now I want to pick the array (list of directories) from a nested hash in hiera that look like: application: apache: enable: true servername: application static_served: - static I have a define that picks the above hash.... The array with the list of directories becomes "${apache['static_served']}" inside teh define. I can print it using notice ${apache['static_served']}": Notice: static_served: application [static] This looks like an array but *is_array *says that this is *not *an array anymore. And this is my first question, why it is not an array anymore? I make this an array using any2array (array un puppet 5) so I can still call the reduce function:: $var=(Array("${apache['static_served']}")) so the *reduce *line now looks like: $_proxy_pass = $var.reduce([ { 'path' => '/', 'url' => "http://localhost: ${port}/" } ]) |$memo, $value| { $memo + [ { 'path' => "/$value/", 'url' => '!' } ] } And here is where everythiong starts to make even less sense: If I print the output (using notice $_proxy_pass and ) and I get a weird output: Notice: /Stage[main]/.../Python::Virtualenv[application]/Notify[PROXY_PASS: [{path => /, url => http://local host:11080/}, {path => /[/, url => !}, {path => /s/, url => !}, {path => /t/, url => !}, {path => /a/, url => !}, {path => /t/, url => !}, {path => /i/, url => !}, {path => /c/, url => !}, {path => /]/, url => !}]]/message: defined 'message' as 'PROXY_PASS: [{path => /, url => http://localhost:11080/}, {path => /[/, url => ! }, {path => /s/, url => !}, {path => /t/, url => !}, {path => /a/, url => !}, {path => /t/, url => !}, {path => /i/, url => !}, {path => /c/, url => !}, {path => / ]/, url => !}]' reduce is taking all letters from "static" instead of 'static" as the first (an uniqe) element from the array.... Later, in my code, I configure the proxy_pass in the apache:vhost like: apache::vhost { "${apache['servername']}": [...] proxy_pass => "$_proxy_pass", [...] But, in the apache file, the proxy pass parameters looks like ProxyPass path url ProxyPassReverse path url ProxyPass path url ProxyPassReverse path url [...] So it's picking the keys from the hashes in the above array of hashes and not the values. I don't understand what is going on. Any help will be appreciated. Best, Arnau -- 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/CAM69jx-wKXmP%3DhfPLsMsrYDeOS7TCTQaQ9XyhUaoWJ9uq%3DeZEg%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.