Ansible库存主机依赖性

时间:2018-08-09 16:44:34

标签: dependencies ansible inventory

我有一堆Oracle数据库服务器的清单。大多数时候,我希望我的剧本能够并行执行。但是对于一组特定的RAC服务器,我想确保Ansible可以串行处理它们。因此,我的清单如下所示。请注意,这只是一个示例,实际上有170多个主机是独立服务器和RAC的混合,因此理想情况下该解决方案是可扩展的:

[d1w1]
server1
server2

[d1w2]
hostA
hostB

[d1w3]
standalone1
standalone2
rac1
rac2
rac3

在这种情况下,当我为“ d1w3”运行ansible-playbook时,该Playbook将同时开始为所有5台主机执行。我需要它同时执行standalone1,standalone2和rac1。当rac1成功完成后,继续前进到rac2;当rac2成功完成后,继续前进到rac3。

我知道组和子级,但是我不确定如何建立依赖关系。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我建议考虑在同一本剧本中制作多部戏剧。每次播放将在已定义的hosts上的前一个播放之后进行。

- name: parallel play on 3 hosts
  hosts: standalone1,standalone2,rac1
  tasks:
    - name: tasks 1
      …

- name: play on rac2 
  hosts: rac2
  tasks:
    - name: tasks 1
      …

- name: play on rac3 
  hosts: rac3
  tasks:
    - name: tasks 1
      …

答案 1 :(得分:0)

您可能必须进行重组,但仍然可以让主机文件定义。

[parallels]
1.2.3.4
1.2.3.5

[serials]
2.3.4.5
2.3.4.6
2.3.4.7

然后您可以分成几个剧本-

- name: Do The Thing
  hosts: parallels
  roles:
   - test

- name: Do The Thing in serial
  hosts: serials
  serial: 1
  roles:
   - test

那可能仍然不是您想要的,但是如果将其与baptistemm的解决方案结合使用,它可能会起作用。依赖性有多深?

如果将所有必须先完成的工作放在一个组中,然后将所有依赖于第二个组的工作,然后将所有依赖 2nd 组的工作放入第三,您可以并行处理所有波浪1,然后是波浪2,然后是波浪3,等等。

您可能必须使用--limit语句,但是它可以工作。