[英]Ansible - Update env variables during playbook execution
我想在ansible剧本执行期间更新主机上的环境变量(此剧本在本地执行),因此其余任务可以使用env变量的更新值,但这似乎是不可能的。
让我举一个例子,说明我要完成的工作:
# 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变量,则env_before和env_after将具有env变量的更新值 。
例:
- 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仅在剧本的开头加载env变量,并将这些值一直保留到结尾。 而且似乎烦人的任务没有更新/采购相应的bash conf文件。 因此,我找不到一种更新ENV变量的方法,该变量的新值将在以下任务中可用。
唯一可行的方法是在下一个任务中定义environment:关键字,但我想避免这种情况。 这个新值将被许多任务使用,因此我正在寻找一种方法来在执行剧本时更新其值。
更改呈现给任务的环境的唯一方法是在任务或剧本上使用environment
关键字。 如果您使用的是shell:
任务,则可以显式地获取~/.bashrc
等源,但这不是很漂亮。
如果您将剧本拆分为多个剧本,并在获得其价值后在剧本上设置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 }}"
这将修改第二场比赛中所有任务的环境。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.