With a bit more of debuging I figured out that my code was wrong.
what I really need is:
$extra_proxy_pass = $options.reduce([$base_proxy_pass])|$memo, $value| {
$memo << { 'path' => "${value[0]}", 'url' => '!' }
}
in my previous code I was passing Strings instead of Hashes.
Now I'm calling redcue twice and got it working .
Best
On Monday, April 15, 2024 at 5:17:59 PM UTC+2 Arnau wrote:
> Dear all,
>
> I'm working on a custom puppet (7.28) module to deploy python applciations
> like django, streamlint, etc... A part from the python part, the module
> also deploys an apache vhost (using puppet apache module from the forge).
>
> I have some default options for apache vhost but I like to extend those
> defaults with custom options based on some data that I get from hiera
> (mainly, some excpetions to the proxy and adding some directories so apache
> serves the static files).
> As an example, one of my apps look like this in hiera:
>
> python_apps:
> biostars:
> type: uwsgi
> apache:
> enable: true
> servername: forum
> app_protocol: https
> extra_proxy_pass:
> static: 'export/static'
> images: 'export/images'
>
> the relevant part here is the extra_proxy_pass. What I'd like to achieve
> is create something like
>
> proxy_pass => { 'path' => 'static', 'url' => '!' }
> directories => [ 'path' => "${path}/${name}/static", 'Allow ' = > => '
> from all', 'Options' => 'Indexes'}]
>
> proxy_pass => { 'path' => 'images', 'url' => '!' }
> directories => [ 'path' => "${path}/${name}/images", 'Allow ' = > => '
> from all', 'Options' => 'Indexes'}]
>
> To later on pass it to my vhost definition.
>
> So, as for my understaning, I could use reduce
> <https://www.puppet.com/docs/puppet/7/function.html#reduce>to achieve
> that.But it's not clear to me how to use memo to append thos extar
> proxy_pass or directories to it in a reusable format.
>
> My code, so far, looks like this:
>
> $base_proxy_pass =
> { 'path' => '/',
> 'url' => "${apache[app_protocol]}://127.0.0.1:${port}/"
> }
> if $apache.has_key(extra_proxy_pass) {
> $options = $apache[extra_proxy_pass]
> $extra_proxy_pass = $options.reduce([{proxy_pass => $base_proxy_pass}])|
> $memo, $value| {
> $memo << "proxy_pass => { 'path' => ${value[0]}, 'url' => '!' }"
> # directories => {
> # 'path' => "${path}/${name}/${value},
> # 'Allow' => 'from all',
> # 'Options' => 'Indexes',
> # }
>
> }
> }
> notify {"EXTRA_MEMORY_PATH: $extra_proxy_pass":;}
>
> This produces proxy_pass as I need it:
>
> Notice: EXTRA_MEMORY_PATH: [{proxy_pass => {path => /, url => https://
> 127.0.0.1:8000/} <http://127.0.0.1:8000/%7D>}, proxy_pass => { 'path' =>
> static, 'url' => '!' }, proxy_pass => { 'path' => images, 'url' => '!' }]
>
> But now I am not sure if I can use memo for building the directories array
> of hashes in the same piece of code. Reading reduce docs seems like memo
> can be used to store differnt values:
>
> $data = {a => 1, b => 2, c => 3}
> $combine = $data.reduce |$memo, $value| {
> $string = "${memo[0]}${value[0]}"
> $number = $memo[1] + $value[1]
> [$string, $number]
> }
> # $combine contains [abc, 6]
>
> but I've tried several options and none did work.
>
> Also, is ther a way to reuse memo for the directories? or should I split
> my code in two calls to reduce, one for building the extra_proxy array and
> another call for the directories?
>
> Maybe I using a wrong approach and there is a simplest way to achieve what
> I'm trying to do. I'm open to suggestions.
>
>
> Thanks in advance,
>
>
--
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/c0ddd7ca-e06a-417c-be21-8ae343a264ffn%40googlegroups.com.