Como executar um papel diferente para hosts diferentes em um único ansioso playbook?

1

Eu tenho 3 playbooks ansible.

my_ansible
├── hosts
├── play1.yaml
├── play2.yaml
├── play3.yaml
└── roles
    ├── role1
    ├── role2
    └── role3

hosts

[play1]
host1

[play2]
host2

[play3]
host3

Agora, quando executo play3 , quero executar play2(role2) on host2 e play1(role1) on host1 .

Eu verifico, dependência de função , mas que se aplicam ao mesmo host, significa , se eu adicionar role-dependency em role3 para role1 e role2 , essas duas funções serão executadas em relação a host3 .

Quero garantir que play1 seja executado somente em host1 , play2 seja executado somente em host2 e play3 seja executado somente em host3 .

Eu tento encontrar a dependência playbook , mas não tenho sorte ainda.

Se existe alguma maneira melhor de resolver isso, então estou pronto para entrar nesse caminho também.

    
por Lafada 11.01.2018 / 18:53

2 respostas

2

Eu acho que a maneira mais fácil de conseguir isso é criar um playbook mestre e definir a ordem dos playbooks.

It is possible to include playbooks inside a master playbook. [...] The plays and tasks in each playbook listed will be run in the order they are listed, just as if they had been defined here directly.

Consulte A documentação aplicável sobre a reutilização de playbooks inclui

Para alcançar esse play3 é executado play2 e play1 , basta definir um manual principal assim:

---
- import_playbook: play3.yml
- import_playbook: play2.yml
- import_playbook: play1.yml
    
por 19.01.2018 / 16:13
1

Não tenho certeza se entendi, mas acho que você está dizendo que o seu problema é que você não quer executar o play3 sem primeiro executar o play2 e o play1?

Eu não sei como reforçar isso, mas posso pensar em algumas maneiras de torná-lo mais conveniente.

Primeiro, basta colocar todas as três reproduções em um arquivo e, quando você executar uma, todas elas serão executadas. Se você quiser executar ocasionalmente play1 sem play2 e play3, use tags. Com as tags, você poderia fazer o play1 e o play2 ter a tag play3, então você nunca executaria o play3 sem o play1 e o play2 sem querer.

Eu costumo colocar meu comando ansible-playbook em um arquivo de script para que eu não tenha que lembrar. Se você gosta de fazer isso, você pode fazer o script iniciar as três jogadas. É especialmente bom quando você tem colegas de trabalho que não sabem tão bem. EG Eu faço um arquivo chamado run.sh que contém:

ansible-playbook -i hosts myplay.yaml $@

O $@ é o bash para adicionar quaisquer args, então eu posso fazer ./run.sh -t play1 e coisas assim.

Espero que ajude!

    
por 11.01.2018 / 19:20