Ansible で 'No module named 'ansible'' エラーを解決する方法

AnsibleBeginner
オンラインで実践に進む

はじめに

Ansible は、システム管理者や開発者が構成管理、アプリケーションのデプロイ、オーケストレーションなどの複雑なタスクを簡素化するために使用する強力な自動化ツールです。しかし、Ansible を使用する際に、「No module named 'ansible'」エラーに遭遇することがあり、これによりツールを効果的に使用できなくなる場合があります。

この実験(Lab)では、この一般的なエラーを理解し、トラブルシューティングを行い、解決するプロセスを案内します。このチュートリアルを終える頃には、適切に機能する Ansible 環境が整い、将来的にこの問題を回避する方法を理解できるようになります。

「No module named 'ansible'」エラーの診断

「No module named 'ansible'」エラーは、Python が検索パス内で Ansible モジュールを見つけられない場合に発生します。何が起きているのか、そしてどのように問題を診断するのかを理解しましょう。

Python モジュールのインポートについて

Ansible コマンドを実行すると、Python は Ansible モジュールをインポートしようとします。Python がこのモジュールを見つけられない場合、次のエラーが生成されます。

ImportError: No module named 'ansible'

これは、以下の理由で発生します。

  1. Ansible がインストールされていない
  2. Ansible がインストールされているが、現在の Python 環境にない
  3. 異なる Python バージョン間で競合がある

現在のインストール状況の確認

Ansible がシステムにインストールされているかどうかを確認しましょう。

ansible --version

Ansible がインストールされていない場合、次のようなエラーが表示されます。

Command 'ansible' not found, but can be installed with:
sudo apt install ansible

また、使用されている Python のバージョンも確認しましょう。

python3 --version

次のような出力が表示されるはずです。

Python 3.10.12

次に、Ansible モジュールが Python 環境に存在するかどうかを確認します。

python3 -c "import ansible; print('Ansible is installed')"

トラブルシューティングを行っているエラーメッセージが表示される場合:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named 'ansible'

これは、Python が Ansible モジュールを見つけられないことを確認します。

パッケージの状態の検証

Ansible パッケージがインストール済みのパッケージとしてリストされているかどうかを確認しましょう。

pip3 list | grep ansible

何も返されない場合、Ansible は pip 経由でインストールされていません。システムパッケージマネージャー経由でインストールされているかどうかも確認しましょう。

dpkg -l | grep ansible

これで問題が診断できたので、次のステップで Ansible を正しくインストールに進むことができます。

Ansible の正しいインストール

問題を診断したので、Ansible を正しくインストールしましょう。システムパッケージマネージャーを使用する方法と、pip を使用する方法の 2 つを検討します。

方法 1:APT を使用して Ansible をインストールする(初心者向け推奨)

Ubuntu に Ansible をインストールする最も簡単な方法は、APT パッケージマネージャーを使用することです。

  1. まず、パッケージリストを更新します。
sudo apt update
  1. Ansible をインストールします。
sudo apt install -y ansible

このコマンドは、Ansible とそのすべての依存関係をインストールします。インストールが完了したら、Ansible が正しくインストールされていることを確認します。

ansible --version

次のような出力が表示されるはずです。

ansible [core 2.12.0]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/labex/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  ansible collection location = /home/labex/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.10.12 (main, Jun 11 2023, 05:26:28) [GCC 11.4.0]
  jinja version = 3.0.3
  libyaml = True

これにより、Ansible がインストールされていること、および Python のバージョンやモジュールの場所などの重要な詳細が示されます。

方法 2:PIP を使用して Ansible をインストールする

特定のバージョンの Ansible が必要な場合や、仮想環境内にインストールする場合は、pip を使用できます。

pip3 install ansible

インストールを確認します。

ansible --version

エラーが解決されたかテストする

Ansible がインストールされたので、Ansible モジュールを直接インポートして、エラーが解決されたことを確認しましょう。

python3 -c "import ansible; print('Ansible is installed successfully')"

次のように表示されるはずです。

Ansible is installed successfully

これは、Python が Ansible モジュールを見つけてインポートできるようになったことを示し、元のエラーが解決されたことを意味します。

Ansible がインストールされている場所の理解

Ansible がインストールされている場所をよりよく理解するために、以下を実行します。

which ansible

これにより、Ansible 実行可能ファイルのパスが表示されます。通常は次のようになります。

