exemplo de playbook ansible yml



incluir tarefas de outra função no manual de instruções (2)

Estou criando um tipo de playbook lib com tarefas individuais

então, no repo de papéis habituais, tenho algo como:

roles
├── common
│   └── tasks
│       ├── A.yml
│       ├── B.yml
│       ├── C.yml
│       ├── D.yml
│       ├── login.yml
│       ├── logout.yml
│       └── save.yml
├── custom_stuff_workflow
│   └── tasks
│       └── main.yml
└── other_stuff_workflow
    └── tasks
        └── main.yml

meu main.yml em custom_stuff_workflow contém algo como:

---

- include: login.yml
- include: A.yml
- include: C.yml
- include: save.yml
- include: logout.yml

e este no outro fluxo de trabalho:

---

- include: login.yml
- include: B.yml
- include: A.yml
- include: D.yml
- include: save.yml
- include: logout.yml

Não consigo encontrar uma maneira de fazê-lo de maneira natural: uma maneira que funcionava era ter todas as tarefas em uma única função e marcar as tarefas relevantes, incluindo um custom_stuff_workflow

O problema que tenho com isso é que as tags não podem ser configuradas no manual de chamadas: elas devem ser configuradas apenas na linha de comando, pois estou distribuindo esse repositório ansável com muitas pessoas na empresa, não posso confiar nas invocações da linha de comando ( seria bom ter um cabeçalho #! no yml para ser processado pelo comando ansible-playbook )

Eu também poderia copiar as tarefas relevantes (comuns na árvore acima) em cada fluxo de trabalho, mas não quero repeti-las

Alguém pode ver uma solução para alcançar o que eu gostaria sem repetir as tarefas em diferentes funções?

Eu acho que a pedra angular do meu problema é que eu defino tarefas como individuais e não parece natural em termos de ansiedade ...

Muito obrigado

PS: observe que as tarefas no fluxo de trabalho precisam ser executadas em ordem específica e as únicas etapas naturais para abstrair seriam o login e o salvamento / logout

PPS: Eu já vi essa pergunta. Como chamo uma função de outra função na Ansible? mas isso não resolve o meu problema, pois invoca uma função completa e não um subconjunto das tarefas em uma função

https://ffff65535.com


Apenas coloque alguém que tope com isso, a versão 2.2 do Ansible agora tem include_role . Agora você pode fazer algo assim.

---
- name: do something
  include_role:
    name: common
    tasks_from: login

Confira a documentação here .


Sim, o Ansible realmente não gosta de tarefas como componentes individuais. Eu acho que ele quer que você use funções, mas posso ver por que você não gostaria de usá-las para tarefas simples e reutilizáveis.

Atualmente, vejo duas soluções possíveis:

1. Transforme esses arquivos de tarefas em funções e use dependências

Então você pode fazer algo assim em, por exemplo, custom_stuff_workflow

dependencies:
  - { role: login }

Consulte: https://docs.ansible.com/playbooks_roles.html#role-dependencies

2. Use include com caminhos "codificados" para os arquivos de tarefas

- include: ../../common/tasks/login.yml

Isso funcionou muito bem em um pequeno manual de teste que acabei de fazer. Lembre-se, você também pode usar parâmetros etc. nessas inclusões.

Consulte: http://docs.ansible.com/ansible/latest/playbooks_reuse.html

Espero ter entendido essa pergunta corretamente e isso ajude.





ansible-playbook