您好我正在尝试了解如何使用 Ansible 设置环境变量。
像这样一个简单的 shell 命令:
EXPORT LC_ALL=C
尝试作为 shell 命令并尝试使用环境模块时出错,但没有任何反应。
我错过了什么
原文由 Gleeb 发布,翻译遵循 CC BY-SA 4.0 许可协议
您好我正在尝试了解如何使用 Ansible 设置环境变量。
像这样一个简单的 shell 命令:
EXPORT LC_ALL=C
尝试作为 shell 命令并尝试使用环境模块时出错,但没有任何反应。
我错过了什么
原文由 Gleeb 发布,翻译遵循 CC BY-SA 4.0 许可协议
我没有足够的声誉发表评论,因此我添加了一个新答案。
Gasek 的回答非常正确。只有一件事:如果您要更新 .bash_profile
文件或 /etc/profile
,则这些更改仅在您进行新登录后才会反映出来。如果您想设置环境变量,然后在同一剧本的后续任务中使用它,请考虑在 .bashrc
文件中添加这些环境变量。
我猜这背后的原因是登录和非登录shell。
Ansible 在执行不同的任务时,从 .bashrc
文件而不是 .bash_profile
或 /etc/profile
文件中读取参数。
例如,如果我更新我的路径变量以将自定义二进制文件包含在相应用户的 .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";
这会起作用, 但如果我使用配置文件完成它, mysql -e "show databases"
会出错。
- 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";
_如果我们将所有这些任务都放在同一个剧本中_, 这个就行不通 了。
原文由 Gaurav Parashar 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.3k 阅读
4 回答4k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.5k 阅读✓ 已解决
1 回答2.3k 阅读✓ 已解决
2 回答795 阅读✓ 已解决
2 回答3.2k 阅读
有多种方法可以做到这一点,从你的问题来看,你还不清楚你需要什么。
1. 如果您只需要为每个任务定义环境变量,请执行以下操作:
TASK: [Echo my_env_var again] ************************************************* changed: [192.168.111.222] => {“changed”: true, “cmd”: “echo $MY_ENV_VARIABLE”, … “stdout”: “”}
”`
希望很快使用
environment
也可以在 游戏级别 上使用,而不仅仅是上面的任务级别。目前在 Ansible 的 GitHub 上有一个针对此功能的拉取请求: https ://github.com/ansible/ansible/pull/8651更新:它现在已于 2015 年 1 月 2 日合并。
2.如果您想要永久环境变量+系统范围/仅适用于某些用户
你应该看看你是如何在你的 Linux 发行版/shell 中做到这一点的,有很多地方可以做到这一点。例如,在 Ubuntu 中,您可以在文件中定义它,例如:
~/.profile
/etc/environment
/etc/profile.d
目录你会在这里找到关于它的 Ubuntu 文档: https ://help.ubuntu.com/community/EnvironmentVariables
毕竟在 ex 中设置环境变量。在 Ubuntu 中,您可以使用 Ansible 中的
lineinfile
模块并将所需的行添加到某个文件。请查阅您的操作系统文档以了解将其添加到何处以使其永久化。