Ansible: Yeni rastgele dizeyle sözlükler listesine bir öğe ekleme
Bir dikt listesi olan yanıtlanabilir bir değişkenim var:
userdata:
- { first: Mike, last: Smith, username: msmith}
- { first: Jane, last: Largo, username: jlargo}
- { first: Evan, last: Jones, username: ejones}
Her girişe rastgele oluşturulmuş 20 karakter alfanümerik şifre atanmış bir 'şifre' alanı eklemek istiyorum, böylece bu şifreyi senkronize etmek için gereken çeşitli eylemler için başucu kitabı sırasında uygun olduğu şekilde kullanabilirim için. Bir blok yapmayı denedim: ama bunu öğelerle yapamayacağınızı öğrendim. Ayrıca with_items'i kullanmanın ve o öğenin sözlüğüne geri kaydetmenin bir yolunu bulamadım. Şifre arama eklentisi umut verici görünüyor (https://docs.ansible.com/ansible/latest/plugins/lookup/password.html) bir dosyaya (/ dev / null) kaydetmeye gerek kalmadan rastgele bir parola almak için, ancak bunu listenin her öğesinde bulamıyorum.
Sonunda şöyle bir yapı isterim:
userdata:
- { first: Mike, last: Smith, username: msmith, password: FdUChpPtfonoPexMZmt0}
- { first: Jane, last: Largo, username: jlargo, password: QR13sN7CP00LbdXZ0gON}
- { first: Evan, last: Jones, username: ejones, password: OCQSmqCbO8239jHpQiRm}
Yanıtlar
Orijinal listenizin üzerinde döngü oluşturan yeni bir liste oluşturmanız gerekir. Her öğe için, mevcut olanı parola özniteliğiyle birleştirirsiniz. Aşağıda bir örnek verilmiştir:
---
- hosts: localhost
gather_facts: false
vars:
userdata:
- { first: Mike, last: Smith, username: msmith }
- { first: Jane, last: Largo, username: jlargo }
- { first: Evan, last: Jones, username: ejones }
tasks:
- name: Create a new list with random password
vars:
user_entry: "{{ item | combine({'password': lookup('password', '/dev/null')}) }}"
set_fact:
users_with_pass: "{{ users_with_pass | default([]) + [user_entry] }}"
loop: "{{ userdata }}"
- name: Show result
debug:
var: users_with_pass
Hangi verir:
$ ansible-playbook test.yml
PLAY [localhost] **************************************************************************************************************************************************************************************************
TASK [Create a new list with random password] *********************************************************************************************************************************************************************
ok: [localhost] => (item={'first': 'Mike', 'last': 'Smith', 'username': 'msmith'})
ok: [localhost] => (item={'first': 'Jane', 'last': 'Largo', 'username': 'jlargo'})
ok: [localhost] => (item={'first': 'Evan', 'last': 'Jones', 'username': 'ejones'})
TASK [Show result] ************************************************************************************************************************************************************************************************
ok: [localhost] => {
"users_with_pass": [
{
"first": "Mike",
"last": "Smith",
"password": "w-zk-BAqJuJ090mTy8g0",
"username": "msmith"
},
{
"first": "Jane",
"last": "Largo",
"password": "J6g07utP.ANtbY7Z58Za",
"username": "jlargo"
},
{
"first": "Evan",
"last": "Jones",
"password": "eqHdpKDpkpEBY21qTyz5",
"username": "ejones"
}
]
}
PLAY RECAP ********************************************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0