带有神社模板的 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"
我正在测试我的第一个 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"