Le 19/09/2018 à 16:00:20+0200, Henrik Lindberg a écrit
> On 2018-09-19 15:24, Albert Shih wrote:
> >
> > I'm would like to have a profile for example for apache.
> >
> >    profile::apache
> >
> > who can pass some hash to apache. For example let's say I've
> >
> >    profile::apache::vhosts:
> >      vhost1:
> >      ....
> >      vhost2:
> >      ....
> >
> > and I want to do
> >
> > class profile::apache (
> >    Hash $vhosts
> >    )
> > {
> >
> >    create_resources('apache::vhost', $vhosts)
> >
> > }
> >
> > But now I want to add some parameter who's not in the apache::vhost, for
> > example :
> >
> >    profile::apache::vhosts:
> >      vhost1:
> >        - monitored : true
> >        ....
> >      vhost2:
> >        - monitored : false
> >        ....
> >
> > so before I can do the
> >
> >    create_resources('apache::vhost', $something)
> >
> > i need to exclude « monitored » from that hash table. And...I don't know
> > how to do that. I try map, reduce etc.. and was unable to exclude some
> > nested key/value from a hash.
> >
> > Regards
>
>
> Puppet has a function named tree_each() that can be used to flatten and
> filter a tree structure of data. Once filtered it is possible to again
> create a Hash out of the result.
>
> Documentation here:
> https://puppet.com/docs/puppet/5.5/function.html#treeeach
>
> Here are two examples (both from the documentation; the first from
> tree_each(), and the second from Hash.new().

THANKS.....I would check on that.

>
> The first example shows the flattened filtered value.
> To get the pruned hash in that example, do what is done in
> Example 2 at the end - i.e. Hash($flattened_pruned_value, 'hash_tree').
>
> It is really difficult to achieve the same with just reduce() and
> filter() functions - you would have to more or less implement

I concur  ;-)

> the tree_each() function - but you don't have to since puppet has it :-)
>
> Hope this helps you with what you were trying to do.
>
> Also - note that it may be better for you (instead of filtering your values
> and then give the resulting structure to create_reources()), to
> iterate over the structure and the simply have conditional logic
> around the declaration of resources. That is much less magic to read.

I know that, and generaly that's would be my solution, but the point is
apache::vhost got a *lot* of attributes......and it's very boring to add
all attributes or change my module each time I need a new attributes from
apache::vhost.

>
> Best
> - henrik
>
> Encourage you to play with these examples:
>
> #### EXAMPLE 1
> # A tree of some complexity (here very simple for readability)
> $tree = [
>  { name => 'user1', status => 'inactive', id => '10'},
>  { name => 'user2', status => 'active', id => '20'}
> ]
> notice $tree.tree_each.filter |$v| {
>  $value = $v[1]
>  $value =~ Hash and $value[status] == active
> }
>
>
> #### EXAMPLE 2
> ####
> # A hash tree with 'water' at different locations
> $h = { a => { b => { x => 'water'}}, b => { y => 'water'} }
>
> # a helper function that turns water into wine
> function make_wine($x) { if $x == 'water' { 'wine' } else { $x } }
>
> # create a flattened tree with water turned into wine
> $flat_tree = $h.tree_each.map |$entry| { [$entry[0], make_wine($entry[1])] }
>
> # create a new Hash and log it
> notice Hash($flat_tree, 'hash_tree')

Nice !!!.

Regards.

--
Albert SHIH
DIO bâtiment 15
Observatoire de Paris
xmpp: [email protected]
Heure local/Local time:
Thu Sep 20 10:12:55 CEST 2018

-- 
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/20180920081707.GB9766%40io.chezmoi.fr.
For more options, visit https://groups.google.com/d/optout.

Reply via email to