使用工作流模板限制主机

时间:2018-09-06 14:23:40

标签: ansible-tower ansible-awx

我正在使用Ansible AWX(塔式),并且有一个模板工作流程,该模板工作流程根据先前的执行是否成功来执行一个接一个的模板。

我注意到我可以在运行单个模板时将主机限制为特定主机,我想将此应用到工作流中,我想我将不得不使用Survey选项来实现这一目标,但是我没有确定如何。

我试图查看我是否可以覆盖“主机”值,但是失败了,正如我期望的那样。 我该如何在工作流开始时询问我的主机名/ ip,而不是工作流中的每个模板?

1 个答案:

答案 0 :(得分:3)

您有set_stats选项。

假设您有以下清单:

  • 10.100.1.1
  • 10.100.1.3
  • 10.100.1.6

您的清单称为 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