13

PythonBrew をインストールするためのプレイブックがあります。これを行うには、シェル環境を変更する必要があります。Ansible のシェル ステップは永続的ではないためexport PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc;、PythonBrew 関連の各コマンドの先頭に追加する必要があります。

    - name: Install python binary
      shell: export PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc; pythonbrew install ${python.version}
        executable=/bin/bash

    - name: Switch to python version
      shell: export PYTHONBREW_ROOT=${pythonbrew.root}; source ${pythonbrew.root}/etc/bashrc; pythonbrew switch ${python.version}
        executable=/bin/bash

その冗長性をなくしたい。Ansible ディスカッション グループで、environmentキーワードを紹介されました。ドキュメントの例を見てきましたが、クリックしていません。私には、環境キーワードは他の変数と大差ないように見えます。

私は他の例を探しましたが、この非常に単純な例しか見つけることができませんでした。

environment上記で提供したコードサンプルを使用して、キーワードが Ansible でどのように機能するかを誰かが示すことができますか?

4

2 に答える 2

16

それがあなたのニーズに合うかどうかはわかりませんが、これは私がこれを見る方法です:

- hosts: all
  vars:
    env:
      PYTHONBREW_ROOT: "{{ pythonbrew.root }}"
  tasks:  
    - name: Install python binary
      shell: pythonbrew install {{ python.version }} executable=/bin/bash
      environment: env

    - name: Switch to python version
      shell: pythonbrew switch {{ python.version }} executable=/bin/bash
      environment: env

という名前の変数を設定しenv、両方のシェル コマンドで環境として再利用するだけです。このようにして、シェル コマンドに PYTHONBREW_ROOT パスが設定されます。

于 2013-12-13T08:25:16.563 に答える
0

非常によく似た問題があります。私は、Python virtualenv 内のものを実行できるようにしたいと思います (もちろん、それが私のために設定されていることを確認した後)。

これまでに環境の前提条件を実行した 1 つの方法を次に示します。基本的に、.bashrc に行を追加 (および必要に応じて削除) する必要がありました。

  tasks:
    - name: "Enable virtualenv in .bashrc"
      lineinfile: dest=.bashrc
                  line="source {{ PROJECT_HOME }}/venv/bin/activate"

    # Put tasks that rely on this environmental precondition here (?)

    - name: "Disable virtualenv in .bashrc"
      lineinfile: dest=.bashrc
                  line="source {{ PROJECT_HOME }}/venv/bin/activate"
                  state=absent

私が「やり方が間違っている」かどうかはわかりませんが、それを理解するか、誰かがそれを改善する方法を教えてくれるまで、これはうまくいくと思います.

于 2013-12-13T18:59:33.097 に答える