繁体   English   中英

Ansible-在Playbook执行期间更新环境变量

[英]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_beforeenv_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM