it-swarm.com.de

Nehmen Sie Aufgaben aus einer anderen Rolle in ein anzeigbares Spielbuch auf

Ich entwerfe eine Art Playbook-Bibliothek mit individuellen Aufgaben

also in den üblichen rollen repo habe ich so etwas wie:

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

meine main.yml in custom_stuff_workflow enthält dann so etwas wie:

---

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

und dieses im anderen Workflow:

---

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

Ich kann keine Möglichkeit finden, dies auf natürliche Weise zu tun: Eine Möglichkeit, die funktioniert hat, bestand darin, alle Aufgaben in einer einzigen Rolle zu haben und die relevanten Aufgaben mit einem Tag zu versehen, während ein custom_stuff_workflow eingefügt wurde

Das Problem, das ich dabei habe, ist, dass Tags nicht im aufrufenden Playbook festgelegt werden können: Sie dürfen nur in der Befehlszeile festgelegt werden, da ich dieses anonyme Repo mit vielen Mitarbeitern in der Firma verteile. Ich kann mich nicht auf Befehlszeilenaufrufe verlassen. Es wäre schön, einen #! - Header in yml zu haben, der vom ansible-playbook - Befehl verarbeitet wird.

Ich könnte auch die relevanten Aufgaben (im obigen Baum allgemein) in jeden Workflow kopieren, aber ich möchte sie nicht wiederholen

Kann jemand eine Lösung finden, um das zu erreichen, was ich möchte, ohne die Aufgaben über verschiedene Rollen zu wiederholen?

Ich denke, der Eckpfeiler meines Problems ist, dass ich Aufgaben als individuell definiere und es auf den ersten Blick nicht natürlich aussieht ...

Vielen Dank

PS: Beachten Sie, dass die Aufgaben im Workflow in einer bestimmten Reihenfolge ausgeführt werden müssen und die einzigen natürlichen Schritte zur Zusammenfassung das Anmelden und Speichern/Abmelden sind

PPS: Ich habe diese Frage gesehen Wie rufe ich eine Rolle in einer anderen Rolle in Ansible auf? aber es löst mein Problem nicht, da es eine vollständige Rolle aufruft und keine Teilmenge der Aufgaben in einer Rolle

65
Louis

Wenn nur jemand anderes darauf stößt, hat Version 2.2 von Ansible jetzt include_role. Sie können jetzt so etwas tun.

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

Lesen Sie die Dokumentation hier .

49
uLan

Ja, Ansible mag Aufgaben nicht wirklich als einzelne Komponenten. Ich glaube, Sie möchten Rollen verwenden, aber ich kann verstehen, warum Sie Rollen nicht für einfache, wiederverwendbare Aufgaben verwenden möchten.

Ich sehe derzeit zwei mögliche Lösungen:

1. Machen Sie diese Aufgabendateien zu Rollen und verwenden Sie Abhängigkeiten

Dann könnten Sie so etwas in z. custom_stuff_workflow

dependencies:
  - { role: login }

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

2. Verwenden Sie include mit "fest codierten" Pfaden zu den Aufgabendateien

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

Das hat in einem kurzen Test-Playbook, das ich gerade gemacht habe, ziemlich gut funktioniert. Beachten Sie, dass Sie in diesen Includes auch Parameter usw. verwenden können.

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

Ich hoffe, ich habe diese Frage richtig verstanden und das hilft.

45
tehK