another alternative if you don't want to use an external plugin is to 
predefine your variable names and then combine them..

ie...

> users_global
>
users_group 

users_host (variable you set in host_vars)


and then use the "combine 
<https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#combining-hashes-dictionaries>"
 
filter to combine them together . 
ie..

> users_global | combine(users_group, recursive=True) | combine(users_host, 
> recursive=True)



I agree though, I am also coming from puppet and miss hiera.   I may still 
consider going back to using it as there appears to be support 
<https://docs.ansible.com/ansible/latest/plugins/lookup/hiera.html> for it, 
but it would be nice to be fully integrated

The strategy I ended up going with for the similar problem you have is
1. I created a "users" hash in vars/ which contains all users that can be 
managed
2. then in my host & group_vars I populate a list such as 
"linux_users_global" or linux_users_unique_name which contains the list of 
users that should be managed either globally, group or at the host level
3. then in my playbook I merge all the variables that match the pattern 
"linux_users.*" . (see this link 
<https://docs.ansible.com/ansible/devel/plugins/lookup/varnames.html>)
4. then I loop through that merged list and manage those users

for me, the above solution works quite well.


On Thursday, March 21, 2019 at 12:07:09 PM UTC-7, Suhail Choudhury wrote:
>
> Hi. 
>
> Thanks for reply Kai. 
>
> Default Ansible cannot solve this problem, which I find very odd as it 
> was a common issue that is very elegantly addressed in Pupept using 
> Hiera. 
>
> However.... a solution has been found! 
>
> Have a look at: 
>
>
> http://leapfrogonline.io/articles/2017-02-22-explicit-merging-of-ansible-variables/
>  
> https://github.com/leapfrogonline/ansible-merge-vars 
>
> They have solved exactly this issue and I'm testing their plugin and 
> so far so good. Certainly not as elegant as Puppet/Hiera but it's a 
> working solution. 
>
> Regards, 
> Suhail. 
>
> On Thu, 21 Mar 2019 at 18:49, Kai Stian Olstad 
> <ansible-pr...@olstad.com <javascript:>> wrote: 
> > 
> > On 21.03.2019 12:58, Suhail Choudhury wrote: 
> > > Thanks for your earlier reply Adam. 
> > > 
> > > So how can I combine variables for a list of "users" defined like so: 
> > > 
> > > *group_vars/all* 
> > > 
> > > users: 
> > >    - name: alice 
> > >      comment: Alice 
> > > 
> > > *group_vars/group1* 
> > > 
> > > users: 
> > >    - name: bob 
> > >      comment: Bob 
> > > 
> > > *host_vars/host1* 
> > > 
> > > users: 
> > >    - name: charlie 
> > >      comment: Charlie 
> > > 
> > > How can all these variables be combined using "loop" or "with_items"? 
> > 
> > You can't, they will be overwritten in the order listed here 
> > 
> https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable
>  
> > 
> > > What if there are duplicates? 
> > 
> > They are duplicates since all are call users and will be overwritten. 
> > 
> > 
> > > Can the "host_vars/host1" variables override and take precedence over 
> the 
> > > "group_vars/all" variables? 
> > 
> > It does. 
> > 
> > 
> > -- 
> > Kai Stian Olstad 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups "Ansible Project" group. 
> > To unsubscribe from this group and stop receiving emails from it, send 
> an email to ansible-proje...@googlegroups.com <javascript:>. 
> > To post to this group, send email to ansible...@googlegroups.com 
> <javascript:>. 
> > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/ansible-project/86213972-a12c-474a-0284-747eaa825cdd%40olstad.com.
>  
>
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/b03d7f87-aef1-4d96-a1cd-77285441af13%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to