Update bashrc with virtualenv info using Ansible

ansible, bash, virtualenvwrapper

Solution

Use Ansible `blockinfile` module to maintain the lines in the `.bashrc` or `/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 

Or better: create a `.bashrc.d` (or `.bash_profile.d`) directory, replace your `.bashrc` with a call to source all files in the directory:

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

and add the above commands as a separate file. Move other commands from the current `.bashrc` to another file and place it in `.bashrc.d` directory.

This you can easily achieve with `file` and `copy` modules in Ansible.

Problem

I have a python virtualenv running on a remote server. I am trying to update the bashrc of the remote server with the following info using Ansible. ``` export WORKON_HOME=~/TestEnvs source /usr/local/bin/virtualenvwrapper.sh workon my_virtual_env ``` Is there any way to accomplish this using Ansible?

Original source