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 を新たに作成することができます。
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 ノードだけでなく、使用する分離ノードでコピーまたは複製する必要があります。
カスタムの 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 を選択してください。