私はansibleに不慣れで、依存する役割を探っていました。 ドキュメントリンク
ドキュメントに出くわしなかったのは、requirements.yml
ファイルを配置する場所でした。
たとえば、site.yml
が次のようになっているとします。
---
- name: prepare system
hosts: all
roles:
- role1
そして、言いましょう
通常、ansible-galaxyの構造は次のとおりです。
└── test-role
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
依存関係がmeta/main.yml
に追加されます。仮定すると、次のように(そしてrole2についても)、このファイルでマークされた依存関係があります。
dependencies:
- role: role2
- role: role3
また、次のようなrequirements.yml
ファイルもあります。
---
- src: some git link1
version: master
name: role2
- src: some git link2
version: master
name: role3
私の質問:role1のこのrequirements.yml
ファイルはどこに配置しますか?
コマンドによって要件をインストールする必要があることを理解しています。
ansible-galaxy install -r requirements.yml -p roles/
そして、私はこれをrole1に対して行うことができますが、これはどのようにrole2に対して自動化されますか?後続の依存関係をこの方法で手動で解決してインストールする必要がありますか、それとももっと良いものがありますか?
技術的に言えば、requirements.yml
コマンドで正しいパスを反映している限り、ansible-galaxy install
ファイルを好きな場所に置くことができます。
一方、Ansible Tower/Awxからプレイブックを実行したい場合は、 Ansible Towerの要件 に準拠し、requirements.yml
ファイルを<project-top-level-directory>/roles/requirements.yml
に配置することをお勧めします
役割間の依存関係については、ansible-galaxy
は、インストール中に発生した場合、それ自体で従うことができます。したがって、requirements.yml
でそれらすべてを指定する必要はなく、最上位のものだけを指定します。各外部ロールで依存関係を正しく指定する必要があるだけです。
meta/main.yml
内dependencies:
- src: https://my.scm.com/my-ansible-roles/role2.git
scm: git
version: master
name: role2
- src: https://my.scm.com/my-ansible-roles/role3.git
scm: git
version: master
name: role3
meta/main.yml
内dependencies:
- src: https://my.scm.com/my-ansible-roles/role4.git
scm: git
version: master
name: role4
- src: https://my.scm.com/my-ansible-roles/role5.git
scm: git
version: master
name: role5
roles/requirements.yml
---
- src: https://my.scm.com/my-ansible-roles/role1.git
scm: git
version: master
name: role1
できる限り網羅するために、これは私がプロジェクトで通常依存関係をローカルおよびローカル/プロジェクトのみのロールと同様に処理するために現在行っていることです
ansible-project-dir
└─── roles
| └─── locally-versionned-role1
| └─── locally-versionned-role2
| └─── ...
| └─── requirements.yml
| └─── .gitignore
└─── ansible.cfg
└─── playbook1.yml
└─── playbook2.yml
ansible.cfg
roles_path = roles
を設定することで、ローカルroles
ディレクトリでロールの検索とダウンロードを強制するため、ユーザーはansible-galaxy install
パラメータなしで-p
を使用できます。
roles/requirements.yml
すでに上記で説明しました。最上位の外部(つまり、プロジェクトでバージョン管理されていない)への依存関係をgalaxyロール名またはgit urisとしてリストするだけです。これらのロールを完全にチェックアウトして後でgit commit/Pushする必要がある場合は、ansible-galaxy install -g -f -r roles/requirements
を使用できます。
roles/.gitignore
# Ignore everything in roles dir
/*
# Except:
# the .gitignore file
!.gitignore
# the requirements file
!requirements.yml
# Readme if you have one
!README.md
# and any specific role we want to version locally
!locally-versionned-role*/