てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] collection のアップデートやバージョン指定の再インストール方法

はじめに

Collection は ansible-galaxy collection install コマンドでインストールします。

ただし、現状はアップデートするための専用オプションはありません(issueはopen)。また、すでに同名の collection がインストールされている

この記事では -f オプションを使って強制的にアップデートや、バージョン指定してインストールする方法を紹介します。

  • 動作確認環境
    • ansible-base 2.10.1


■ collection のアップデートの例

現在のバージョン確認

現在は cisco.ios collection の v1.0.0 がインストールされています。ansible-galaxy collection list コマンドで確認します。

$ ansible-galaxy collection list

# /Users/sakana/.ansible/collections/ansible_collections
Collection        Version
----------------- -------
ansible.netcommon 1.2.1  
cisco.ios         1.0.0 

最新安定版へアップデート

本記事を執筆時の最新安定版は 1.0.3 なのでアップデートします。-f オプションを利用します。

$ ansible-galaxy collection install cisco.ios -f
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Installing 'cisco.ios:1.0.3' to '/Users/sakana/.ansible/collections/ansible_collections/cisco/ios'
Downloading https://galaxy.ansible.com/download/cisco-ios-1.0.3.tar.gz to /Users/sakana/.ansible/tmp/ansible-local-358124d4ssl1x/tmpy7pt2mfw
cisco.ios (1.0.3) was installed successfully
Skipping 'ansible.netcommon' as it is already installed

1.0.3 がインストールされました。依存している ansible.netcommon collection はそのままです。

なお、-f オプションをつけないと、すでにインストールされている旨のメッセージが表示されるだけです。

$ ansible-galaxy collection install cisco.ios           
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Skipping 'cisco.ios' as it is already installed

事後確認

再度 ansible-galaxy collection list コマンドで確認します。

$ ansible-galaxy collection list                

# /Users/sakana/.ansible/collections/ansible_collections
Collection        Version
----------------- -------
ansible.netcommon 1.2.1  
cisco.ios         1.0.3  


■ バージョンを指定して再インストールする例

pip の場合はバージョン指定するとそのバージョンで再インストールされますが、collection の場合は再インストールできません。

この場合も先程と同様に -f オプション を利用します。

事前確認

cisco.ios の 1.0.3 がインストールされている状態です。

$ ansible-galaxy collection list                

# /Users/sakana/.ansible/collections/ansible_collections
Collection        Version
----------------- -------
ansible.netcommon 1.2.1  
cisco.ios         1.0.3  

バージョン指定再インストール

cisco.ios を 1.0.0 にします。

$ ansible-galaxy collection install cisco.ios:1.0.0 -f
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Installing 'cisco.ios:1.0.0' to '/Users/sakana/.ansible/collections/ansible_collections/cisco/ios'
Downloading https://galaxy.ansible.com/download/cisco-ios-1.0.0.tar.gz to /Users/sakana/.ansible/tmp/ansible-local-35887zb347nj6/tmpk_1j7zvp
cisco.ios (1.0.0) was installed successfully
Skipping 'ansible.netcommon' as it is already installed

なお、インストールされていない状態の場合は、-f オプションは不要です。

参考: https://docs.ansible.com/ansible/latest/user_guide/collections_using.html#installing-an-older-version-of-a-collection

事後確認

$ ansible-galaxy collection list                        

# /Users/sakana/.ansible/collections/ansible_collections
Collection        Version
----------------- -------
ansible.netcommon 1.2.1  
cisco.ios         1.0.0  

1.0.0 になりました。


おわりに

今後はもしかしたらアップデート専用オプションができるかもしれません。