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.
我有 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.