Ansible DRY(不要重复自己)

时间:2017-01-27 01:20:52

标签: ansible ansible-playbook

我有2个角色,都有一系列任务。

但是,角色A中的某些(并非所有)任务几乎与角色B中的任务相同

示例角色任务:

- name: Ensure bible server is running
  command: npm run forever
  args:
    chdir: ~/bible-server
  when: "foreverlist.stdout.find('bibleServer.js') == -1"

角色B任务示例:

- name: Ensure certs server is running
  command: npm run forever
  args:
    chdir: ~/certs-server
  when: "foreverlist.stdout.find('certsServer.js') == -1"

是否可以参数化任务,以便我可以声明一个任务,就像我会声明一个函数并将参数传递给它一样?

1 个答案:

答案 0 :(得分:2)

是的,在Ansible中,这就是库存的用途。将配置指定为清单中的变量,如果两个角色位于同一主机上,则可以使用字典。然后遍历字典以在每个配置上重复任务。

inventory

servers:
  - path: bible-server
    script: bibleServer.js
  - path: cert-server
    script: certServer.js

然后在任务中:

- name: Ensure Servers are running
  command: npm run forever
  args:
   chdir: "~/{{ item.path }}" 
  when: "foreverlist.stdout.find('{{ item.script }}') == -1"
  with_items: "{{ servers }}"

这是高级概述。我强烈建议您阅读inventory,因为它的使用是Ansible的核心原则。另请阅读loops