Hiya Ansible - I have some repetitive tasks I'd like to perform, but am
struggling to figure out how exactly to get ansible to execute them. I
figure my use cases should be pretty common, so I'm hoping to hear how
others might have solved this.
First off, I have to create multiple users on multiple hosts. I have a
role that I already use for managing users (basically a wrapper around
user{add,mod,del}. The role's main.yml simply decides which other task
file to include based on a 'cmd' parameter, so performing a "user add" is
as simple as passing "-e cmd=useradd" at the CLI (Would have been nice to
be able to use tags for that, but...).
So, now that I have multiple users, I'd like to do something like:
- include: add.yml
- with_dict: userlist
Where 'userlist' is something like:
userlist:
- name: alice
home: default
shell: /bin/bash
- name: bob
shell: /bin/nologin
Except that looping over an include is specifically deprecated as of my
version (1.9.1). I figure that must have been done for a good reason, so
what is the canonical approach in ansible for my use case? Or should I
just accept that ansible can't do this, and do the looping in the shell?
Second issue is somewhat related, in that it involves looping and wondering
about a canonical approach...
I have an app that uses ini-style files. The app is clustered, and so
different machines take on different roles based on their config. The
approach I've taken is to have a common role, and then specialist roles
which depend upon common. The common role does things like create the
service user, install from archive, and lay down basic configs. Or, at
least I'd like it to lay down configs...
There's the 'ini_file' module which would be perfect for this... except
there doesn't seem to be a loop operation which exposes the data properly.
First, the data structure:
confs:
- file: /path/to/configA
stanza: blockA
values:
- val1: true
- val2: false
- val3: etc
- file: /path/to/configB
...
Now, if I use 'with_subelement' to loop over this structure thusly:
- debug: "File {{ item.0.file }} should contain {{ item.1.key }} with
value {{ item.1.value }}
with_subelements: confs
It actually has the audacity to error with the message:
One or more undefined variables: 'dict object' has no attribute 'key'
Um... how is it a dict object yet has no key? But more importantly, how
exactly do I loop over data for use with the "ini_file" module? The loop
needs to expose at least four pieces of data: a destination file, a config
header, a config key, and a config value. Does ansible support that in any
way? Or is ansible a tool for people who like to type and repeat
themselves?
--
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/7031133e-4f68-4f21-b2d2-4ff12b38ee38%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.