Ansible DRY(不要重复自己)

Ansible DRY (don't repeat yourself)

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

但是,角色 A 中的部分(并非全部)任务与角色 B 中的任务几乎相同

示例角色 A 任务:

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

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

是的,在 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.