Развертывание различных ролей на разных серверах с использованием одного сценария

Развертывание различных ролей на разных серверах с использованием одного сценария

Fe Я создал две роли через "ansible-galaxy init": deploy_back и deploy_front

Также я написал файл playbook.yml.

- name: Create cluster
  become: yes
  hosts: all

  roles:
  - deploy_front
  - deploy_back

Если я запущу его через "ansible-playbook playbook.yml" - то на обоих серверах будут развернуты две роли. Как можно развернуть разные роли на разных серверах в одном плейбуке?

Если я напишу playbook.yml

- name: Create cluster
  become: yes

  hosts: front
  roles:
  - deploy_front

  hosts: db
  roles:
  - deploy_db

тогда вывод выглядит как "...найден дубликат ключа словаря (хосты)... найден дубликат ключа словаря (роли)... Используется только последнее определенное значение."

решение1

Вы должны разделить ваши hosts:и другие объявления на разные пьесы. Код должен выглядеть примерно так:

- name: Create front cluster
  become: yes
  hosts: front
  roles:
  - deploy_front

- name: Create db cluster
  become: yes
  remote_user: different-db-user
  hosts: db
  roles:
  - deploy_db

решение2

Причина, по которой вы получаете сообщение «дубликат ключа», кроется в структуре YAML.

Playbook — это коллекция пьес в форме упорядоченного списка. Каждая пьеса определяется серией пар ключевое слово/значение. Общиеигратьключевые слова: name, hosts, become, и roles, и это лишь некоторые из них.

В YAML для указания различных элементов в списке используется -символ тире ( ). В обоих примерах playbook.xmlплейбуков у вас есть только один самый левый символ тире. Это означает, что у вас есть только один список элементов для плейбука или один плейбук.

Если вы добавите символ дефиса перед вторым hostsобъявлением во втором примере playbook.yml, у вас будет допустимая книга пьес, которая теперь содержит две пьесы:

- name: Create cluster
  become: yes

  hosts: front
  roles:
  - deploy_front

- hosts: db
  roles:
  - deploy_db

В вашем исходном втором примере определена только одна пьеса. Более того, и ключевое слово hostsи rolesключевое слово определены дважды в этой пьесе. YAML жалуется, что у вас есть два разных определения для ключевого слова hostsи roles.

Связанный контент