Есть ли лучший способ написать эти задачи ansible с помощью jinja?

#ansible

#ansible

Вопрос:

У меня есть эта задача в моем учебнике:

 - name: service check
  block:
    - name: service check | check port 843 is connected.
      shell: |
        netstat -n | grep 843 | grep ESTABLISHED |wc -l
      register:  check_843_connection_count
    - debug: msg="{{inventory_hostname}} (PASS) {{check_843_connection_count.stdout}} connections to port 843"
      when: check_843_connection_count.stdout | int > 0
    - debug: msg="{{inventory_hostname}} (FAIL) {{check_843_connection_count.stdout}} connections to port 843"
      when: check_843_connection_count.stdout | int <= 0
  when:
    - stype is defined and stype == "foo"
  tags: mmr_check_843_estiablished
 

Я думаю, что, вероятно, есть способ объединить две debug задачи. Может быть, что-то вроде:

 - debug: msg="{{inventory_hostname}} {{check_843_connection_count | int >0 ? '(PASS)' : '(FAIL)'}}  {{check_843_connection_count.stdout}} connections to port 843"
 

Но, очевидно, что в приведенном выше есть синтаксические ошибки.

Ответ №1:

Jinja является языком шаблонов Python, поэтому встроенный if будет писать точно так же, как в Python.
Имейте в виду, что Ansible написан на Python, так что это также имеет смысл.

Итак, вы могли бы написать эту задачу отладки:

 - debug: 
    msg: >-
      {{ inventory_hostname }} 
      ({{ 'PASS' if check_843_connection_count.stdout | int > 0 else 'FAIL' }}) 
      {{ check_843_connection_count.stdout }} 
      connections to port 843