Question:
I can ssh to the remote host and do a source /home/username/.bashrc
– everything works fine.
However if I do:
1 2 3 4 |
- name: source bashrc sudo: no action: command source /home/username/.bashrc |
I get:
1 2 3 |
failed: [hostname] => {"cmd": ["source", "/home/username/.bashrc"], "failed": true, "rc": 2} msg: [Errno 2] No such file or directory |
I have no idea what I’m doing wrong…
Answer:
You have two options to use source with ansible. One is with the “shell:” command and /bin/sh (the ansible default). “source” is called “.” in /bin/sh. So your command would be:
1 2 3 4 |
- name: source bashrc sudo: no shell: . /home/username/.bashrc && [the actual command you want run] |
Note you have to run a command after sourcing .bashrc b/c each ssh session is distinct – every ansible command runs in a separate ssh transaction.
Your second option is to force Ansible shell to use bash and then you can use the “source” command:
1 2 3 4 5 6 |
- name: source bashrc sudo: no shell: source /home/username/.bashrc && [the actual command you want run] args: executable: /bin/bash |
Finally, I’ll note that you may want to actually source “/etc/profile” if you’re on Ubuntu or similar, which more completely simulates a local login.