web-dev-qa-db-ja.com

ansible:ロールにロールを含めますか?

ロールでロールを再利用することは可能ですか?ロールのmeta/main.ymlファイルで依存関係を定義するのではなく、別のロールのtasks/main.ymlのロールを直接含むで定義するのではありませんか?

たとえば、ロールブックでいくつかの基本的なロールを定義し、ロールでいくつかのより高度なロールを定義します。特定のタスクに加えて、基本的な役割の一部を高レベルの役割に含めるようにします。

playbooks/

  rolebooks/
    some_role/

  roles/
    webtier/
      tasks/
        main.yml

プレイブック/roles/webtier/tasks/main.yml:

- Shell: echo 'hello'
- { role: rolebooks/some_role }
- Shell: echo 'still busy'

ありがとう

58
Michael

古い質問BUTfor record:Ansible 2.2+を使用すると、include_role。まさにこの目的のために...ドキュメントを参照してください here

チェックアウト import_roleも...ドキュメントを参照してください こちら

77
masu

知りません、できません。これが依存関係の目的です。

依存関係を回避したい場合(たとえば、「ロールX」を2つのタスク間で実行したい場合)、タスクが関連していると思われる場合は、プレイブック自体でこれを実行できます。

roles/webtier/tasks/main.yml:

- Shell: echo 'hello'
- include: webtier.yml
- Shell: echo 'role done'

全体として、それはあなたが正確に何をしようとしているかに依存します。しかし、あなたの例では、「まだ忙しい」ということは、rolebooks/some_roleはまだ実行中ですが、これは不可能です(ここでは同時実行性はありません)。

もちろん、マスタープレイブックでロールをシーケンスすることもできます(これはおそらく既に行っていることです)。

- name: Polite foo stuff
  hosts: foo_hosts
  roles:
    - say_hello
    - rolebooks/some_role
    - say_bye

- name: Unpolite foo stuff
  hosts: !foo_hosts
  roles:
    - rolebooks/some_role
11
leucos

できませんが、似たようなことができます。

レイアウトの場合:

roles/
    ...
    common/tasks/main.yml
    nginx/tasks/main.yml
    ...

nginx/tasks/main.yml、共通タスクを呼び出すことができます。

- name: Call the 'common' role to do some general setup
  include: ../../common/tasks/main.yml

通常のインポート構造を使用していないため、以前に標準的な方法でロールを含めない限り、ロールのデフォルト変数にアクセスできないなどの「奇妙な」ことに遭遇する可能性があることに注意してください。

5
user559633

メタ依存関係を使用しないと言ったことに感謝しますが、私が思いついた最善の解決策は、onlyにmeta/dependency.ymlが含まれるロールを作成することです

これにより、任意の数のロールを正しい順序で含めることができます。

必ずallow_duplicatesを設定してください:yes

---
allow_duplicates: yes
dependencies:
  - { role: app-install-rpms,           tags: ['rpms'] }
  - { role: app-Java-config,            tags: ['config'] }
  - { role: app-directories,            tags: ['dirs'] }
  - { role: app-config-site_management, tags: ['site_management'] }
  - { role: app-config-initd,           tags: ['initd'] }
  - { role: Tomcat-boapp,               tags: ['config'] }

これにより、本質的にロールからロールを呼び出すことができます。

2
James Morgan