如何使用ansible 2.3将所有ansible变量呈现给yml文件

时间:2017-06-16 12:24:39

标签: ansible

我将所有的ansible变量存储到yaml文件中(过滤掉那些以' ansible _'开头的文件):

- hosts: localhost
  tasks:
  - set_fact:
      all_vars: "{{all_vars | default({}) |combine({item.key: item.value})}}"
    when: "{{not item.key.startswith('ansible_')}}"
    with_dict: "{{vars}}"
  - copy:
      content: "{{ all_vars }}"
      dest: "/tmp/tmp.yml"

这是group_vars/all/defaults.yml

SOME_FACT1: "some-fact"
SOME_FACT2: "{{ SOME_FACT1 }}"
SOME_FACT3: "{{ SOME_FACT2 }}"

这与ansible 2.2完美配合。但是对于ansible 2.3(2.3.1.0),变量不会被渲染。 我得到这样的结果:

... "SOME_FACT1": "some-fact", "SOME_FACT3": "{{ SOME_FACT2 }}", "SOME_FACT2": "{{ SOME_FACT1 }}" ...

如何强制ansible 2.3渲染变量?

1 个答案:

答案 0 :(得分:1)

问题似乎是,ansible不会渲染变量和(我不知道为什么)all_vars。但是直接使用时,vars / all_vars中的任何变量都会正确呈现。

这样可行:

is_user_logged_in()

这个想法是:

  1. 创建一个文件,列出格式为

    的所有变量

    SOME_VAR:{{SOME_VAR | to_json}} ...

  2. 使用模板渲染该文件。
  3. 不太好,但确实有效。