web-dev-qa-db-ja.com

Ansible:ロールディレクトリにあるディレクトリでロールを呼び出すプレイブック

Ansibleの役割とプレイブックのディレクトリ構造を形成したいと思います。

現在、私はのようなディレクトリ構造を持っています。

group_vars
    * all 
    * group-one
        - group-vars.yml
        - group-vault.yml
    ...
Host_vars
  - server1.yml
plays
    - Java_plays
       * deploy_fun_Java_stuff.yml
    * deploy_playbook.yml
roles
    - role1 
            - tasks
               * main.yml
            - handlers 
            - (the rest of the needed directories)
    - role2
    - Java 
        - Java_role1
            - tasks
               * main.yml
            - handlers 
            - (the rest of the needed directories)

役割を呼びかけたいのですがJava_role1劇中deploy_fun_Java_stuff.yml

電話できます

 ---
 - name: deploy fun Java stuff
   hosts: Java
   roles:
    - { role: role1 }

しかし、私は電話をかけることができません(私は複数の方法を試しました)。これは可能ですか?


 - name: deploy fun Java stuff
   hosts: Java
   roles:
    - { role: Java/java_role1 }

私が本当にやりたいのは、自分の役割に沿って整然と演劇を構成できるようにすることです。私はそれらを整理したい両方の役割と演劇の数が多くなることになります。

これは、playディレクトリごとに個別のansible.cfgファイルで処理できますが、それらのcfgファイルをansibleタワーに追加することはできません(したがって、別の解決策を探しています)。

7
Eddie

問題は、相対パスを適切に設定する必要があることだと思います。 Ansibleは、最初に呼び出されたプレイブックディレクトリに対して指定されたパスを適用し、次に現在の作業パス(ansible-playbookコマンドを実行しているパス)を調べ、最後に/etc/ansible/rolesをチェックインするため、dir構造の{ role: Java/java_role1 }の代わりに{ role: ../../roles/Java/java_role1 }または{ role: roles/Java/java_role1 }を使用できます。 。さらに別のオプションは、ansibleがロールを探すパスを構成することです。そのためには、 Ansible docs で説明されているように、プロジェクト内にroles_pathansible.cfgに設定できます。

あなたの例に基づいて:

ディレクトリツリー:

ansible/
├── hosts
│   └── dev
├── plays
│   └── Java_plays
│       └── Java.yml
└── roles
    ├── Java
    │   └── Java_role1
    │       └── tasks
    │           └── main.yml
    └── role1
        └── tasks
            └── main.yml

それをテストするために、プレイにはJava_role1role1が含まれます。

plays/Java_plays/Java.yml:

---
 - name: deploy Java stuff
   hosts: Java
   roles:
    - { role: roles/role1 }
    - { role: roles/Java/java_role1 }

テストの目的で、これらのロールは単にデバッグメッセージを出力します。

role1/tasks/main.yml:

---
- debug: msg="Inside role1"

dev hostsファイルは、単にlocalhostをJavaグループに設定します。これで、プレイブックを使用できます。

fishi@zeus:~/workspace/ansible$ ansible-playbook -i hosts/dev plays/Java_plays/Java.yml

PLAY [deploy Java stuff] *******************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [role1 : debug] ***********************************************
ok: [localhost] => {
    "msg": "Inside role1"
}

TASK [Java_role1 : debug] *************************************
ok: [localhost] => {
    "msg": "Inside Java_role1"
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0

{ role: ../../roles/Java/java_role1 }{ role: ../../roles/role1 }を使用するときに同じことを行うと、TASK括弧内のログ出力には、ロール名だけでなく相対パス全体が表示されます。

fishi@zeus:~/workspace/ansible$ ansible-playbook -i hosts/dev plays/Java_plays/Java.yml

PLAY [deploy Java stuff] *******************************************************

TASK [setup] *******************************************************************
ok: [localhost]

TASK [../../roles/role1 : debug] ***********************************************
ok: [localhost] => {
    "msg": "Inside role1"
}

TASK [../../roles/Java/java_role1 : debug] *************************************
ok: [localhost] => {
    "msg": "Inside Java_role1"
}

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=0    unreachable=0    failed=0
14
fishi0x01

別のオプションと私が使用するオプションは、プレイブックディレクトリにansible.cfgファイルを作成し、その中に次のものを配置することです。

[デフォルト]

role_path =/etc/ansible/roles ::

またはあなたの場合:

[デフォルト]

role_path =/etc/ansible/roles:/ etc/ansible/roles/Java

次に、相対パスを使用しないでください。

3
prankin

より洗練されたソリューション(imo)は、ロールディレクトリをプレイブックディレクトリ内にシンボリックリンクすることです。

私のディレクトリ構造は次のとおりです。

 inventory/
playbooks/
 |->ロール-> ../ roles 
 |-> group_vars-> ../ group_vars 
 | -> Host_vars-> ../Host_vars
roles/
group_vars/
Host_vars/

私の場合、ln -s ../roles playbooks/rolesを実行してシンボリックリンクを作成しました

1
Rystraum