web-dev-qa-db-ja.com

Ansibleのrequirements.ymlをどこに配置し、依存関係を解決するためにそれを使用しますか?

私はansibleに不慣れで、依存する役割を探っていました。 ドキュメントリンク

ドキュメントに出くわしなかったのは、requirements.ymlファイルを配置する場所でした。

たとえば、site.ymlが次のようになっているとします。

---
- name: prepare system
  hosts: all
  roles:
     - role1

そして、言いましょう

  • role1はrole2とrole3に依存しています
  • role2はrole4とrole5に依存しています

通常、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に対して自動化されますか?後続の依存関係をこの方法で手動で解決してインストールする必要がありますか、それとももっと良いものがありますか?

8
sudeepgupta90

技術的に言えば、requirements.ymlコマンドで正しいパスを反映している限り、ansible-galaxy installファイルを好きな場所に置くことができます。

一方、Ansible Tower/Awxからプレイブックを実行したい場合は、 Ansible Towerの要件 に準拠し、requirements.ymlファイルを<project-top-level-directory>/roles/requirements.ymlに配置することをお勧めします

役割間の依存関係については、ansible-galaxyは、インストール中に発生した場合、それ自体で従うことができます。したがって、requirements.ymlでそれらすべてを指定する必要はなく、最上位のものだけを指定します。各外部ロールで依存関係を正しく指定する必要があるだけです。

Role1の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

Role2の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*/


8
Zeitounator