在Ansible中执行任务期间是否可以设置可重用的 dynamic 环境变量? 像这样:
---
- name: grab secret from unexposed port 1234
raw: SECRET=$(curl --silent http://127.0.0.1:1234/secret)
- name: use secret for something
raw: echo $SECRET
答案 0 :(得分:1)
Ansible正在为每个单独的命令执行一个子Shell。您无法通过子Shell在父进程中设置变量。
请勿使用raw
。如果您绝对必须使用raw
,请尝试重新考虑。
如果仍然需要,它仍然会创建一个子外壳,并且不会执行您想要的操作。
您需要将值移至ansible父进程。
- command: curl --silent http://127.0.0.1:1234/secret
register: tmpvar
# pull just the bit you want - tmpvar has lots of extraneous stuff
- set_fact:
SECRET: "{{ tmpvar.stdout }}"
- shell: |
SECRET="{{ SECRET }}"
echo $SECRET