我可以使用字典变量来提供所有任务参数吗?

tom*_*_ny 8 ansible

我想运行一个使用 with_items 填充参数的任务,而不必手动编写parameter:{{item.key}}. 例如,我有这个主机变量:

HtpasswdsToSet:
 - path: /etc/nginx/passwdfile
   name: janedoe
   password: 'abc123'
 - path: /etc/nginx/passwdfile
   name: bob
   password: '123abc'
Run Code Online (Sandbox Code Playgroud)

请注意,字典列表键是实际的 htpasswd 任务参数。

在剧本中,而不是这样做:

- name: add htpasswd users
  htpasswd:
    path: {{item.path}}
    name: {{item.name}}
    password: '{{item.password}}'
  with_items: "{{HtpasswdsToSet}}"
Run Code Online (Sandbox Code Playgroud)

有没有办法简单地做到这一点?

- name: add htpasswd users
  htpasswd: "{{HtpasswdsToSet}}"
Run Code Online (Sandbox Code Playgroud)

这真的会帮助我减少剧本的冗长。谢谢你。

Kon*_*rov 5

使用 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 }}"
Run Code Online (Sandbox Code Playgroud)

  • 谢谢。遗憾的是它已被弃用 - 这是减少冗长的有用方法。 (3认同)
  • @MichaelHampton 什么明显的原因?我是管理员,除了我之外没有其他人在配置主机变量,而且我没有在字典列表中使用系统事实。 (2认同)