Назад | Перейти на главную страницу

Могу ли я использовать словарную переменную для предоставления всех параметров задачи?

Я хочу запустить задачу, в которой параметры заполняются с помощью with_items, вместо того, чтобы вручную писать parameter:{{item.key}}. Например, у меня есть этот host var:

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

Заметка что ключи списка словарей являются фактическими параметрами задачи htpasswd.

В playbook вместо этого:

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

Есть ли способ просто сделать это?

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

Это действительно помогло бы мне уменьшить многословие playbook. Спасибо.

С Ansible 2.2 вы все еще можете использовать args параметр для достижения этого.
Но он уже давно устарел и отобразит вам предупреждение.
Некоторые подробности насчет устаревания.

Пример:

- 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 }}"