Posso usar uma variável de dicionário para fornecer todos os parâmetros da tarefa?

5

Eu quero executar uma tarefa em que os parâmetros sejam preenchidos usando with_items, em vez de precisar escrever manualmente parameter:{{item.key}} . Por exemplo, eu tenho esse host var:

HtpasswdsToSet:
 - path: /etc/nginx/passwdfile
   name: janedoe
   password: 'abc123'
 - path: /etc/nginx/passwdfile
   name: bob
   password: '123abc'

Note que as chaves da lista de dicionários são parâmetros de tarefas reais do htpasswd.

No playbook, em vez de fazer isso:

- name: add htpasswd users
  htpasswd:
    path: {{item.path}}
    name: {{item.name}}
    password: '{{item.password}}'
  with_items: "{{HtpasswdsToSet}}"

Existe alguma maneira de simplesmente fazer isso?

- name: add htpasswd users
  htpasswd: "{{HtpasswdsToSet}}"

Isso realmente me ajudaria a reduzir a verbosidade da cartilha. Obrigado.

    
por tom_nb_ny 06.01.2017 / 02:15

1 resposta

4

Com o Ansible 2.2, você ainda pode usar o parâmetro args para conseguir isso.
Mas ele está obsoleto por um tempo e exibirá um aviso para você.
Alguns detalhes sobre a reprovação.

Exemplo:

- hosts: localhost
  gather_facts: no
  vars:
    args_list:
      - content: hello world
        dest: /tmp/test1.txt
        mode: 0666
      - content: test test test
        dest: /tmp/test2.txt
        mode: 0444
  tasks:
    - copy:
      args: "{{ item }}"
      with_items: "{{ args_list }}"
    
por 06.01.2017 / 09:26

Tags