在任务内创建可重用的动态环境变量

时间:2018-06-21 11:32:12

标签: bash ansible

在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

1 个答案:

答案 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