4

Ansible で仮想環境を実行しようとしています。

常にエラーが発生しています。

コードは次のとおりです。

- name: Install virtualenv
  pip: name=virtualenv
  when: virtualenvexists.stat.exists != true

- name: Create virtualenv
  sudo: true
  command: virtualenv /home/vagrant/db/venv

- name: Activate
  sudo: yes
  sudo_user: vagrant
  command: /home/vagrant/db/venv/bin/source /home/vagrant/db/venv/bin/activate

エラーメッセージが表示されます:

{"cmd": "/home/vagrant/db/venv/bin/activate", "failed": true, "rc": 13} msg: [Errno 13] 権限が拒否されました

このコマンドを複数のユーザーとして実行しようとしましたが、仮想インスタンスをアクティブ化せずに仮想インスタンスからコマンドを自動的に実行する方法も見つけようとしていますが、うまくいきません。

Ansible の仮想環境内でコマンドを実行するにはどうすればよいですか?

私も運がないのでこれを試しました:

- name: ansible_python_interpreter
  set_fact:
    ansible_python_interpreter: /home/vagrant/db/venv/bin/python
4

2 に答える 2

9

ここには多くの問題があります。1 つ目は、仮想環境を次のように作成していることですroot

- name: Create virtualenv
  sudo: true
  command: virtualenv /home/vagrant/db/venv

しかし、ユーザーとしてアクセスしようとしていvagrantます:

- name: Activate
  sudo: yes
  sudo_user: vagrant
  command: /home/vagrant/db/venv/bin/source /home/vagrant/db/venv/bin/activate

sudo_user: vagrant両方のタスクが必要になる可能性があります。

第 2 に、このsourceコマンドはシェルの組み込みコマンドです/home/vagrant/db/venv/bin/source。したがって、そのコマンドは単に意味がありません。

最後に、たとえそれ理にかなっているとしても、実際には何の影響もありません。それはモジュールの環境を変更しますが、command後続のタスクには影響しません。これに対処する方法はいくつかあります。仮想環境にインストールされているコマンドを単に実行しようとしている場合は、それを直接実行できます。

command: /home/vagrant/db/venv/bin/somecommand

これにより、仮想環境にインストールされている Python のバージョンが正しく使用されます。または、すべてをシェル スクリプトに埋め込むこともできます。

shell:
  cmd: |
    source /home/vagrant/db/venv/bin/activate
    do_stuff_here

アップデート

「うまくいかない!」という方へ。コメンター、私はあなたに提示します...実行中の例です!

于 2015-10-29T13:21:44.657 に答える
0

モジュール~/.synapseを実行してにある仮想環境に synapse をインストールする例を次に示します。pip

- pip:
    name: 'https://github.com/matrix-org/synapse/tarball/master'
    virtualenv: ~/.synapse
    virtualenv_site_packages: yes
    virtualenv_python: python2.7

次に、新しく作成した仮想環境内でコマンドを実行します。引数を使用し、chdir必ず先頭にcommand:withを追加してくださいbin/

- command: bin/python -m synapse.app.homeserver --server-name {{ matrix_hostname }}
--config-path homeserver.yaml --generate-config --report-stats=yes
  args:
    chdir: ~/.synapse
    creates: homeserver.yaml
于 2016-12-06T21:48:24.223 に答える