inclure les tâches d'un autre rôle dans un livre de jeux possible

je suis en train de concevoir une sorte de Livre de jeu lib avec des tâches individuelles

donc, dans les rôles habituels repo, j'ai quelque chose comme:

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

mon principal.YML dans custom_stuff_workflow contient alors quelque chose comme:

---

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

et celui-ci dans l'autre flux de travail:

---

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

Je ne trouve pas le moyen de le faire de façon naturelle: l'une des façons de faire était d'avoir toutes les tâches dans un seul rôle et de les étiqueter. les tâches pertinentes tout en incluant un flux custom_stuff_workflow

le problème que j'ai avec cela est que les tags ne peuvent pas être définis dans le playbook appelant: c'est seulement pour être défini à la ligne de commande comme je distribue cette possible repo avec beaucoup de gens dans la compagnie, Je ne peux pas me fier aux invocations en ligne de commande (ce serait bien d'avoir un en-tête #! dans yml pour être traité par ansible-playbook commande)

je pourrais également copier les tâches pertinentes (à l'intérieur commun dans le au-dessus de l'arbre) dans chaque flux de travail, mais je ne veux pas les répéter autour de

est-ce que quelqu'un peut voir une solution pour réaliser ce que je voudrais sans répéter les tâches sur différents rôles?

je suppose que la pierre angulaire de mon problème est que je définit les tâches comme individuel et il semble pas naturel dans impossible...

Merci beaucoup

PS: notez que les tâches dans le flux de travail doivent être effectuées dans un ordre spécifique et le seul les étapes naturelles pour abstraire serait le login et enregistrer /déconnexion

PPS: j'ai vu cette question Comment puis-je appeler un rôle de l'intérieur d'un autre rôle dans Ansible? mais il ne résout pas mon problème car il invoque un rôle complet et non un sous-ensemble des tâches dans un rôle

57
demandé sur Community 2015-05-12 16:34:01

2 réponses

juste au cas où quelqu'un d'autre se heurte à cela, la version 2.2 D'Ansible a maintenant include_role .Vous pouvez maintenant faire quelque chose comme ça.

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

consultez la documentation ici .

38
répondu uLan 2017-04-06 07:53:35

Oui, Ansible n'aime pas vraiment les tâches en tant que composants individuels. Je pense qu'il veut que vous utilisiez des rôles, mais je vois pourquoi vous ne voudriez pas utiliser des rôles pour des tâches simples et réutilisables.

je vois actuellement deux solutions possibles:

1. Transformer ces fichiers de tâches en rôles et utiliser des dépendances

alors vous pourriez faire quelque chose comme ceci dans par exemple custom_stuff_workflow

dependencies:
  - { role: login }

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

2. Utiliser include avec "codé en dur" les chemins vers les fichiers de tâches

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

ça a plutôt bien marché dans un petit test que je viens de faire. Gardez à l'esprit que vous pouvez également utiliser des paramètres, etc. dans les inclut.

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

j'espère que j'ai compris cette question correctement et cela aide.

42
répondu tehK 2018-03-08 01:52:49