使用Ansible使用virtualenv信息更新bashrc

Pat*_*ttu 3 bash virtualenvwrapper ansible ansible-playbook

我有一个在远程服务器上运行的python virtualenv.我正在尝试使用Ansible使用以下信息更新远程服务器的bashrc.

export WORKON_HOME=~/TestEnvs
source /usr/local/bin/virtualenvwrapper.sh
workon my_virtual_env
Run Code Online (Sandbox Code Playgroud)

有没有办法用Ansible实现这个目标?

tec*_*raf 19

  1. 使用Ansible blockinfile模块来维护.bashrc或中的行/etc/bashrc:

    - name: Ensure virtualenv is sourced from the .bashrc
      blockinfile:
        dest: "{{ ansible_env.HOME }}/.bashrc"
        block: |
          export WORKON_HOME=~/TestEnvs
          source /usr/local/bin/virtualenvwrapper.sh
          workon my_virtual_env
        marker: '# {mark} ANSIBLE MANAGED BLOCK - virtualenv'
        insertbefore: BOF
        create: yes 
    
    Run Code Online (Sandbox Code Playgroud)
  2. 或者更好:创建一个.bashrc.d(或.bash_profile.d)目录,.bashrc用一个调用来替换源目录中的所有文件:

    while read filename
    do
      source "$filename"
    done < <(find -L ~/.bashrc.d -type f)
    
    Run Code Online (Sandbox Code Playgroud)

    并将上述命令添加为单独的文件.将其他命令从当前.bashrc文件移动到另一个文件并将其放在.bashrc.d目录中.

    这可以通过Ansible 轻松实现filecopy模块.