cchurch.virtualenv
VirtualEnv
Pythonの仮想環境を設定し、要件をインストール/更新します。Ansible 2.8以降が必要です。
Ansibleバージョン< 2.8は、バージョン0.7.0からサポートが終了しました。
要件
become
が使用される場合(つまり、virtualenv_user
がansible_user
またはansible_ssh_user
と異なる場合)、become_method
(例:sudo
)をサポートするために必要なOSパッケージを、このロールを使用する前にインストールする必要があります。
ansible_user
、ansible_ssh_user
、またはansible_become_user
のいずれもroot
でない場合、virtualenv
コマンドを提供するために必要なOSパッケージを、他の方法でインストールしておく必要があります。
ロール変数
このロールをカスタマイズするために次の変数を定義できます:
virtualenv_path
: 仮想環境を作成/更新する対象ディレクトリ(必須)。virtualenv_user
: 仮想環境を作成/更新するために使用するユーザー;デフォルトは現在のユーザー(すなわち、ansible_user
またはansible_ssh_user
)。virtualenv_default_os_packages
: 仮想環境を作成するために必要なOSパッケージ。異なるansible_pkg_mgr
を使用するシステムでない限り、このオプションを変更する必要はありません;デフォルトは{ apt: ['python-dev', 'python-virtualenv'], yum: ['python-devel', 'python-virtualenv'] }
。virtualenv_os_packages
: 仮想環境をサポートするためにインストールするOSパッケージ;デフォルトは{}
。virtualenv_easy_install_packages
:easy_install
を使用してグローバルにインストールするPythonパッケージ;デフォルトは[]
。virtualenv_easy_install_executable
: グローバルなeasy_install
パッケージに使用する別の実行可能ファイル;デフォルトはパス内にあるeasy_install
コマンドを使用します。virtualenv_global_packages
:pip
を使用してグローバルにインストールするPythonパッケージ;デフォルトは[]
。virtualenv_pip_executable
: グローバルなpip
パッケージに使用する別の実行可能ファイル;デフォルトはパス内にあるpip
コマンドを使用します。virtualenv_command
: 仮想環境を作成するために使用する別の実行可能ファイル;デフォルトはパス内にあるvirtualenv
コマンドを使用します。virtualenv_python
: 仮想環境を作成するために使用するPythonのバージョン;デフォルトはAnsibleが使用するPythonインタプリタを使用します。virtualenv_default_package
: 仮想環境を作成するときにインストールするデフォルトのパッケージ;デフォルトはpip
。virtualenv_site_packages
: 仮想環境がグローバルなサイトパッケージを使用するかどうかを示すブール値;デフォルトはno
。virtualenv_pre_packages
: 要件ファイルの前に仮想環境内にpip
でインストールするPythonパッケージ;デフォルトは[]
。このオプションは、もはや必要のないパッケージを仮想環境から削除するためにも使用できます。virtualenv_requirements
: 仮想環境内にpip
でインストールする要件ファイルのリスト;デフォルトは[]
。これらのパスは、リモートシステム上にすでに存在している必要があります。virtualenv_post_packages
: 要件ファイルの後に仮想環境内にpip
でインストールするPythonパッケージ;デフォルトは[]
。このオプションは、もはや必要のないパッケージを仮想環境から削除するためにも使用できます。virtualenv_recreate
: 仮想環境を削除して再作成するかどうかを示すブール値;デフォルトはno
。
次の変数はプレイやロールの呼び出しのために定義できます(ただし、インベントリグループやホスト変数としては定義できません):
virtualenv_notify_on_updated
: 仮想環境が作成または更新されたときに通知するためのハンドラー名。デフォルトは"virtualenv updated"
;カスタムハンドラーが"virtualenv updated"
をリッスンすることを一般的に推奨しますが、通知名を変更するのはお勧めしません。
パッケージリストの各項目は、パッケージ名だけの文字列またはname
、state
、またはversion
キーを持つハッシュとして指定できます。例:
- package1
- name: package2
state: absent
- name: package3
version: 1.2
OSパッケージリストは、パッケージマネージャーでインデックスされたハッシュです。例:
apt:
- package1
- name: package2-dev
state: absent
yum:
- package1
- name: package2-devel
state: absent
foo_pkg_mgr:
- foo-package1
このロールは、virtualenv_user
で指定された別のユーザーとして仮想環境を作成でき、ホスト/プレイ/タスクに指定されたbecome_method
を使用します。OSやグローバルパッケージは、ansible_user
、ansible_ssh_user
、またはansible_become_user
がroot
の場合にのみインストールされます。以下に、ユーザーの組み合わせとそれに期待される結果を示します:
ansible_user=root
: OSおよびグローバルパッケージがインストールされ;仮想環境はroot
が所有します。ansible_user=root virtualenv_user=other
: OSおよびグローバルパッケージがインストールされ;become
が使用され;仮想環境はother
が所有します。ansible_user=other
: OSおよびグローバルパッケージはインストールされず;仮想環境はother
が所有します。ansible_user=other virtualenv_user=another
: OSおよびグローバルパッケージはインストールされず;become
が使用され;仮想環境はanother
が所有します。この組み合わせは、other
がanother
に昇格できない場合に失敗する可能性があります。以下のAnsible 2.1の注意事項がこの場合にも適用されることがあります。ansible_user=other ansible_become_user=root
: OSおよびグローバルパッケージがインストールされ;become
が使用され;仮想環境はother
が所有します。ansible_user=other ansible_become_user=root virtualenv_user=another
: OSおよびグローバルパッケージがインストールされ;become
が使用され;仮想環境はanother
が所有します。ansible.cfg
にallow_world_readable_tmpfiles
を定義する必要がある場合があります(これにより、警告が表示されるがエラーにはなりません)または、一つの特権のないユーザーが別の特権のないユーザーになるための別のアプローチを使用する必要があります。
例プレイブック
次の例のプレイブックは、システム依存関係としてlibjpeg
をインストールし、仮想環境を作成または更新し、特定のパッケージをインストールし、要件をインストールし、不要になった古いパッケージを削除します:
- hosts: all
roles:
- name: cchurch.virtualenv
vars:
virtualenv_path: ~/env
virtualenv_os_packages:
apt: [libjpeg-dev]
yum: [libjpeg-devel]
virtualenv_pre_packages:
- name: Django
version: 1.11.26
- Pillow
virtualenv_requirements:
- ~/src/requirements.txt
virtualenv_post_packages:
- name: PIL
state: absent
handlers:
- name: カスタム仮想環境ハンドラー
debug:
msg: "{{ virtualenv_path }}の仮想環境が更新されました。"
listen: virtualenv updated
ライセンス
BSD
著者情報
Chris Church (cchurch)
ansible-galaxy install cchurch.virtualenv