【问题标题】:Best way to always run ansible inside a virtualenv on remote machines?始终在远程机器上的 virtualenv 中运行 ansible 的最佳方法?
【发布时间】:2013-12-13 20:08:09
【问题描述】:

有没有更好的方法在远程机器上的 virtualenv 中运行 ansible?

到目前为止,我可以看到的方式是手动修改 .bashrc 文件或使用 ansible 本身。

例如:

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

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

    # Optionally, disable this later on
    - name: "Disable virtualenv in .bashrc"
      lineinfile: dest=.bashrc
                  line="source {{ PROJECT_HOME }}/venv/bin/activate"
                  state=absent

TODO:检查是否可以使用 ssh 授权密钥完成:http://binblog.info/2008/10/20/openssh-going-flexible-with-forced-commands/

【问题讨论】:

    标签: ansible


    【解决方案1】:

    这是一种为整个游戏启用 virtualenv 的方法;此示例在一次播放中构建 virtualenv,然后在下一次开始使用它。

    不确定它有多干净,但它可以工作。我只是在 mikepurvis 在这里提到的基础上建立一点。

    ---
    # Build virtualenv
    - hosts: all
    vars:
      PROJECT_HOME: "/tmp/my_test_home"
      ansible_python_interpreter: "/usr/local/bin/python"
    tasks:
      - name: "Create virtualenv"
        shell: virtualenv "{{ PROJECT_HOME }}/venv"
               creates="{{ PROJECT_HOME }}/venv/bin/activate"
    
      - name: "Copy virtualenv wrapper file"
        synchronize: src=pyvenv
                     dest="{{ PROJECT_HOME }}/venv/bin/pyvenv"
    
    # Use virtualenv
    - hosts: all
    vars:
      PROJECT_HOME: "/tmp/my_test_home"
      ansible_python_interpreter: "/tmp/my_test_home/venv/bin/pyvenv"
    tasks:
      - name: "Guard code, so we are more certain we are in a virtualenv"
        shell: echo $VIRTUAL_ENV
        register: command_result
        failed_when: command_result.stdout == ""
    

    pyenv 包装文件:

    #!/bin/bash
    source "$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/activate"
    python $@
    

    【讨论】:

    • 不错的解决方案 - 大概是“真正的”任务在保护代码任务之后。我认为最后的“pyenv 包装文件”部分名称有错字 - 应该是 pyvenv 以匹配 Ansible 任务。此外,该脚本中未转义的嵌套 shell 引号看起来有点奇怪,但只要它有效......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-22
    • 1970-01-01
    相关资源
    最近更新 更多