#目次
- 1. はじめに
- 2. 仮想環境作成
- 3. ansibleのインストール方法
- 4. collectionsのインストール方法
- 5. collectionsの使用方法
- 6. collectionsのパス
- 7. おわりに
- 8. 参考資料
- 9. 技術情報
#1. はじめに
ansible2.10ではansible2.9までとは異なっており、『collections』という考え方が新しく実装されています。
collectionsにより、ansibleのバージョンを変更せずにモジュールのバージョンを管理できるようになります。
また、本記事では例として『vmware』collectionを用いて検証しています。
#2. 仮想環境作成
[root@localhost ~]# python3 -m venv venv
[root@localhost ~]# source venv/bin/activate
(venv) [root@localhost ~]#
### 仮想環境から抜ける場合は以下コマンド ###
(venv) [root@localhost ~]# deactivate
[root@localhost ~]#
#3. ansibleのインストール方法
(venv) [root@localhost ~]# pip install --upgrade pip
(venv) [root@localhost ~]# pip install ansible
(venv) [root@localhost ~]# pip freeze
ansible==2.10.6
ansible-base==2.10.5
従来は『ansible==2.9.10』のような表示でしたが、
ansible2.10からは『ansible』『ansible-base』がインストールされます。
『ansible-base』は基本機能と標準モジュール群、『ansible』はcollection群です。
バージョンはansibleコマンドで確認できますが、pipのパッケージでは『ansible-base』と同じバージョンのようです。
『ansible』のみがインストール済みの状態でも『ansible-base』がないとansibleコマンドは使用できません。
また、『ansible-base』のみがインストール済みの状態でもcollectionsがないため、モジュールを参照できず、プレイブックの実行エラーになります。
#4. collectionsのインストール方法
モジュールのアップデートや、個別にcollectionsをインストールする際に行います。
ansible garaxyからcollectionを探しインストールを行います。
https://galaxy.ansible.com/
検索から、指定のcollectionsを検索します。
該当のcollectionsをクリックすると、インストール方法などが確認できます。
確認したら以下の方法でインストールする。
### 最新のcollection インストール方法 ###
(venv) [root@localhost ~]# ansible-galaxy collection install community.vmware
### バージョン指定インストール方法 ###
(venv) [root@localhost ~]# ansible-galaxy collection install community.vmware:1.4.0
### 既にcollectionがインストール済みの状態でバージョンを変更する場合 ###
(venv) [root@localhost ~]# ansible-galaxy collection install -f community.vmware:1.5.0
### collectionsの確認 ###
(venv) [root@localhost ~]# ansible-galaxy collection list
# /root/.ansible/collections/ansible_collections
Collection Version
---------------- -------
community.vmware 1.4.0
# /root/venv/lib/python3.6/site-packages/ansible_collections
Collection Version
------------------------- -------
community.vmware 1.7.0
#5. collectionsの使用方法
モジュールを使用するためにプレイブック、ロール、タスクで指定できます。
ロールを使用する場合はmetaに記載すれば読み込まれます。
### プレイブックで指定する場合 ###
---
- name: sample
hosts: vcenter
gather_facts: no
collections:
- community.vmware
tasks:
- name: sample name
vmware_guest:
### ロールで指定する場合 ###
.
|-- roles
| `-- test
| |-- meta
| | `-- main.yml
| `-- tasks
| |-- main.yml
| `-- test.yml
`-- site.yml
(venv) [root@localhost meta]# pwd
/etc/ansible/playbook/roles/test/meta
(venv) [root@localhost meta]# cat main.yml
---
collections:
- community.vmware
(venv) [root@localhost meta]# cat ../tasks/test.yml
---
- name: sample name
vmware_guest:
### タスクで指定する場合 ###
---
- name: sample
hosts: vcenter
gather_facts: no
tasks:
- name: sample name
community.vmware.vmware_guest:
また、以下のように指定なしでもプレイブックの実行は可能です。
実行時にモジュールのパスへリダイレクトし、実行できるような仕組みになっているようです。
そのため、従来のプレイブックをansible2.10でも実行できるようになっています。
### collections指定なしの場合 ###
---
- name: sample
hosts: vcenter
gather_facts: no
tasks:
- name: sample name
vmware_guest:
#6. collectionsのパス
ansible.cfgを確認したところ、以下の記載がありました。
デフォルトでは、ansible-galaxyコマンド等で個別インストールしたcollections(~/.ansible/collections)が優先されるようになっています。
### デフォルトのcollections_paths###
# collections_paths = ~/.ansible/collections:/usr/share/ansible/collections
#7. おわりに
ansible2.10リリース後触れられていなかったので、参考資料をもとに検証しまとめてみました。
より詳しい内容は参考資料をご覧いただければと思います。
#8. 参考資料
https://techblog.ap-com.co.jp/entry/2020/11/13/101710
https://tekunabe.hatenablog.jp/entry/2020/09/20/ansible_role_collections
https://docs.ansible.com/ansible/latest/user_guide/collections_using.html
#9. 技術情報
会社Webサイトにて技術ブログを掲載しております。ご覧いただければ幸いです。