我想为具有多个条件的打印陈述的语法提供一些帮助。当前,'{{inventory_hostname}}'
的引号引起错误,如果我删除引号,则剧本会运行,但会列出文本stock_hostname而不是变量。我想知道如何获取要打印的变量,以及if else语句中的语法是否正确。
- debug:
msg: "{{ 'LTE status on '{{inventory_hostname}}' is good to go!' if output.stdout | join('') is search('Selected = LTE') else 'LTE status on '{{inventory_hostname}}' is not operational!' }}"
答案 0 :(得分:2)
您可以改用以下语法:
"{% if test_var == true %} LTE status on '{{ inventory_hostname }}' is good to go!{% else %} LTE status on '{{inventory_hostname}}' is not operational!{% endif %}"
请参阅下面的完整工作示例,我正在使用布尔值test_var
来控制输出:
---
- hosts: localhost
gather_facts: false
vars:
test_var: true
tasks:
- debug:
msg: "{% if test_var == true %} LTE status on '{{ inventory_hostname }}' is good to go!{% else %} LTE status on '{{inventory_hostname}}' is not operational!{% endif %}"
输出:
[http_offline@greenhat-29 tests]$ ansible-playbook test.yml
PLAY [localhost] *******************************************************************************************************************************************************************************************************
TASK [debug] ***********************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": " LTE status on 'localhost' is good to go!"
}
PLAY RECAP *************************************************************************************************************************************************************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0
[http_offline@greenhat-29 tests]$
编辑:
使用多行变量更新了PB:
---
- hosts: localhost
gather_facts: false
vars:
test_var: ['text line 1', 'texttttttttttt Selected = LTE more text', 'text line 3']
tasks:
- debug:
msg: "{% if test_var | join('') is search('Selected = LTE') %} LTE status on '{{ inventory_hostname }}' is good to go!{% else %} LTE status on '{{inventory_hostname}}' is not operational!{% endif %}"
答案 1 :(得分:2)
尝试一下:
- debug:
msg: "{{ output.stdout is search('Selected = LTE') | ternary('LTE status on ' + inventory_hostname + ' is good to go!', 'LTE status on ' + inventory_hostname + ' is not operational!') }}"
您最好简化自己的位置,并尽可能坚持使用纯Jinja2过滤器。希望这会更具可读性。
join('')
。连接过滤器用于将数组连接为单个字符串。 stdout
是一个字符串。 stdout_lines
是基于数组的输出版本,因此,join('')
在这种情况下显得多余。 {{}}
。如果您查看三元过滤器,您会发现{{}}
'string' + variable_name
内部结合了文字字符串和变量