在Ansible中从bash命令的命令输出设置环境变量

时间:2017-02-26 14:40:36

标签: bash environment-variables ansible

我想在Ansible中将shell命令的输出设置为环境变量。

我做了以下工作来实现它:

- name: Copy content of config.json into variable
  shell:  /bin/bash -l -c "cat /storage/config.json"
  register: copy_config
  tags: something

- name: set config
  shell: "echo $TEMP_CONFIG"
  environment:
    TEMP_CONFIG: "{{copy_config}}"
  tags: something

但是在ansible运行之后不知何故,当我运行以下命令时:

echo ${TEMP_CONFIG}

在我的终端中,它给出了一个空的结果。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:9)

至少有两个问题:

  1. 您应该将copy_config.stdout作为变量传递

    - name: set config
      shell: "echo $TEMP_CONFIG"
      environment:
        TEMP_CONFIG: "{{copy_config.stdout}}"
      tags: something
    
  2. 您需要注册上述任务的结果,然后再次打印stdout,所以:

    - name: set config
      shell: "echo $TEMP_CONFIG"
      environment:
        TEMP_CONFIG: "{{copy_config.stdout}}"
      tags: something
      register: shell_echo
    
    - debug:
        var: shell_echo.stdout
    
  3. 您永远无法以这种方式将变量传递给不相关的进程。因此,除非您在rc文件中注册结果(如{1},如果您使用Bash,则会在交互式登录中获取),否则其他shell进程将无法查看~/.bash_profile的值。这就是系统的工作原理。