On 2018-11-06 17:13, Arnau wrote:
Hi all,
I'm using puppet 5.3.
I'd like to build proxy_pass array of hashes using the /reduce
/puppetbuilt-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:
Avoid having notify with a title containing [ ] - it can get very
confusing. Use a title like "testing", and set the message instead.
You give the reduce an array with a hash in it, and you then append to
that array with an array containing a hash. The result will be an
array where each element is a hash.
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:
You are asking Array to create an array out of a string. It will
construct that as an array where each element is a single character string.
You probably wanted
$var = Array($apache['static_served'])
Which by the way is a no-op since $apache['static_served'] already is an
array (as per the hiera data you supplied).
$_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:
You are now performing a reduce based on a sequence of single character
strings. This is indeed confusing as you have already gone off the road.
Hope this helps you get back on track.
- henrik
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
<mailto: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
<https://groups.google.com/d/msgid/puppet-users/CAM69jx-wKXmP%3DhfPLsMsrYDeOS7TCTQaQ9XyhUaoWJ9uq%3DeZEg%40mail.gmail.com?utm_medium=email&utm_source=footer>.
For more options, visit https://groups.google.com/d/optout.
--
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/msgid/puppet-users/prsov3%24lfp%241%40blaine.gmane.org.
For more options, visit https://groups.google.com/d/optout.