てくなべ (tekunabe)

ansible / network automation / 学習メモ

[ansible] 2.10 では pip uninstall ansible でアインストールしても ansible 基本機能と標準モジュールは残る

はじめに

Ansible 2.10 から、Collection による モジュール類の配布が本格化し、2.9 までの多くのモジュール類は Collection に移行しました。

参考: Ansible 2.10 と Collection

これに関連して、Python のパッケージとしては ansible と、ansible-base に別れました。

ansible-baseは、Ansible の基本機能と、標準モジュールです。 ansible は、ansible-base と、Collection に移行した元標準モジュールのセットです。

pip install ansible では、ansibleansible-base がインストールされます。

注意が必要なのは、pip uninstall ansible すると ansible がアンインストールされ、 ansible-base は残ります。

つまり、Ansible の基本機能と、標準モジュールは残ります。これらもアンインストールするには、ansible-base もアインストールする必要があります。

このあたりのパッケージに役割を理解しておかないと、少し混乱してしまうかもしれません。

この記事では、実際のログを用いて簡単に解説します。

事前状態

ansible がインストールされてない状態からはじめます。

(ansibletest) sakana@mbp16 blog % ansible  
zsh: command not found: ansible
(ansibletest) sakana@mbp16 blog % pip freeze

何も表示されません。

ansible のインストール

pip install ansible でインストールします。

(ansibletest) sakana@mbp16 blog % pip install ansible
Collecting ansible
  Using cached ansible-2.10.1.tar.gz (25.9 MB)
Collecting ansible-base<2.11,>=2.10.2
  Using cached ansible-base-2.10.2.tar.gz (6.0 MB)
Collecting jinja2
  Using cached Jinja2-2.11.2-py2.py3-none-any.whl (125 kB)
...(略)...
Successfully installed MarkupSafe-1.1.1 PyYAML-5.3.1 ansible-2.10.1 ansible-base-2.10.2 cffi-1.14.3 cryptography-3.2 jinja2-2.11.2 packaging-20.4 pycparser-2.20 pyparsing-2.4.7 six-1.15.0
WARNING: You are using pip version 20.1.1; however, version 20.2.4 is available.
You should consider upgrading via the '/Users/sakana/envs/ansibletest/bin/python3 -m pip install --upgrade pip' command.

ansibleansible-base の両方がインストールされたことが分かります。

(ansibletest) sakana@mbp16 blog % pip freeze
ansible==2.10.1
ansible-base==2.10.2
cffi==1.14.3
cryptography==3.2
Jinja2==2.11.2
MarkupSafe==1.1.1
packaging==20.4
pycparser==2.20
pyparsing==2.4.7
PyYAML==5.3.1
six==1.15.0

ansible のインストール後確認

バージョンを確認します。ansible --version では ansible-base としてのバージョンが表示されます。(ここでは 2.10.2)