/usr/bin/ansible

そして、Python モジュールの場所を確認するには、以下を実行します。

python3 -c "import ansible; print(ansible.__file__)"

これは次のようなものを表示します。

/usr/lib/python3/dist-packages/ansible/__init__.py

これで Ansible が正常にインストールされたので、すべてが正しく動作することを確認するために、基本的な構成を作成に進みましょう。

基本的な Ansible 設定の作成

Ansible が正しくインストールされたので、すべてが正常に動作していることを確認するために、基本的な設定を作成しましょう。シンプルなインベントリファイルと、Ansible インストールをテストするためのプレイブックを作成します。

インベントリファイルの作成

インベントリファイルは、Ansible にどのホストを管理するかを指示します。テストのために、localhost をターゲットとするシンプルなインベントリファイルを作成します。

  1. プロジェクトディレクトリに移動します。
cd ~/project
  1. Ansible ファイル用の新しいディレクトリを作成します。
mkdir ansible-test
cd ansible-test
  1. インベントリファイルを作成します。
echo "localhost ansible_connection=local" > inventory

このインベントリファイルは、ローカル接続(SSH なし)を使用してローカルマシンを管理することを指定します。

シンプルなプレイブックの作成

次に、Ansible インストールをテストするためのシンプルなプレイブックを作成しましょう。

  1. test-playbook.yml という名前のファイルを作成します。
touch test-playbook.yml
  1. エディタでファイルを開き、次の内容を追加します。
---
- name: Test Ansible Installation
  hosts: localhost
  gather_facts: no

  tasks:
    - name: Print a message
      debug:
        msg: "Ansible is working correctly!"

    - name: Get Python version
      command: python3 --version
      register: python_version

    - name: Display Python version
      debug:
        var: python_version.stdout

このプレイブックには、3 つのタスクが含まれています。

  • Ansible が動作していることを確認するためのメッセージの出力
  • Python バージョンを取得するためのコマンドの実行
  • Python バージョンの表示

プレイブックの実行

次に、プレイブックを実行して Ansible インストールをテストしましょう。

ansible-playbook -i inventory test-playbook.yml

次のような出力が表示されるはずです。

PLAY [Test Ansible Installation] *******************************

TASK [Print a message] *****************************************
ok: [localhost] => {
    "msg": "Ansible is working correctly!"
}

TASK [Get Python version] **************************************
changed: [localhost]

TASK [Display Python version] **********************************
ok: [localhost] => {
    "python_version.stdout": "Python 3.10.12"
}

PLAY RECAP ****************************************************
localhost                  : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

これにより、以下が確認されます。

  1. Ansible が正しく動作している
  2. 「No module named ansible」エラーが解決された
  3. Ansible プレイブックを正常に実行できる

Ansible 設定の理解

Ansible は、その動作を決定するために設定ファイルを使用します。Ansible が設定を探している場所を見てみましょう。

ansible-config dump --only-changed

これにより、デフォルト値と異なる設定設定が表示されます。

有効な設定を表示するには、以下を実行します。

ansible --version

これにより、設定ファイルの場所、モジュール検索パス、およびその他の重要な詳細が表示されます。

おめでとうございます!次のことに成功しました。

  1. 「No module named ansible」エラーの診断
  2. Ansible の正しいインストール
  3. 基本的な Ansible プレイブックの作成と実行

これにより、エラーが解決され、Ansible 環境が正常に動作していることが確認されます。

まとめ

この実験(Lab)では、Ansible を使用する際に一般的な問題である「No module named 'ansible'」エラーの診断と解決方法を学びました。以下の貴重なスキルを習得しました。

  • Python モジュールインポートが Ansible でどのように機能するかを理解する
  • Ansible のインストールに関する問題を診断する
  • さまざまな方法を使用して Ansible を正しくインストールする
  • 基本的な Ansible 設定を作成する
  • シンプルなプレイブックで Ansible 環境を検証する

これらのスキルは、より複雑な自動化シナリオで Ansible を使用するための強固な基盤を提供します。Ansible が正しく機能するためには、正しい Python 環境を維持することが重要であることを覚えておいてください。これで、一般的なインストールに関する問題をトラブルシューティングし、解決するための知識が得られました。

今後、同様のモジュール関連のエラーが発生した場合は、同じ診断アプローチを適用して、根本原因を効率的に特定し、解決することができます。