È ansible ripetere un dictionary con elenchi

Ho la seguente variabile caricata tramite include_vars :

 access: username-foo: - path: / permissions: rwX recursive: true username-bar: - path: / permissions: rX - path: /css permissions: rwX recursive: true - path: /data permissions: rX - path: /data/reviews.yml permissions: rw - path: /js permissions: rX - path: /js/*.js permissions: rw 

Voglio alimentare queste informazioni al command shell per impostare le autorizzazioni appropriate.

  • Crea utente se non esiste in Ansible
  • Possibile: errore quando si cerca di deselect un .tar.gz recuperato tramite il module "get_url"
  • Aggiunta di un utente a un gruppo aggiuntivo utilizzando l'informazione
  • Definire le variables per tutti gli host in Inventario dinamico ansible
  • Array associativo nel libretto di gioco Ansible
  • Cattura l'output del template al volo
  • Ho provato alcune tecniche da qui: http://docs.ansible.com/playbooks_loops.html ma non sono riuscito a trovare soluzione di lavoro.

    È ansible ripetere questa struttura? Altrimenti, come posso ricostruirlo per farlo funzionare? È ansible farlo senza rompere la regola DRY (ad esempio includere il nome utente in each record)?

  • Sono definiti i ruoli dei gestori in ruoli dopo l'integer playbook o il ruolo?
  • Possibile: impostazione hostname sopra l'inventario
  • Esegui sempre l'esecuzione del gestore in Ansible
  • Come faccio a aggiungere le autorizzazioni sudo a un utente creato con il formato?
  • Configurare le credenziali SSH per ambiente
  • Esegui un task sensibile su altri membri di un gruppo, ma non sul membro corrente
  • 3 Solutions collect form web for “È ansible ripetere un dictionary con elenchi”

    Innanzitutto, si consiglia di utilizzare l'unità di file , piuttosto che la shell . È less sobject a fallimento e apparentemente idempotente. Tuttavia, questo potrebbe darti problemi con la combinazione di directory, file e globuli di file. YMMV.

    Quanto al cuore della domanda, avrei impostato le tue variables così:

     users: - username: bar directories: - path: /data permissions: rX - path: /js permissions: rX - username: foo directories: - path: / permissions: rwX 

    Il gioco sarebbe così simile:

     - name: Change mod/own shell: chown {{ item.0.username }} {{ item.1.path }};chmod u+{{ item.1.permissions }} {{ item.1.path } with_subelements: - users - directories 

    Questo è un buon esempio di output che puoi provare. Creare un nuovo playbook denominato iteration_loop.yml :

     --- - name: Change mod/own hosts: all tasks: - name: show me the iterations debug: msg={{ item.0.username }} {{ item.1.path }} then {{ item.1.permissions }} {{ item.1.path }} with_subelements: - users - directories vars: users: - username: bar directories: - path: /data permissions: rX - path: /js permissions: rX - username: foo directories: - path: / permissions: rwX 

    Quindi eseguire il playbook come questo: ansible-playbook -i '172.16.222.131,' iteration_loop.yml

    e l'output dovrebbe darti come accedere agli elementi:

     PLAY [Change mod/own] ********************************************************* GATHERING FACTS *************************************************************** ok: [172.16.222.131] TASK: [show me the iterations] ************************************************ ok: [172.16.222.131] => (item=({'username': 'bar'}, {'path': '/data', 'permissions': 'rX'})) => { "item": [ { "username": "bar" }, { "path": "/data", "permissions": "rX" } ], "msg": "bar" } ok: [172.16.222.131] => (item=({'username': 'bar'}, {'path': '/js', 'permissions': 'rX'})) => { "item": [ { "username": "bar" }, { "path": "/js", "permissions": "rX" } ], "msg": "bar" } ok: [172.16.222.131] => (item=({'username': 'foo'}, {'path': '/', 'permissions': 'rwX'})) => { "item": [ { "username": "foo" }, { "path": "/", "permissions": "rwX" } ], "msg": "foo" } PLAY RECAP ******************************************************************** 172.16.222.131 : ok=2 changed=0 unreachable=0 failed=0 

    Supponendo che dict={a:[1,2,3],b:[1,2]} e così via:

    - name: Flattened list set_fact: flattened: "{{ dict.values() | sum(start=[]) }}" Ora flattened == [1,2,3,1,2]

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.