Arnau
2018-11-06 16:13:54 UTC
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
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+***@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.
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+***@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.