是否可以“包含”具有不同主机集的任务文件?

Par*_*hot 5 ansible

理想情况下,我希望能够执行以下操作:

- include: deregister_from_loadbalancer.yml
  delegate_to: loadbalancer
Run Code Online (Sandbox Code Playgroud)

通过这种方式,我仍然可以访问我正在运行整个游戏的主机的变量,但是负载均衡器主机上正在执行操作。

为什么不分开玩?

我不能只是将其分解为单独的游戏,因为我一次将机器从负载平衡器轮换中取出。分成多个剧本意味着:

- hosts: loadbalancers
  tasks:
    - include: remove_from_loadbalancer.yml
      vars:
        machine: "{{ item }}"
      with_items: "{{ groups['webservers'] }}"

# at this point in the play I'm being fired for gross incompetence

- hosts: webservers
  tasks:
    # ... update them

- hosts: loadbalancers
  tasks:
    - include: add_to_loadbalancer.yml
      vars:
        machine: "{{ item }}"
      with_items: "{{ groups['webservers'] }}"
Run Code Online (Sandbox Code Playgroud)

udo*_*dan 7

如果您发布的示例...

- include: deregister_from_loadbalancer.yml
  delegate_to: loadbalancer
Run Code Online (Sandbox Code Playgroud)

...不起作用,你仍然可以这样做。包含一般可以带参数,所以你可以把它写成:

- include: deregister_from_loadbalancer.yml
  delegate_host: loadbalancer
Run Code Online (Sandbox Code Playgroud)

在你的包含中,deregister_from_loadbalancer.yml你使用那个 var 来委派你的所有任务:

- some: task
  delegate_to: "{{ delegate_host | default(omit) }}"

- another: task
  delegate_to: "{{ delegate_host | default(omit) }}"
Run Code Online (Sandbox Code Playgroud)