【问题标题】:Get the exported environment variable in ansible在ansible中获取导出的环境变量
【发布时间】:2020-02-20 07:53:22
【问题描述】:

我有目标机器中存在的 env 文件,它包含一定数量的带有导出命令的变量(导出命令本身存在于文件中)。

export AB_HOME=/et/dev/abinitio/abinitio-V3
export PATH=${AB_HOME}/bin:${PATH}

我已经使用下面的剧本执行了 env 文件,我尝试读取使用 output1 导出的变量,这是我剧本中的一个寄存器变量。但我可以看到我的寄存器变量是空的。有什么方法可以获取全部导出的变量。我不知道文件中存在的变量名称,所以我无法使用 ECHO 命令。

- hosts: dev
  gather_facts: false
  tasks:   
    - name: get the environment variables
      shell: "su <id> & . ./.env"
      args:
        chdir: /path to the file
      register: output1

    - debug: var=output1.stdout_lines 

【问题讨论】:

  • 您可能想要检查退出状态而不是 stdout_lines:docs.ansible.com/ansible/latest/reference_appendices/…
  • shell: "su &lt;id&gt; &amp; . ./.env" 有效吗?运行 playbook 后,您可以看到从 bash 导出的变量(不是使用 ansible)吗?我无法在我的 ansible 2.0.0.2 安装中获取文件。列出的解决方案都不适合我:stackoverflow.com/questions/22256884/…
  • 我无法得到您的要求,我手动厌倦了 . ./.env 命令在遥控器中,我可以看到导出的变量

标签: ansible environment-variables


【解决方案1】:

export 的标准输出未返回,这就是您看不到任何输出的原因。您可能需要检查rc 代码:

- debug: var=output1.rc

要让 ansible 打印之前导出的变量,只需运行 exportexport -p 并以与以前相同的方式打印 stdout_lines。

tasks:   
    - name: get the environment variables
      shell: "export -p"
      register: output

    - debug: var=output.stdout_lines

【讨论】:

  • 我可以找到 rc 输出为零
  • 您可以使用该值来检查是否成功完成。如果您的目标是打印导出的变量,您可以运行export,注册输出,然后调试output.std_lines
  • 是的,我的目标是打印导出的变量,但问题是 output.std_lines 在文件执行后没有任何内容。
  • 如果你运行export x=somevalue,你将不会得到任何标准输出。答案中对此进行了解释。这两行 export AB_HOME=/et/dev/abinitio/abinitio-V3 export PATH=${AB_HOME}/bin:${PATH} 不会写在标准输出上,这就是为什么 output1.stdout_lines 是空的。
  • 那么在environment关键字中怎么看或者怎么使用,output1.rc也是空的。我无法使用 echo,因为我不知道文件中的所有变量是什么,因为它可能会从一个系统更改为另一个系统。
猜你喜欢
  • 2020-01-06
  • 2016-07-14
  • 2011-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多