Hey Steve,
Ha, totally obvious now what the issue is. This is exactly what I needed,
thanks for the help and great explanation!
Cheers,
-Dan
> On Feb 9, 2019, at 10:41 AM, Stephen Marlow <[email protected]>
> wrote:
>
> Hey Dan,
>
> In each iteration of the reduce function the memo value is replaced by the
> result value of the block. The final return value of reduce is the result of
> the last iteration of the block. The result of the block is the value of the
> last statement executed. Your block has two possible results:
> 1) $result + $group when the condition is met
> 2) Undef otherwise (which I think might be the result of the if statement)
>
> Since user1 doesn't match the condition in the last iteration the result of
> the reduce is Undef.
>
> To correct this you could add an else clause that just returns $result, e.g.
>
> $usergroups = $hostgroups.reduce([]) |$result, $group| {
> $members = $groups[$group]["members"]
> warning("[$username] $group: $members")
> if ( $username in $members ) {
> warning("[$username] Added $group")
> $result + $group
> } else {
> $result
> }
> }
>
> Hope this helps.
> - Steve
>
>
>> On Sat, Feb 9, 2019 at 12:52 PM Daniel Kinon <[email protected]> wrote:
>> Hello,
>> I'm attempting to use the reduce
>> function(https://puppet.com/docs/puppet/6.2/function.html#reduce) to
>> consolidate hiera facts into data structures I can use with puppet
>> resources. I've run into an issue that I'm not sure how to solve. When the
>> data passed to the reduce function results in 2 or more iterations, I get
>> the data return I expect. When the data passed only results in 1
>> iterations, I get back no results when I expect one result. Here is the
>> applicable code snippet (hiera lookups replaced with dummy data):
>> ~~~
>> $groups = {
>> "group1" => {
>> "gid" => 901,
>> "members" => ["user1","user2","user3","user4"],
>> },
>> "group2" => {
>> "gid" => 902,
>> "members" => ["user2"],
>> }
>> }
>> $hostgroups = [ "group1", "group2" ]
>> $usernames = ["user1","user2"]
>>
>> $usernames.each |$username| {
>> $usergroups = $hostgroups.reduce([]) |$result, $group| {
>> $members = $groups[$group]["members"]
>> warning("[$username] $group: $members")
>> if ( $username in $members ) {
>> warning("[$username] Added $group")
>> $result + $group
>> }
>> }
>> warning("[$username] groups: $usergroups")
>> warning()
>> }
>> ~~~
>>
>> The output of this code shows user1 with an empty array of groups when it
>> should have group1 while user2 has the expected 2 group output:
>> ~~~
>> Warning: Scope(Class[Base::Test]): [user1] group1: [user1, user2, user3,
>> user4]
>> Warning: Scope(Class[Base::Test]): [user1] Added group1
>> Warning: Scope(Class[Base::Test]): [user1] group2: [user2]
>> Warning: Scope(Class[Base::Test]): [user1] groups:
>> Warning: Scope(Class[Base::Test]):
>> Warning: Scope(Class[Base::Test]): [user2] group1: [user1, user2, user3,
>> user4]
>> Warning: Scope(Class[Base::Test]): [user2] Added group1
>> Warning: Scope(Class[Base::Test]): [user2] group2: [user2]
>> Warning: Scope(Class[Base::Test]): [user2] Added group2
>> Warning: Scope(Class[Base::Test]): [user2] groups: [group1, group2]
>> Warning: Scope(Class[Base::Test]):
>> ~~~
>>
>> Let me know if I'm missing something otherwise this seems like it might be a
>> bug.
>> Thanks,
>> -Dan
>> --
>> 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/bc076bfc-86b2-40c9-a07e-05a632909048%40googlegroups.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 [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/puppet-users/CALGSqjJ4yEJkY__0%2Bm4b6kugbhOq2kV%2Ba3jYMgueWec4ikx_mA%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 [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/puppet-users/06EDD94E-68C0-4CD5-BEF2-C5DE6EE724E5%40gmail.com.
For more options, visit https://groups.google.com/d/optout.