私は個々のタスクで一種のプレイブックライブラリを設計しています
したがって、通常の役割レポでは、次のようなものがあります。
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の別のロール内からロールを呼び出すにはどうすればよいですか? しかし、それは完全なロールを呼び出しており、タスクのサブセットではなく呼び出しているため、問題を解決しません役割
他の誰かがこれにぶつかった場合に備えて、Ansibleのバージョン2.2にinclude_role
が追加されました。次のようになりました。
---
- name: do something
include_role:
name: common
tasks_from: login
ドキュメントをご覧ください here 。
はい、Ansibleはタスクを個々のコンポーネントとして本当に好きではありません。ロールを使用してほしいと思いますが、単純で再利用可能なタスクにロールを使用したくない理由がわかります。
現在、2つの解決策があります。
次に、例えばcustom_stuff_workflow
dependencies:
- { role: login }
参照: https://docs.ansible.com/playbooks_roles.html#role-dependencies
- include: ../../common/tasks/login.yml
これは、私がやった短いテストプレイブックでかなりうまくいきました。これらのインクルードでパラメーターなどを使用することもできます。
参照: http://docs.ansible.com/ansible/latest/playbooks_reuse.html
私はその質問を正しく理解し、これが役立つことを願っています。