Назад | Перейти на главную страницу

Можно ли `включить` файл задач с другим набором хостов?

В идеале я бы хотел сделать что-то вроде:

- include: deregister_from_loadbalancer.yml
  delegate_to: loadbalancer

Таким образом, у меня все еще есть доступ к vars для хоста, против которого я веду общую игру, но действия происходят на хосте loadbalancer.

Почему не отдельные пьесы?

Я не могу просто разбить это на отдельные пьесы, потому что я выводю машины из ротации балансировщика по одной за раз. Разделение на несколько пьес означало бы что-то вроде:

- 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'] }}"

Если опубликованный вами пример ...

- include: deregister_from_loadbalancer.yml
  delegate_to: loadbalancer

... не работает, еще можно. Включаемые компоненты обычно могут принимать параметры, поэтому вы можете записать их как:

- include: deregister_from_loadbalancer.yml
  delegate_host: loadbalancer

И в вашем включить deregister_from_loadbalancer.yml вы используете этот var для делегирования всех своих задач, а затем:

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

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