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.

Reply via email to