如何从包含YAML的字符串中读取Ansible变量?

Rid*_*del 2 yaml ansible ansible-template

我有一个任务,该任务运行一个uri调用以获取包含YAML片段的JSON文件(从Rancher API获得)。我可以使用以下任务提取YAML片段

- name: generate_stack_call_body.yml read docker compose from catalog
  set_fact:
    docker_compose: '{{ template_detail|json_query(dc_query) }}'
Run Code Online (Sandbox Code Playgroud)

当我运行ansible调试策略时,表明我的docker_compose变量包含

(debug) p vars['docker_compose']
u"consul:\n  labels:\n    io.rancher.container.hostname_override: container_name\n    io.rancher.container.pull_image: always\n    io.rancher.container.hostname_override: container_name\n    io.rancher.scheduler.global: 'true'\n  stdin_open: true\n  image: registry.mycompany.com/my-project/consul-rancher:0.9.0\n  volumes:\n  - /data/consul:/consul/data\nload-balancer:\n  ports:\n  - 8500:8500\n  labels:\n    io.rancher.container.hostname_override: container_name\n    io.rancher.scheduler.global: 'true'\n  stdin_open: true\n  image: rancher/load-balancer-service\n  links:\n
  - consul:consul\n"
Run Code Online (Sandbox Code Playgroud)

在我看来,这是有效的YAML。

结果,我想应该可以将该值解释为有效的Ansible变量。

但是如何将其解释为变量?

以及以后如何将该变量放回字符串中?

tec*_*raf 5

但是如何将其解释为变量?

set_fact:
  docker_compose: '{{ template_detail | json_query(dc_query) | from_yaml }}'
Run Code Online (Sandbox Code Playgroud)

以及以后如何将该变量放回字符串中?

{{ docker_compose | to_yaml }}
Run Code Online (Sandbox Code Playgroud)

参考