Hi I am trying to find out how to set environment variable with Ansible.
something that a simple shell command like this:
EXPORT LC_ALL=C
tried as shell command and got an error tried using the environment module and nothing happend.
what am I missing
I didnot have enough reputation to comment and hence am adding a new answer. Gasek answer is quite correct. Just one thing, if you are updating the bash_profile file or the /etc/profile, those changes would be reflected only after you do a new login. In case, you set the env variable and then want to use it in the subsequent tasks in the same playbook. Consider adding those environment variables in the .bashrc file. I guess the reason behind this is the login and the non-login shells .Ansible, while executing different tasks reads the parameters from a .bashrc file instead of the bash_profile or the /etc/profile.
As an example, if i updated my path variable to include the custom binary in the .bash_profile file of the respective user and then did a source of the file. The next subsequent tasks wont recognize my command . However if you update in the .bashrc file, the command would work
This would work, but had i done using profile files . the mysql -e"show databases" would have given an error.
**This one wont work **, if we have all these tasks in the same playbook
Here's a quick local task to set key/values on
/etc/environment
(which is system-wide, all users):and the vars for it:
and, yes, if you ssh out and back in,
env
shows the new environment variables.For persistently setting environment variables, you can use one of the existing roles over at Ansible Galaxy. I recommend franklinkim.environment.
Using ansible-galaxy:
Using requirements.yml:
Then in your playbook:
There are multiple ways to do this and from your question it's nor clear what you need.
1. If you need environment variable to be defined PER TASK ONLY, you do this:
Note that
MY_ENV_VARIABLE
is available ONLY for the first task,environment
does not set it permanently on your system.Hopefully soon using
environment
will also be possible on play level, not only task level as above. There's currently a pull request open for this feature on Ansible's GitHub: https://github.com/ansible/ansible/pull/8651UPDATE: It's now merged as of Jan 2, 2015.
2. If you want permanent environment variable + system wide / only for certain user
You should look into how you do it in your Linux distribution / shell, there are multiple places for that. For example in Ubuntu you define that in files like for example:
~/.profile
/etc/environment
/etc/profile.d
directoryYou will find Ubuntu docs about it here: https://help.ubuntu.com/community/EnvironmentVariables
After all for setting environment variable in ex. Ubuntu you can just use
lineinfile
module from Ansible and add desired line to certain file. Consult your OS docs to know where to add it to make it permanent.