Если еще в отчете - PullRequest
       17

Если еще в отчете

0 голосов
/ 29 января 2019

Мне нужна помощь с синтаксисом для печати отчета с несколькими условиями.В настоящее время кавычки для '{{inventory_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!' }}"

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Попробуйте это:

- 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('') представляется избыточной в этом случае.
  • убрал все элементы if / else и заменил троичным фильтром.Это просто принимает логическое значение и возвращает первую строку, если true, и вторую, если false
  • удаляет вложенные {{}}, которые являются недействительными.Если вы посмотрите на троичный фильтр, вы увидите, что внутри {{}} 'string' + variable_name объединяется буквенная строка с переменной
0 голосов
/ 29 января 2019

вместо этого вы можете использовать этот синтаксис:

"{% 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 %}"
...