如何使用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 
Interesting Posts