web-dev-qa-db-ja.com

ansibleプレイブックに別の役割のタスクを含める

私は個々のタスクで一種のプレイブックライブラリを設計しています

したがって、通常の役割レポでは、次のようなものがあります。

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

custom_stuff_workflowの私のmain.ymlには次のようなものが含まれています:

---

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

そして、これは他のワークフローで:

---

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

自然な方法でそれを行う方法を見つけることができません:働いた1つの方法は、すべてのタスクを単一の役割にし、custom_stuff_workflowを含めながら関連するタスクにタグ付けすることでした

私が持っている問題は、呼び出しプレイブックでタグを設定できないことです:この嫌なリポジトリを社内の多くの人々に配布しているので、コマンドラインで設定するだけで、コマンドライン呼び出しに頼ることができません( #!コマンドで処理されるymlにansible-playbookヘッダーがあると便利です)

また、各ワークフローで関連するタスク(上記のツリー内の共通)をコピーすることもできますが、それらを繰り返したくありません

誰かが異なる役割でタスクを繰り返すことなく、私が望むものを達成するための解決策を見ることができますか?

私の問題の礎石は、タスクを個人として定義することであり、それはansibleでは自然に見えないことです...

どうもありがとう

PS:ワークフローのタスクは特定の順序で実行する必要があり、抽象化するための唯一の自然なステップはログインと保存/ログアウトであることに注意してください

PPS:この質問を見ました Ansibleの別のロール内からロールを呼び出すにはどうすればよいですか? しかし、それは完全なロールを呼び出しており、タスクのサブセットではなく呼び出しているため、問題を解決しません役割

65
Louis

他の誰かがこれにぶつかった場合に備えて、Ansibleのバージョン2.2include_roleが追加されました。次のようになりました。

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

ドキュメントをご覧ください here

49
uLan

はい、Ansibleはタスクを個々のコンポーネントとして本当に好きではありません。ロールを使用してほしいと思いますが、単純で再利用可能なタスクにロールを使用したくない理由がわかります。

現在、2つの解決策があります。

1.それらのタスクファイルをロールにし、依存関係を使用する

次に、例えばcustom_stuff_workflow

dependencies:
  - { role: login }

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

2. includeを使用して、タスクファイルへの「ハードコーディングされた」パスを使用します。

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

これは、私がやった短いテストプレイブックでかなりうまくいきました。これらのインクルードでパラメーターなどを使用することもできます。

参照: http://docs.ansible.com/ansible/latest/playbooks_reuse.html

私はその質問を正しく理解し、これが役立つことを願っています。

45
tehK