Ansible условное выражение на основе стандартного вывода результата?

Как использовать оператор when на основе стандартного вывода register: result? Если существует стандартный вывод, я хочу, чтобы выполнялась какая-то команда, если стандартного вывода не существует, я хочу, чтобы выполнялась другая команда.

- hosts: myhosts
  tasks:
  - name: echo hello
    command: echo hello
    register: result
  - command: somecommand {{ result.stdout }}
    when: result|success
  - command: someothercommand
    when: result|failed

person ibash    schedule 01.10.2014    source источник


Ответы (2)


Попробуйте проверить, равно ли это пустой строке?

- hosts: myhosts
  tasks:
  - name: echo hello
    command: echo hello
    register: result
  - command: somecommand {{ result.stdout }}
    when: result.stdout != ""
  - command: someothercommand
    when: result.stdout == ""
person R. S.    schedule 01.10.2014

По состоянию на 2018 год рекомендуемый способ проверить, пуст ли вывод:

when: result.stdout | length > 0

Это питонический способ оценки истины, нулевые, пустые строки, пустые списки - все они оцениваются как ложные.

Другие старые альтернативы не рекомендуются или даже не работают:

  • result.stdout != "" не пройдет проверку ansible-lint!
  • result.stdout | bool НЕ будет работать, поскольку большинство строк будет оцениваться как False, только в тех случаях, когда он вернет true, это если stdout окажется одной из строк типа true, _5 _, ....
  • result.stdout раньше работало, но теперь триггеры:

[ПРЕДУПРЕЖДЕНИЕ ОБ УСТАРЕВАНИИ]: при оценке как простой переменной это поведение исчезнет, ​​и вам может потребоваться добавить | bool к выражению в будущем. Также см. Переключатель конфигурации CONDITIONAL_BARE_VARS. Эта функция будет удалена в версии 2.12. Предупреждения об устаревании можно отключить, установив deprecation_warnings = False в ansible.cfg.

person sorin    schedule 28.11.2019