Ansible: Yeni rastgele dizeyle sözlükler listesine bir öğe ekleme

Aug 18 2020

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

2 Zeitounator Aug 17 2020 at 23:20

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