Ansibleのpipモジュールを実行中にPATHに追加するにはどうすればよいですか?


17

Ansibleのpipモジュールを使用してpsycopg2をPython virtualenvにインストールしようとしていますが、正しくビルドするためにPATHにエントリを追加する必要があります(を含むディレクトリへのパスを知る必要がありますpg_config)。私environmentpipモジュールに渡すことができることがわかりますが、上書きするのではなく前に追加する方法がわかりませんPATH

ここでは、必要なディレクトリをパスの先頭に追加しようとしていますが、virtualenv PATHを上書きして失敗します:

- pip:
    name: psycopg2
    virtualenv: /path/to/my/venv
  environment:
    PATH: /usr/pgsql-9.3/bin:$PATH

回答:


33

Ansible 1.4以降(推奨)を使用している場合、リモート PATH env変数にアクセスできます。

- pip: name=psycopg2 virtualenv=/path/to/my/venv
  environment:
    PATH: /usr/pgsql-9.3/bin:{{ ansible_env.PATH }}

代わりに、(ターゲットサーバーの代わりに)Ansibleスクリプトを実行してPATHいるローカルクライアントの env変数に興味がある場合は、次のことを行います。

- pip: name=psycopg2 virtualenv=/path/to/my/venv
  environment:
    # This only makes sense if your client and server are homogeneous, that is,
    # they have the same PATHs.
    PATH: /usr/pgsql-9.3/bin:{{ lookup('env', 'PATH') }}

4
このansible_env.PATHオプションは私が必要としていたもので、完璧に機能しました。ありがとう!
コリンアレン14

1
これはサーバーではなくワークステーションのPATHを取得することに注意してください!
vdboor 14年

4
付加する必要がある場合は~/bin、を使用しますPATH: "{{ansible_env.HOME}}/bin:{{ansible_env.PATH}}"。代わりにを使用するPATH: "~/bin:{{ansible_env.PATH}}"と、一部のプログラム(Pythonなどshutil.which)はそのコンポーネントを使用できません。
Lekensteyn

3
またansible_env、環境ではなくSSHユーザーの環境を指すことに注意してくださいsudoansible_env.USERしたがってroot、非特権ユーザーではなく、
Lekensteyn
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.