(ansibletest) sakana@mbp16 blog % ansible --version
ansible 2.10.2
  config file = /Users/sakana/.ansible.cfg
  configured module search path = ['/Users/sakana/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible
  executable location = /Users/sakana/envs/ansibletest/bin/ansible
  python version = 3.8.5 (default, Jul 21 2020, 10:48:26) [Clang 11.0.3 (clang-1103.0.32.62)]

which でパスを確認すると、作業用の venv 配下であることが分かります。

(ansibletest) sakana@mbp16 blog % which ansible
/Users/sakana/envs/ansibletest/bin/ansible

ansible のアンインストール

pip uninstall ansible でアンインストールします。

(ansibletest) sakana@mbp16 blog % pip uninstall ansible
Found existing installation: ansible 2.10.1
Uninstalling ansible-2.10.1:
  Would remove:
    /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible-2.10.1-py3.8.egg-info
    /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible_collections/amazon/aws/.github/BOTMETA.yml
    /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible_collections/amazon/aws/.github/settings.yml
    /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible_collections/amazon/aws/.gitignore
    ....(略)...
    /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible_collections/wti/remote/plugins/modules/cpm_temp_info.py
    /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible_collections/wti/remote/plugins/modules/cpm_time_config.py
    /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible_collections/wti/remote/plugins/modules/cpm_time_info.py
    /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible_collections/wti/remote/plugins/modules/cpm_user.py
Proceed (y/n)? y
  Successfully uninstalled ansible-2.10.1
(ansibletest) sakana@mbp16 blog % 

Collection に移行した元標準モジュールがある lib/python3.8/site-packages/ansible_collections/ が消えます。

Ansible 本体機能と標準モジュールがある、lib/python3.8/site-packages/ansible/ は残ります。

ansible のアンインストール後確認

pip freeze で確認すると ansible は消えましたが、ansible-base は残っています。

(ansibletest) sakana@mbp16 blog % pip freeze
ansible-base==2.10.2
cffi==1.14.3
cryptography==3.2
Jinja2==2.11.2
MarkupSafe==1.1.1
packaging==20.4
pycparser==2.20
pyparsing==2.4.7
PyYAML==5.3.1
six==1.15.0

ansible などのコマンドは引き続き使えます。この点が少々混乱するポイントかも知れません。

(ansibletest) sakana@mbp16 blog % ansible --version
ansible 2.10.2
  config file = /Users/sakana/.ansible.cfg
  configured module search path = ['/Users/sakana/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible
  executable location = /Users/sakana/envs/ansibletest/bin/ansible
  python version = 3.8.5 (default, Jul 21 2020, 10:48:26) [Clang 11.0.3 (clang-1103.0.32.62)]

Ansible 2.10 においても標準モジュールである debug モジュールも使えます。

(ansibletest) sakana@mbp16 blog % ansible -i localhost, all -m debug -a msg=pukupuku
localhost | SUCCESS => {
    "msg": "pukupuku"
}

ansible-base のアンインストール

一応、 ansible-base のアンインストールもためします。

(ansibletest) sakana@mbp16 blog % pip uninstall ansible-base
Found existing installation: ansible-base 2.10.2
Uninstalling ansible-base-2.10.2:
  Would remove:
    /Users/sakana/envs/ansibletest/bin/ansible
    /Users/sakana/envs/ansibletest/bin/ansible-config
    /Users/sakana/envs/ansibletest/bin/ansible-connection
    /Users/sakana/envs/ansibletest/bin/ansible-console
    /Users/sakana/envs/ansibletest/bin/ansible-doc
    /Users/sakana/envs/ansibletest/bin/ansible-galaxy
    /Users/sakana/envs/ansibletest/bin/ansible-inventory
    /Users/sakana/envs/ansibletest/bin/ansible-playbook
    /Users/sakana/envs/ansibletest/bin/ansible-pull
    /Users/sakana/envs/ansibletest/bin/ansible-test
    /Users/sakana/envs/ansibletest/bin/ansible-vault
    /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible/*
    /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible_base-2.10.2-py3.8.egg-info
    /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible_test/*
  Would not remove (might be manually added):
    /Users/sakana/envs/ansibletest/lib/python3.8/site-packages/ansible_test/_data/injector/ansible-inventory
Proceed (y/n)? y
  Successfully uninstalled ansible-base-2.10.2

ansible-base のアンインストール後確認

いよいよ ansible コマンドもなくなり、pip freeze で確認しても ansible-base がでなくなりました。

(ansibletest) sakana@mbp16 blog % ansible --version
zsh: command not found: ansible
(ansibletest) sakana@mbp16 blog % pip freeze
cffi==1.14.3
cryptography==3.2
Jinja2==2.11.2
MarkupSafe==1.1.1
packaging==20.4
pycparser==2.20
pyparsing==2.4.7
PyYAML==5.3.1
six==1.15.0

おわりに

pip unsintall ansible しても ansible-base が残るため、Ansible の基本機能、標準モジュールは使えることを確認しました。