
Fe eu criei duas funções via "ansible-galaxy init": deploy_back e deploy_front
Também escrevi um arquivo playbook.yml.
- name: Create cluster
become: yes
hosts: all
roles:
- deploy_front
- deploy_back
Se eu iniciá-lo por meio de "ansible-playbook playbook.yml" - então, em ambos os servidores, serão implantadas duas funções. Como posso implantar funções diferentes em servidores diferentes em um manual?
Se eu escrever playbook.yml
- name: Create cluster
become: yes
hosts: front
roles:
- deploy_front
hosts: db
roles:
- deploy_db
então a saída se parece com "...encontrou uma chave de dict duplicada (hosts)... encontrou uma chave de dict duplicada (funções).... Usando apenas o último valor definido."
Responder1
Você deve separar suas hosts:
e outras declarações em peças diferentes. O código deve ser parecido com isto:
- 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
Responder2
O motivo pelo qual você recebe uma mensagem de "chave duplicada" é devido à forma como o YAML está estruturado.
Um playbook é uma coleção de peças, na forma de uma lista ordenada. Cada jogada é especificada por uma série de pares de palavras-chave/valor. Comumjogarpalavras-chave são: name
, hosts
, become
, e roles
, para citar algumas.
Em YAML, para especificar diferentes itens em uma lista, você usa o -
caractere traço (). Em ambos os playbook.xml
manuais de exemplo, você tem apenas um caractere de traço mais à esquerda. Isso significa que você tem apenas uma lista de itens para um manual ou um manual único.
Se você adicionar um caractere de traço antes de sua segunda hosts
declaração em seu segundo exemplo playbook.yml
, você terá um manual válido que agora contém duas peças:
- name: Create cluster
become: yes
hosts: front
roles:
- deploy_front
- hosts: db
roles:
- deploy_db
No seu segundo exemplo original, apenas uma única jogada é definida. Além disso, tanto a palavra-chave hosts
quanto a roles
palavra-chave são definidas duas vezes naquela jogada. YAML está reclamando que você tem duas definições diferentes para a palavra-chave hosts
e roles
.