Как я могу отобразить сообщение типа «диск не существует», если диск sdb отсутствует на сервере

Как я могу отобразить сообщение типа «диск не существует», если диск sdb отсутствует на сервере.

Я пробовал ниже вещи, но это не сработало.

  - debug:
     msg: "disk does not exist"
    when: ansible_devices != "sdb"

  - debug:
     msg: "disk does not exist"
    when: item.key != "sdb"
    with_dict: "{{ ansible_devices }}"

  - debug:
     msg: "disk does not exist"
    when: ansible_devices.sdb == "false"

Спасибо,


person pratkul007    schedule 11.12.2019    source источник
comment
Для записи. Этот вопрос не не по теме. Это a specific programming problem.   -  person Vladimir Botka    schedule 11.12.2019


Ответы (1)


ansible_devices — это словарь устройств. Есть еще варианты, как узнать существует устройство или нет.

1) Создадим список устройств и выполним поиск по списку устройств. Например

- hosts: localhost
  gather_facts: true
  tasks:
    - debug:
        msg: Disk nvme0n1 exists.
      when: "'nvme0n1' in ansible_devices.keys()|list"
    - debug:
        msg: Disk sdb does not exist.
      when: "'sdb' not in ansible_devices.keys()|list"

дает

"msg": "Disk nvme0n1 exists."
"msg": "Disk sdb does not exist."

2) Также можно проверить, определена ли переменная или нет. Например, эта игра дает тот же результат

    - debug:
        msg: Disk nvme0n1 exists.
      when: ansible_devices.nvme0n1 is defined
    - debug:
        msg: Disk sdb does not exist.
      when: ansible_devices.sdb is undefined

3) Также можно использовать тот факт, что пустая переменная оценивается как False. Например, эта игра дает тот же результат

    - debug:
        msg: Disk nvme0n1 exists.
      when: ansible_devices.nvme0n1|default('')
    - debug:
        msg: Disk sdb does not exist.
      when: not ansible_devices.sdb|default('')
person Vladimir Botka    schedule 11.12.2019
comment
Спасибо Владимир.. попробовал второй вариант и сработало - person pratkul007; 11.12.2019
comment
просто интересно, как увидеть, что возвращает переменная возвращаемого значения? как и в приведенном выше случае, мы можем проверить 1) 'ansible_devices.sdb', определен ли он или не определен 2) для ansible_os_family == 'Debian' . здесь мы проверяем с помощью ==, но откуда можно увидеть, нужно ли использовать определенное или неопределенное или == или что-то еще? - person pratkul007; 11.12.2019