我正在使用Ansible AWX(塔式),并且有一个模板工作流程,该模板工作流程根据先前的执行是否成功来执行一个接一个的模板。
我注意到我可以在运行单个模板时将主机限制为特定主机,我想将此应用到工作流中,我想我将不得不使用Survey选项来实现这一目标,但是我没有确定如何。
我试图查看我是否可以覆盖“主机”值,但是失败了,正如我期望的那样。 我该如何在工作流开始时询问我的主机名/ ip,而不是工作流中的每个模板?
答案 0 :(得分:3)
您有set_stats
选项。
假设您有以下清单:
您的清单称为 MyOfficeInventory 。第一条规则是您需要所有模板中的清单,才能与第一个主机一起使用。
我只想对我的 10.100.1.6 计算机执行ping操作,因此在模板中,选择 MyOfficeInventory ,并限制为 10.100.1.6 。 / p>
如果我们这样做:
---
- name: Ping
hosts: all
gather_facts: False
connection: local
tasks:
- name: Ping
ping:
我们得到:
TASK [Ping] ********************************************************************
ok: [10.100.10.6]
酷!因此,从 MyOfficeInventory 中,我选择了唯一的主机。因此,现在,在我的工作流程中,我选择了下一个带有* MyOfficeInventory **的模板(这是上述规则)。如果我ping通,除非您再次限制,否则我将对所有它们进行ping,所以让我们做魔术:
在您的第一个模板中,执行以下操作:
- name: add devices with connectivity to the "working_hosts" group
group_by:
key: working_hosts
- name: "Artifact URL of test results to Tower Workflows"
set_stats:
data:
myinventory: "{{ groups['working_hosts'] }}"
run_once: True
请注意,因为对于您的剧本,
groups['all']
表示:
"groups['all']": [
"10.100.10.1",
"10.100.10.3",
"10.100.10.6"
]
使用新的working_hosts组,您只会获得当前的主机:
"groups['working_hosts']": [
"10.100.10.6"
]
因此,现在您有了全新的 myinventory 库存。
在分配给模板的其余Playbook中像这样使用它:
- name: Ping
hosts: "{{ myinventory }}"
gather_facts: False
tasks:
- name: Ping
ping:
您的库存变量将被转移,您将得到:
ok: [10.100.10.6]
再走一步。您要从调查中选择主机吗?
使用您的主机名输入创建一个,并添加第一个Playbook为:
- name: Ping
hosts: "{{ mysurveyhost }}"
gather_facts: False