带有神社模板的 Ansible。有条件的如果

Ansible with jinja template. Conditional if

我正在测试我的第一个 jinja2 模板,但我不明白为什么它是 returns 5: 5 而不是 "VarVoid": "5"

---
- hosts: localhost
  user: user1
  become_user: yes
  gather_facts: False
  tasks:
    - name: Prueba de volcado msg con lineas
      debug:
         msg: "OK"
    - name: Prueba de volcado var con lineas
      debug:
         var: VarVoid
    - name: definiendo la extructura
      set_fact:
        salida: >-
           {%- set results = [] -%}
           {%- if (VarVoid == '') -%}
                {%- set result = { "msg": "VarVoid se encuentra Vacia" } -%}
           {%- endif -%}
           {%- if (VarVoid != '') -%}
                {%- set result = { 'var': VarVoid } -%}
           {%- endif -%}
           {{ result }}

    - name: Con plantilla.
      debug: "{{ salida }}"

当我启动时: ansible-playbook test-valuenull.yml -e VarVoid= return:

TASK [definiendo la extructura] *****************************************************************************************************************************************************************************
ok: [localhost]
[WARNING]: Using a variable for a task's 'args' is unsafe in some situations (see https://docs.ansible.com/ansible/devel/reference_appendices/faq.html#argsplat-unsafe)

TASK [Con plantilla.] ***************************************************************************************************************************************************************************************
ok: [localhost] => {
   "msg": "VarVoid se encuentra Vacia"

但如果我启动 ansible-playbook test-valuenull.yml -e VarVoid=5 return:

TASK [definiendo la extructura] *****************************************************************************************************************************************************************************
ok: [localhost]
[WARNING]: Using a variable for a task's 'args' is unsafe in some situations (see https://docs.ansible.com/ansible/devel/reference_appendices/faq.html#argsplat-unsafe)

TASK [Con plantilla.] ***************************************************************************************************************************************************************************************
ok: [localhost] => {
    "5": "5"
}

而不是"VarVoid": "5"

如何让它不解释 arg 变量? 我在哪里可以找到了解如何在 ansible 中使用 jinja2 的文档。 我在 https://docs.ansible.com/ 找到的内容非常基础

使用ternary 过滤器。例如,剧本

shell> cat playbook.yml
- hosts: localhost
  tasks:
    - set_fact:
        salida: "{{ (VarVoid|default('')|length > 0)|
                    ternary({'var': VarVoid},
                            {'msg': 'VarVoid se encuentra Vacia'}) }}"
    - debug:
        var: salida

给予

shell> ansible-playbook playbook.yml -e "VarVoid=5"

    "salida": {
        "var": "5"
    }
shell> ansible-playbook playbook.yml

    "salida": {
        "msg": "VarVoid se encuentra Vacia"
    }

问题1。

没有 free-form 个 debug. Without a parameter 默认消息是“Hello world!”。

shell> cat playbook.yml
- hosts: localhost
  tasks:
    - debug: "{{ salida }}"

给予

shell> ansible-playbook playbook.yml -e "salida=5"

    "msg": "Hello world!"

问题 2.

词典

result = { 'var': VarVoid }

无法给出预期

"VarVoid": "5"