我想在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}
在我的终端中,它给出了一个空的结果。
任何帮助都将不胜感激。
答案 0 :(得分:9)
至少有两个问题:
您应该将copy_config.stdout
作为变量传递
- name: set config
shell: "echo $TEMP_CONFIG"
environment:
TEMP_CONFIG: "{{copy_config.stdout}}"
tags: something
您需要注册上述任务的结果,然后再次打印stdout
,所以:
- name: set config
shell: "echo $TEMP_CONFIG"
environment:
TEMP_CONFIG: "{{copy_config.stdout}}"
tags: something
register: shell_echo
- debug:
var: shell_echo.stdout
您永远无法以这种方式将变量传递给不相关的进程。因此,除非您在rc文件中注册结果(如{1},如果您使用Bash,则会在交互式登录中获取),否则其他shell进程将无法查看~/.bash_profile
的值。这就是系统的工作原理。