Reputation: 3507
Ansible 2.7, server and targets are running ubuntu.
At a point of my playbook, I have a users
list of dicts:
ok: [virtual_tournesol] => {
"users": [
{
"key": "toto",
"value": [
"toto",
"/home/toto/.ssh/id_rsa"
]
},
{
"key": "riri",
"value": [
"www-data",
"/home/riri/.ssh/id_rsa"
]
}
]
}
I also fetch generated ssh keys within a pubkeys
list:
ok: [virtual_tournesol] => {
"pubkeys": [
"ssh-rsa XXX1 ansible-generated on tournesol",
"ssh-rsa XXX2 ansible-generated on tournesol"
]
}
How could I merge both data such I can continue my tasks using users
only ? I wish to get:
ok: [virtual_tournesol] => {
"users": [
{
"key": "toto",
"value": [
"toto",
"/home/toto/.ssh/id_rsa",
"ssh-rsa XXX1 ansible-generated on tournesol"
]
},
{
"key": "riri",
"value": [
"www-data",
"/home/riri/.ssh/id_rsa",
"ssh-rsa XXX2 ansible-generated on tournesol"
]
}
]
}
EDIT: In python, that would give something like:
for u, k in zip(users, pubkeys):
u['value'].append(k)
Upvotes: 0
Views: 46
Reputation: 68254
zip is a good choice. The code below
- set_fact:
user1: "{{ user1|default({}) | combine(
{ item.0.key: item.0.value + [ item.1 ] } ) }}"
loop: "{{ users|zip(pubkeys)|list }}"
- debug:
msg: "{{ user1|dict2items }}"
gives
"msg": [
{
"key": "riri",
"value": [
"www-data",
"/home/riri/.ssh/id_rsa",
"ssh-rsa XXX2 ansible-generated on tournesol"
]
},
{
"key": "toto",
"value": [
"toto",
"/home/toto/.ssh/id_rsa",
"ssh-rsa XXX1 ansible-generated on tournesol"
]
}
]
Upvotes: 1