gpt4 book ai didi

bash - Ansible - 在剧本执行期间更新环境变量

转载 作者:行者123 更新时间:2023-12-04 17:49:35 31 4
gpt4 key购买 nike

我想在 ansible 剧本执行期间更新主机上的环境变量(此剧本在本地执行),以便其余任务可以使用环境变量的更新值,但似乎这是不可能的。

让我举个例子说明我正在努力完成的事情:

# Environment variable before changing
- set_fact: env_before="{{ lookup('env', 'ENV_VAR') }}"

# A task that updates the env variable, I tried to make the needed configuration
# into ~/.bashrc, ~/.bash_profile, ~/.profile, /etc/environment

# Environment variable after changing
- set_fact: env_after="{{ lookup('env', 'ENV_VAR') }}"

# Unfortunately env_after = env_before

如果我重新执行剧本,但这次不更改环境变量,env_beforeenv_after 将具有环境变量的更新值

例子:

- 1st Execution:
- env_before = ENV_VAR = 10
- update_ENV_VAR to 20 and update ~/.bashrc, ~/.bash_profile, ~/.profile, /etc/environment files
with export ENV_VAR=20 etc.
- env_after = ENV_VAR = 20

- 2nd Execution (Do not make any changes just skip the update_ENV_var step
- env_before = ENV_VAR = 20 (new value from previous execution)

因此据我了解,ansible 仅在剧本的开头加载环境变量,并将这些值保留到结尾。而且似乎 ansible 任务没有更新/采购相应的 bash conf 文件。所以我找不到更新 ENV 变量的方法,它的新值将在以下任务中可用。

唯一可行的方法是在下一个任务中定义 environment: 关键字,但我想避免这种情况。这个新值将被许多任务使用,所以我正在寻找一种在 playbook 执行期间更新它的值的方法。

最佳答案

改变呈现给任务的环境的唯一方法是在任务或游戏中使用 environment 关键字。如果您正在使用 shell: 任务,您可以显式获取 ~/.bashrc 等,但这不是很漂亮。

如果您将 playbook 拆分为多个 play,并在导出其值后在 play 上设置 environment 键会怎么样?像这样:

- hosts: localhost
tasks:
- set_fact:
myvar: "some value"

- hosts: localhost
environment:
MYVAR: "{{ myvar }}"
tasks:
- shell: "echo $MYVAR"
register: res

- debug:
msg: "MYVAR = {{ res.stdout }}"

这将修改第二个游戏中所有任务的环境。

关于bash - Ansible - 在剧本执行期间更新环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46220468/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com