Documentation

7. Ansible Tower での virtualenv の使用

Ansible Tower 3.0 以降では virtualenv を使用します。Virtualenv は、分離された Python 環境を構築して依存関係での競合やバージョンの相違による問題を回避します。Virtualenv は、特定のバージョンの Python に必要な実行ファイルや依存関係すべてを含むフォルダーを作成するだけで機能します。Ansible Tower は、インストール時に 2 つの virtualenv を作成します。1 つは、Tower の実行に、もう 1 つは Ansible の実行に使用します。これにより、Tower は安定した環境で実行でき、Playbook の実行に必要なモジュールを Ansible Python 環境に追加または更新することが可能になります。virtualenv の詳しい情報は Python Guide の「Virtual Environments」および「Python virtualenv」プロジェクト自体を参照してください。

デフォルトでは、virtualenv はファイルシステムの /var/lib/awx/venv/ansible に配置されています。

さらに Tower は、(EC2、OpenStack、Azure など) 各種クラウドプロバイダーとの統合ポイントとなるように、さまざまなサードパーティーのライブラリー/SDK サポートをこの virtualenv に事前インストールします。以下に詳しく説明されているように、この virtualenv に、定期的に別の SDK サポートを追加することもできます。

注釈

仮想環境にパッケージをインストールする前に umask 0022 を実行することが強く推奨されます。パーミッションを適切に設定しておかないと、Tower サービスに失敗します。以下は例となります。

# source /var/lib/awx/venv/ansible/bin/activate
# umask 0022
# pip install --upgrade pywinrm
# deactivate

以下の説明にあるように、Ansible の実行に Tower が使用する virtualenv にモジュールを追加するだけでなく、virtualenvs を新たに作成することができます。

7.1. 新しいカスタムの virtualenv の準備

Tower では、別の virtualenv を指定して、ジョブテンプレートの実行で使用することができます。カスタムの virtualenv を選択するには、先に /var/lib/awx/venv/ に virtualenv を作成してください。

$ sudo virtualenv /var/lib/awx/venv/my-custom-venv

新たに作成した virtualenv では、正しく Playbook を実行するにはベースの依存関係がいくつか必要です (Tower は、Playbook のアーティファクトのプレースホルダーとして memcached を使用します)。

$ sudo /var/lib/awx/venv/my-custom-venv/bin/pip install python-memcached psutil

ここから、Ansible 自体の per-virtualenv バージョンなど、必要とされる Python の依存関係を追加でインストールできます。

$ sudo /var/lib/awx/venv/my-custom-venv/bin/pip install -U "ansible == X.Y.Z"

または、Tower のベースインストールに含まれていない、サードパーティーの SDK を別途追加することができます。

$ sudo /var/lib/awx/venv/my-custom-venv/bin/pip install -U python-digitalocean

コピーする場合は、pip freeze を使用してTower のデフォルトの virtualenv に含まれるライブラリーを見つけ出すことができます。

$ sudo /var/lib/awx/venv/ansible/bin/pip freeze

Tower のクラスターインストールでは、同じ virtualenv が全ローカルファイルシステムの /var/lib/awx/venv/ に存在することを確認する必要があります。カスタムの virtualenv は、分離インスタンスでサポートされます。カスタムの仮想環境を使用する場合は、Tower ノードだけでなく、使用する分離ノードでコピーまたは複製する必要があります。

7.2. カスタムの virtualenv の割り当て

カスタムの virtualenv を作成したら、組織、プロジェクトおよびジョブテンプレートレベルでこの virtualenv を割り当てることができます。

PATCH https://awx-host.example.org/api/v2/organizations/N/
PATCH https://awx-host.example.org/api/v2/projects/N/
PATCH https://awx-host.example.org/api/v2/job_templates/N/

Content-Type: application/json
{
        'custom_virtualenv': '/var/lib/awx/venv/my-custom-venv'
}

/api/v2/config/ への HTTP GET 要求では、インストール済みの virtualenvs の検出一覧が返されます。

{
        "custom_virtualenvs": [
                "/var/lib/awx/venv/my-custom-venv",
                "/var/lib/awx/venv/my-other-custom-venv",
        ],
...
}

Ansible Tower ユーザーインターフェースの対象の編集画面から、組織、プロジェクトおよびジョブテンプレートに割り当てる仮想環境を指定することも可能です。以下の例で示されるように、Ansible 環境 ドロップダウンメニューから virtualenv を選択してください。

_images/organizations-ansible-env-virtualenv-list.png