11

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 タワーに追加することはできません (そのため、代替ソリューションを探しています)。

4

3 に答える 3

22

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

hosts ファイルはdev単に 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
于 2016-05-21T11:51:47.027 に答える
5

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

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

在庫/
プレイブック/
  |-> 役割 -> ../役割
  |-> group_vars -> ../group_vars
  |-> host_vars -> ../host_vars
役割/
group_vars/
host_vars/

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

于 2017-09-28T13:35:08.053 に答える
4

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

[デフォルト]

roles_path = /etc/ansible/roles: :

またはあなたの場合:

[デフォルト]

roles_path = /etc/ansible/roles:/etc/ansible/roles/java

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

于 2017-03-10T16:03:44.000 に答える