1

我正在使用 Ansible AWX (Tower) 并且有一个模板工作流,根据之前的执行是否成功,一个接一个地执行多个模板。

我注意到在运行单个模板时我可以限制到特定主机,我想将其应用于工作流,我猜我必须使用调查选项来实现这一点,但我不确定如何。

我试图看看我是否可以覆盖“主机”值,但它失败了,就像我预期的那样。我怎样才能让它在工作流程开始时询问我主机名/IP,而不是工作流程中的每个模板?

4

1 回答 1

4

你有set_stats选择。

假设您有以下库存:

  • 10.100.1.1
  • 10.100.1.3
  • 10.100.1.6

您的库存称为MyOfficeInventory。第一条规则是,您需要所有模板中的此库存才能与第一个主机一起玩。

我只想 ping 我的10.100.1.6机器,所以在模板中我选择MyOfficeInventory并限制为10.100.1.6

如果我们这样做:

---
- 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库存。

在分配给模板的其余剧本中使用它:


- name: Ping
  hosts: "{{ myinventory }}"
  gather_facts: False

  tasks:

  - name: Ping
    ping:

您的库存变量将被转移,您将获得:

ok: [10.100.10.6]

更进一步。您想从调查中选择您的房东吗?

使用您的主机名输入创建一个并添加将您的第一个剧本保留为:

- name: Ping
  hosts: "{{ mysurveyhost }}"
  gather_facts: False
于 2018-09-06T17:36:41.203 回答