Ansible WHEN - вернуть значение и вывести сообщение если число окажется больше переменной.

Доброго времени суток. Эксперементирую с Ansbile when. А если точнее то с sensors. Задача такая, если у sensors окажется температура N числа, то вернуть значение и вывести сообщение. Если не привышает значение, то ничего не выводить. Знаю, что для этого есть метрики, специально под это сделанные. Я просто эксперементирую с when в Ansible. Смотрю, что может.   

Вот мой код:


---
- name: Подлючение к серверам
  hosts: localhost
  tasks:

  - name:  Определяем IP адресс
    shell: ip a | grep eno1 | grep inet
    register: ip_result

  - name: Смотрим Sensors
    shell: sensors | grep 'temp'
    register: sensors_result

  - name: CPU
    community.general.telegram:
     token: '0000000000000000000000'
     api_args:
        chat_id: 0000000
        text: sensors_result.stdout 
        when:  int(sensors_result.stdout.lines) >= max_value
        vars:
        max_value: int == 150

 

 

Либо так:  

when: sensors_result | json_query('[].keys.keys(@)') | int >= 40

 

В любом случае Ansible сообщение выводит, но как понимаю не выполняет условие when и поэтому выводит сообщение 

1 ответ

Решение

Попробуй так:

Исходные данные:

coretemp-isa-0001
Adapter: ISA adapter
Package id 1:  +43.0°C  (high = +85.0°C, crit = +95.0°C)
Core 0:        +33.0°C  (high = +85.0°C, crit = +95.0°C)
Core 1:        +37.0°C  (high = +85.0°C, crit = +95.0°C)
Core 2:        +36.0°C  (high = +85.0°C, crit = +95.0°C)
Core 3:        +35.0°C  (high = +85.0°C, crit = +95.0°C)
Core 4:        +35.0°C  (high = +85.0°C, crit = +95.0°C)
Core 5:        +34.0°C  (high = +85.0°C, crit = +95.0°C)
Core 8:        +36.0°C  (high = +85.0°C, crit = +95.0°C)
Core 9:        +34.0°C  (high = +85.0°C, crit = +95.0°C)
Core 10:       +34.0°C  (high = +85.0°C, crit = +95.0°C)
Core 11:       +37.0°C  (high = +85.0°C, crit = +95.0°C)
Core 12:       +33.0°C  (high = +85.0°C, crit = +95.0°C)
Core 13:       +33.0°C  (high = +85.0°C, crit = +95.0°C)

power_meter-acpi-0
Adapter: ACPI interface
power1:        4.29 MW (interval =   1.00 s)

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +36.0°C  (high = +85.0°C, crit = +95.0°C)
Core 0:        +29.0°C  (high = +85.0°C, crit = +95.0°C)
Core 1:        +28.0°C  (high = +85.0°C, crit = +95.0°C)
Core 2:        +26.0°C  (high = +85.0°C, crit = +95.0°C)
Core 3:        +32.0°C  (high = +85.0°C, crit = +95.0°C)
Core 4:        +31.0°C  (high = +85.0°C, crit = +95.0°C)
Core 5:        +28.0°C  (high = +85.0°C, crit = +95.0°C)
Core 8:        +30.0°C  (high = +85.0°C, crit = +95.0°C)
Core 9:        +31.0°C  (high = +85.0°C, crit = +95.0°C)
Core 10:       +28.0°C  (high = +85.0°C, crit = +95.0°C)
Core 11:       +29.0°C  (high = +85.0°C, crit = +95.0°C)
Core 12:       +29.0°C  (high = +85.0°C, crit = +95.0°C)
Core 13:       +29.0°C  (high = +85.0°C, crit = +95.0°C)

Ansible playbook:

---
- hosts: all
  tasks:
  - name: Gathering sensors data
    shell: sensors | grep "Core 0:" | head -1 | awk '{print substr($3, 2, 4)}'
    register: sensors_result

  - name: CPU temperature
    ansible.builtin.debug:
      msg: "temperature is {{ sensors_result.stdout|int }}"
    when:  sensors_result.stdout|int > max_value|int
    vars:
      max_value: 50

 

Другие вопросы по тегам