Implante funções diferentes em servidores diferentes usando um manual

Implante funções diferentes em servidores diferentes usando um manual

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.xmlmanuais 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 hostsdeclaraçã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 hostsquanto a rolespalavra-chave são definidas duas vezes naquela jogada. YAML está reclamando que você tem duas definições diferentes para a palavra-chave hostse roles.

informação relacionada