我希望在ansible playbook执行期间更新主机上的环境变量(此playbook在本地执行),以便其余任务可以使用更新后的env变量值,但似乎不可能实现这一点。
让我举个例子来说明我想要完成的目标:
如果我重新执行playbook,但这次不更改环境变量,则env_before和env_after将具有更新的环境变量值。
示例:
据我所知,Ansible仅在playbook启动时加载环境变量,并保留这些值直到结束。看起来ansible任务没有更新/获取相应的bash配置文件。因此,我无法找到一种方法来更新一个ENV变量,使其新值可用于以下任务。
唯一可能的方法是在接下来的任务中定义“environment:”关键字,但我想避免这样做。这个新值将被许多任务使用,所以我正在寻找一种在playbook执行期间更新其值的方法。
让我举个例子来说明我想要完成的目标:
# 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
如果我重新执行playbook,但这次不更改环境变量,则env_before和env_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仅在playbook启动时加载环境变量,并保留这些值直到结束。看起来ansible任务没有更新/获取相应的bash配置文件。因此,我无法找到一种方法来更新一个ENV变量,使其新值可用于以下任务。
唯一可能的方法是在接下来的任务中定义“environment:”关键字,但我想避免这样做。这个新值将被许多任务使用,所以我正在寻找一种在playbook执行期间更新其值的方法。