web-dev-qa-db-fra.com

inclure des tâches d'un autre rôle dans Ansible Playbook

Je conçois une sorte de bibliothèque de jeu avec des tâches individuelles

donc, dans le repo des rôles habituels, 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 main.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 peux pas trouver un moyen de le faire de manière naturelle: une des méthodes qui fonctionnait était de regrouper toutes les tâches dans un seul rôle et de baliser les tâches pertinentes tout en incluant un custom_stuff_workflow.

Le problème que j’ai avec cela est que les balises ne peuvent pas être placées dans le playbook appelant: c’est seulement pour être placées en ligne de commande car je distribue ce repo ansible avec de nombreuses personnes de la société, je ne peux pas compter sur des invocations en ligne de commande ( ce serait bien d'avoir un #! en-tête en yml à traiter par ansible-playbook commande)

Je pourrais aussi copier les tâches pertinentes (à l’intérieur de l’arborescence ci-dessus) dans chaque flux de travail, mais je ne veux pas les répéter

Quelqu'un peut-il 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éfinis les tâches comme individuelles et que cela ne semble pas naturel dans ansible ...

Merci beaucoup

PS: notez que les tâches dans le flux de travail doivent être effectuées dans un ordre spécifique et que les seules étapes naturelles pour résumer seraient la connexion et la sauvegarde/la déconnexion.

PPS: J'ai vu cette question Comment appeler un rôle dans un autre rôle dans Ansible? mais cela ne résout pas mon problème car il appelle un rôle complet et non un sous-ensemble des tâches d'un rôle

65
Louis

Si juste quelqu'un casse dans cela, la version 2.2 de 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 .

49
uLan

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

Je vois actuellement deux solutions possibles:

1. Faites de ces fichiers de tâches des rôles et utilisez des dépendances

Ensuite, vous pouvez 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. Utilisez include avec les chemins "codés en dur" vers les fichiers de tâches

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

Cela a plutôt bien fonctionné dans un petit testbook que je viens de faire. Gardez à l'esprit, vous pouvez également utiliser des paramètres, etc.

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

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

45
tehK