如何使用Ansible设置Linux环境variables
嗨,我想找出如何设置Ansible环境variables。
这个简单的shell命令是这样的:
EXPORT LC_ALL=C
尝试作为shell命令,并尝试使用环境模块的错误,什么都没有发生。
我错过了什么
有多种方法可以做到这一点,从你的问题,也不清楚你需要什么。
1.如果您需要每个任务仅定义环境variables,则执行以下操作:
- hosts: dev tasks: - name: Echo my_env_var shell: "echo $MY_ENV_VARIABLE" environment: MY_ENV_VARIABLE: whatever_value - name: Echo my_env_var again shell: "echo $MY_ENV_VARIABLE"
请注意, MY_ENV_VARIABLE
仅可用于第一个任务, environment
不会在您的系统上永久设置它。
TASK: [Echo my_env_var] ******************************************************* changed: [192.168.111.222] => {"changed": true, "cmd": "echo $MY_ENV_VARIABLE", ... "stdout": "whatever_value"} TASK: [Echo my_env_var again] ************************************************* changed: [192.168.111.222] => {"changed": true, "cmd": "echo $MY_ENV_VARIABLE", ... "stdout": ""}
希望尽快使用environment
也可以在游戏级别 ,而不仅仅是上面的任务级别。 目前在Ansible的GitHub上有一个对此function的请求: https : //github.com/ansible/ansible/pull/8651
更新:现在已经合并到2015年1月2日。
2.如果你想永久环境variables+系统宽/只为特定用户
你应该看看你的Linux发行版/ shell是怎么做的,有多个地方。 例如在Ubuntu中,您可以在文件中定义该文件,例如:
-
~/.profile
-
/etc/environment
-
/etc/profile.d
目录 - …
你会在这里find关于它的Ubuntu文档: https : //help.ubuntu.com/community/EnvironmentVariables
毕竟在ex中设置环境variables。 Ubuntu,你可以使用lineinfile
模块,并添加所需的行到某些文件。 请咨询您的操作系统文档以了解将其添加到永久的位置。
我没有足够的声望评论,因此我添加了一个新的答案。 Gasek的回答是相当正确的。 只有一件事,如果你正在更新bash_profile文件或/ etc / profile,那么只有在你做了一个新的login之后,这些改变才会被反映出来。 在这种情况下,你设置envvariables,然后在同一个剧本中的后续任务中使用它。 考虑在.bashrc文件中添加这些环境variables。 我想这背后的原因是login和非loginshell。可以,执行不同的任务时,从.bashrc文件而不是bash_profile或/ etc / profile读取参数。
作为一个例子,如果我更新我的pathvariables,以包括在各自的用户.bash_profile文件中的自定义二进制文件,然后做了文件的来源。 接下来的任务不会识别我的命令。 但是,如果您在.bashrc文件中更新,该命令将工作
- name: Adding the path in the bashrc files lineinfile: dest=/root/.bashrc line='export PATH=$PATH:path-to-mysql/bin' insertafter='EOF' regexp='export PATH=\$PATH:path-to-mysql/bin' state=present - - name: Source the bashrc file shell: source /root/.bashrc - name: Start the mysql client shell: mysql -e "show databases";
这将工作 , 但我已经完成使用configuration文件。 mysql -e“显示数据库”会给出一个错误。
- name: Adding the path in the Profile files lineinfile: dest=/root/.bash_profile line='export PATH=$PATH:{{install_path}}/{{mysql_folder_name}}/bin' insertafter='EOF' regexp='export PATH=\$PATH:{{install_path}}/{{mysql_folder_name}}/bin' state=present - name: Source the bash_profile file shell: source /root/.bash_profile - name: Start the mysql client shell: mysql -e "show databases";
**如果我们将所有这些任务放在同一个剧本中,这个不会工作**
为了持久设置环境variables,您可以使用Ansible Galaxy上的现有angular色之一。 我build议franklinkim.environment 。
使用可靠的星系:
$ ansible-galaxy install franklinkim.environment
使用requirements.yml:
- src: franklinkim.environment
然后在你的手册中:
- hosts: all sudo: yes roles: - role: franklinkim.environment environment_config: NODE_ENV: staging DATABASE_NAME: staging