てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] ansible-galaxy collection list で site-packages 配下の Collection も表示させるワンライナー

これは、Ansible Advent Calendar 2020 (Adventar版) の 22日目の記事です。

はじめに

pip install ansible で Ansible 2.10 をインストールすると、2.9 まで標準で含まれたモジュールに概ね相当する Collection がセットでインストールされます。

Python の環境下 (例: ~/envs/venv/lib/python3.X/site-packages/ansible_collections) に配置されます。

このバージョンの Collection がインストールされているか調べる場合は、ansible-galaxy collection list コマンドを利用しますが、デフォルトだと ~/.ansible/collections/ansible_collections/ 配下を検索しにいくため、site-packages 方面を検索してくれません。

-p ~/envs/venv/lib/python3.X/site-packages/ansible_collections のように検索先を直接指定してもよいのですが、Ansible 公式ドキュメントにもう少し汎用的な方法(だたし長い)があったのでご紹介します。

  • 環境
    • ansible 2.10.4
    • ansible-base 2.10.4

[2021/01/23 追記] 2.10.5 で ansible-galaxy collection list を普通に実行したところ、site-packages配下も検索してくれるようになっていました。 2.10.5 changelog から引用

Fix ansible-galaxy collection list to show collections in site-packages (https://github.com/ansible/ansible/issues/70147)


site-packages 配下の Collection も検索する方法

site-packages 方面を検索しない動作は、Porting Guide に Know Issue として掲載されてます。

docs.ansible.com

対処方法として、以下のようなコマンドが紹介されています。

COLLECTION_INSTALL=$(python -c 'import ansible, os.path ; print("%s/../ansible_collections" % os.path.dirname(ansible.__file__))') ansible-galaxy collection list -p "$COLLECTION_INSTALL"

試してみる

普通に ansible-galaxy collection list を実行した場合は、 ~/.ansible/collections/ansible_collections/ のみを検索します。

(a210) [root@centos7 work]# ansible-galaxy collection list
# /root/.ansible/collections/ansible_collections
Collection    Version
------------- -------
ansible.utils 1.0.1  

今度は、 Porting Guide にあった site-packages 配下の Collection も検索するコマンドを実行します。すると ~/.ansible/collections/ansible_collections/ に加えて、site-packages も検索します。

(a210) [root@centos7 work]# COLLECTION_INSTALL=$(python -c 'import ansible, os.path ; print("%s/../ansible_collections" % os.path.dirname(ansible.__file__))') ansible-galaxy collection list -p "$COLLECTION_INSTALL"

# /root/.ansible/collections/ansible_collections
Collection    Version
------------- -------
ansible.utils 1.0.1  

# /root/envs/a210/lib/python3.6/site-packages/ansible_collections
Collection                Version
------------------------- -------
amazon.aws                1.2.1  
ansible.netcommon         1.4.1  
ansible.posix             1.1.1  
ansible.windows           1.2.0  
arista.eos                1.2.0  
awx.awx                   14.1.0 
azure.azcollection        1.2.0  
check_point.mgmt          1.0.6  
chocolatey.chocolatey     1.0.2  
cisco.aci                 1.1.1  
cisco.asa                 1.0.4  
cisco.intersight          1.0.8  
cisco.ios                 1.2.1  
cisco.iosxr               1.2.0  
cisco.meraki              2.1.2  
cisco.mso                 1.0.1  
cisco.nxos                1.3.1  
cisco.ucs                 1.6.0  
cloudscale_ch.cloud       1.3.0  
community.aws             1.2.1  
community.azure           1.0.0  
community.crypto          1.3.0  
community.digitalocean    1.0.0  
community.docker          1.0.0  
community.general         1.3.0  
community.grafana         1.1.0  
community.hrobot          1.0.0  
community.kubernetes      1.1.1  
community.libvirt         1.0.0  
community.mongodb         1.1.1  
community.mysql           1.1.1  
community.network         1.3.0  
community.okd             1.0.1  
community.postgresql      1.0.0  
community.proxysql        1.0.0  
community.rabbitmq        1.0.1  
community.routeros        1.0.0  
community.skydive         1.0.0  
community.vmware          1.4.0  
community.windows         1.1.0  
community.zabbix          1.1.0  
containers.podman         1.3.2  
cyberark.conjur           1.0.7  
cyberark.pas              1.0.5  
dellemc.os10              1.0.2  
dellemc.os6               1.0.4  
dellemc.os9               1.0.3  
f5networks.f5_modules     1.6.0  
fortinet.fortimanager     1.0.5  
fortinet.fortios          1.0.15 
frr.frr                   1.0.3  
gluster.gluster           1.0.1  
google.cloud              1.0.1  
hetzner.hcloud            1.2.0  
ibm.qradar                1.0.3  
infinidat.infinibox       1.2.3  
junipernetworks.junos     1.2.1  
mellanox.onyx             1.0.0  
netapp.aws                20.9.0 
netapp.elementsw          20.11.0
netapp.ontap              20.11.0
netapp_eseries.santricity 1.1.0  
netbox.netbox             1.1.0  
ngine_io.cloudstack       1.1.0  
ngine_io.exoscale         1.0.0  
ngine_io.vultr            1.0.0  
openstack.cloud           1.2.0  
openvswitch.openvswitch   1.1.0  
ovirt.ovirt               1.2.3  
purestorage.flasharray    1.5.0  
purestorage.flashblade    1.4.0  
servicenow.servicenow     1.0.3  
splunk.es                 1.0.2  
theforeman.foreman        1.4.0  
vyos.vyos                 1.1.0  
wti.remote                1.0.1  
(a210) [root@centos7 work]# 

おわりに

機能として site-packeges を検索するようにする動きもあるようです。

github.com

[2021/01/23 追記] 2.10.5 で ansible-galaxy collection list を普通に実行したところ、site-packages配下も検索してくれるようになっていました。