*This is an Ansible question *
Here is my list:
userdata.list:
- ClassType: Full Time
FirstName: Grace
LastName: Higgins
Username: g.higgins
- ClassType: Part Time
FirstName: Robert
LastName: Miller
Username: robmil
- ClassType: Flexi
FirstName: Jeffrey
LastName: Keller
Username: jeff.k
I want to append the following values to the existing list, looping for each user:
EmailAddress: {{ Username }} append to '@gmail.com'
OtherAddresses: primary:{{ Username }}@gmail.com,secondary:{{ Username }}@outlook.com
Registered: Yes
Expected output:
userdata.list:
- ClassType: Full Time
FirstName: Grace
LastName: Higgins
Username: g.higgins
EmailAddress: [email protected]
OtherAddresses: primary:[email protected],secondary:[email protected]
Registered: Yes
- ClassType: Part Time
FirstName: Robert
LastName: Miller
Username: robmil
EmailAddress: [email protected]
OtherAddresses: primary:[email protected],secondary:[email protected]
Registered: Yes
- ClassType: Flexi
FirstName: Jeffrey
LastName: Keller
Username: jeff.k
EmailAddress: [email protected]
OtherAddresses: primary:[email protected],secondary:[email protected]
Registered: Yes
How do I create the dictionary to append the three new key: values, and loop for each user to produce the above output?
This is my current playbook:
- hosts: localhost
tasks:
- read_csv:
path: /var/lib/awx/projects/file/creation.csv
# key: FirstName
fieldnames: FirstName,LastName,ClassType
delimiter: ','
register: userdata
- debug:
var: userdata.list
Given the mre data
userdata:
- Username: g.higgins
- Username: robmil
- Username: jeff.k
Use Jinja and create the dictionary update
update: |
{% filter from_yaml %}
{% for user in userdata|map(attribute='Username') %}
- EmailAddress: {{ user }}@gmail.com
OtherAddresses: 'primary:{{ user }}@gmail.com,secondary:{{ user }}@outlook.com'
Registered: 'Yes'
{% endfor %}
{% endfilter %}
gives
update:
- EmailAddress: [email protected]
OtherAddresses: primary:[email protected],secondary:[email protected]
Registered: 'Yes'
- EmailAddress: [email protected]
OtherAddresses: primary:[email protected],secondary:[email protected]
Registered: 'Yes'
- EmailAddress: [email protected]
OtherAddresses: primary:[email protected],secondary:[email protected]
Registered: 'Yes'
zip and combine the items of the lists
- set_fact:
userdata: "{{ userdata|zip(update)|map('combine') }}"
Example of a complete mre playbook for testing
shell> cat pb.yml
- hosts: localhost
vars:
userdata:
- Username: g.higgins
- Username: robmil
- Username: jeff.k
update: |
{% filter from_yaml %}
{% for user in userdata|map(attribute='Username') %}
- EmailAddress: {{ user }}@gmail.com
OtherAddresses: 'primary:{{ user }}@gmail.com,secondary:{{ user }}@outlook.com'
Registered: 'Yes'
{% endfor %}
{% endfilter %}
tasks:
- debug:
var: update
- set_fact:
userdata: "{{ userdata|zip(update)|map('combine') }}"
- debug:
var: userdata
gives
shell> ansible-playbook pb.yml
PLAY [localhost] ******************************************************************************
TASK [debug] **********************************************************************************
ok: [localhost] =>
update:
- EmailAddress: [email protected]
OtherAddresses: primary:[email protected],secondary:[email protected]
Registered: 'Yes'
- EmailAddress: [email protected]
OtherAddresses: primary:[email protected],secondary:[email protected]
Registered: 'Yes'
- EmailAddress: [email protected]
OtherAddresses: primary:[email protected],secondary:[email protected]
Registered: 'Yes'
TASK [set_fact] *******************************************************************************
ok: [localhost]
TASK [debug] **********************************************************************************
ok: [localhost] =>
userdata:
- EmailAddress: [email protected]
OtherAddresses: primary:[email protected],secondary:[email protected]
Registered: 'Yes'
Username: g.higgins
- EmailAddress: [email protected]
OtherAddresses: primary:[email protected],secondary:[email protected]
Registered: 'Yes'
Username: robmil
- EmailAddress: [email protected]
OtherAddresses: primary:[email protected],secondary:[email protected]
Registered: 'Yes'
Username: jeff.k
PLAY RECAP ************************************************************************************
localhost: ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0