てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] Ansible 2.9 で インストールしたcollection のバージョン一覧を表示する(jq利用)

はじめに

Ansible 2.9 には ansible-galaxy collection list のような、コレクションの一覧を表示するコマンドがありません。

おそらく、各コレクションの MANIFEST.jsonversion を見るしかないかと思います。

  • 例: ansible.utils 2.4.0 の MANIFEST.json
{
 "collection_info": {
  "namespace": "ansible",
  "name": "utils",
  "version": "2.4.0",
...(略)...
}

いくつもコレクションをインストールしている状態ですと、ひとつずつ見るのも手間です。

jq を使ってそれらしく一覧を表示できるコマンドのサンプルをメモしておきます。

動作確認環境: ansible 2.9.25

コマンド

jq '.collection_info | .namespace + "." + .name + ": " + .version' ~/.ansible/collections/ansible_collections/*/*/MANIFEST.json 

コレクションのインストール先は、デフォルトの ~/.ansible/collections/ を想定しています。

実行例

$ jq '.collection_info | .namespace + "." + .name + ": " + .version' ~/.ansible/collections/ansible_collections/*/*/MANIFEST.json 
"ansible.netcommon: 2.4.0"
"ansible.utils: 2.4.0"
"cisco.ios: 2.4.0"
"netbox.netbox: 3.1.1"
"yamaha_network.rtx: 1.0.1"

表示形式はお好みで・・

補足

ansible-config dumpCOLLECTIONS_PATHS の設定拾って、そのディレクトリを対象にするのがもっといいやり方かなと思います。今回は手抜きです。

$ ansible-config dump | grep COLLECTIONS_PATHS
COLLECTIONS_PATHS(default) = ['/home/codespace/.ansible/collections', '/usr/share/ansible/collections']