2017-06-16 69 views
0

我存儲所有ansible變量YAML文件(過濾掉那些以「ansible_」)這個劇本:如何使所有ansible變量YML文件,ansible 2.3

- 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 }}" 

這與理論2.2完美結合。但是在2.3(2.3.1.0)中,變量不會被渲染。 我得到的結果是這樣的:

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

我怎麼能強迫ansible 2.3渲染變量?

+0

我編輯了問題以獲得更多清晰度 – Nathan

+0

'vars'是內部對象,並以特殊方式模板化(更好地說是_not_模板)。你爲什麼需要做這個任務? –

+0

我想執行一個可以訪問所有可變變量的python腳本(用對流層創建一個cloudformation文件)。 – Nathan

回答

0

問題似乎是,ansible不會渲染變量和(我不知道爲什麼)all_vars。但是,直接使用時,vars/all_vars中的任何變量均可正確呈現。

所以此工程:

- hosts: localhost 
    tasks: 
    - set_fact: 
      all_vars: "{{all_vars | default([]) |union([item.key + ':{{' + item.key + '|to_json}}'])}}" 
    when: "{{not item.key.startswith('ansible_')}}" 
    with_dict: "{{vars}}" 
    - copy: 
     content: "{{ all_vars | join('\n') }}" 
     dest: "/tmp/tmp1.yml" 
    - template: 
     src: "/tmp/tmp1.yml" 
     dest: "/tmp/tmp.yml" 

的理念是:

  1. 創建列出格式

    SOME_VAR所有變量的文件:{{SOME_VAR | to_json}} ...

  2. 使用模板呈現該文件。

不是很好,但它的工作原理。