
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
.