Синтаксис для проверки, если var

У меня есть playbook, чтобы настроить все буквы дисков на моем сервере, и мне нужна задача, чтобы проверить, есть ли в списке дополнительная буква var. Например, мне нужно проверить, находится ли «F» в данных json ниже. Не могли бы вы помочь мне с лучшим синтаксисом?

Спасибо

 {
        "disks_drives_letter": [
            [
                "C"
            ],
            [
                "D"
            ],
            [
                "E"
            ],
            []
        ]
    }

Что ты уже испробовал?

β.εηοιτ.βε 19.02.2023 21:58
"{{ disks_drives_letter|flatten }}" дает вам простой список.
Vladimir Botka 20.02.2023 03:50
Руководство для начинающих по веб-разработке на React.js
Руководство для начинающих по веб-разработке на React.js
Веб-разработка - это захватывающая и постоянно меняющаяся область, которая постоянно развивается благодаря новым технологиям и тенденциям. Одним из...
Разница между Angular и React
Разница между Angular и React
React и AngularJS - это два самых популярных фреймворка для веб-разработки. Оба фреймворка имеют свои уникальные особенности и преимущества, которые...
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Инструменты для веб-скрапинга с открытым исходным кодом: Python Developer Toolkit
Веб-скрейпинг, как мы все знаем, это дисциплина, которая развивается с течением времени. Появляются все более сложные средства борьбы с ботами, а...
Калькулятор CGPA 12 для семестра
Калькулятор CGPA 12 для семестра
Чтобы запустить этот код и рассчитать CGPA, необходимо сохранить код как HTML-файл, а затем открыть его в веб-браузере. Для этого выполните следующие...
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
ONLBest Online HTML CSS JAVASCRIPT Training In INDIA 2023
О тренинге HTML JavaScript :HTML (язык гипертекстовой разметки) и CSS (каскадные таблицы стилей) - две основные технологии для создания веб-страниц....
Как собрать/развернуть часть вашего приложения Angular
Как собрать/развернуть часть вашего приложения Angular
Вам когда-нибудь требовалось собрать/развернуть только часть вашего приложения Angular или, возможно, скрыть некоторые маршруты в определенных средах?
1
2
59
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать модуль установки, чтобы получить информацию о вашем хосте, такую ​​как диски. Для получения дополнительной информации о модуле установки https://docs.ansible.com/ansible/latest/collections/ansible/builtin/setup_module.html

Пример игровой книги:

- hosts: localhost
  tasks:
  gather_facts: false
  vars:
    my_disk_drives: ['sda', 'sdb']
  tasks:
    - name: Collect host hardware information
      setup:
        gather_subset:
          - hardware

    - name: Output if disk exist
      debug:
        msg: "{{ item }} exists" 
      loop: "{{ my_disk_drives }}"
      when: item in hostvars[inventory_hostname].ansible_devices.keys() | list

    - name: Output if disks does not exist
      debug:
        msg: "{{ item }} does not exist" 
      loop: "{{ my_disk_drives }}"
      when: not item in hostvars[inventory_hostname].ansible_devices.keys() | list

Выход:

TASK [Output if disk exist] 
ok: [localhost] => (item=sda) => {
    "msg": "sda exists"
}
skipping: [localhost] => (item=sdb) 

TASK [Output if disks does not exist] 
skipping: [localhost] => (item=sda) 
ok: [localhost] => (item=sdb) => {
    "msg": "sdb does not exist"
}

Ответ принят как подходящий

Используйте фильтры пересечения и различия и объявите списки

  my_disks_exist: "{{ ansible_devices.keys()|intersect(my_disks) }}"
  my_disks_not_exist: "{{ my_disks|difference(my_disks_exist) }}"

Example of a complete playbook for testing

- hosts: localhost

  vars:

    my_disks: [sda, sdb, sdc]
    my_disks_exist: "{{ ansible_devices.keys()|intersect(my_disks) }}"
    my_disks_not_exist: "{{ my_disks|difference(my_disks_exist) }}"
    

  tasks:

    - setup:
        gather_subset: devices
    - debug:
        var: ansible_devices.keys()
    - debug:
        var: my_disks_exist
    - debug:
        var: my_disks_not_exist

| Flatten помогите мне спасибо @vladimir-botka

- name: Get all disks letter from the disks infos
      set_fact:
        disks_drives_letters: "{{ win_disk_facts | json_query(query) | flatten  }}"     
    
- name: Check if disk_letter is used on server    fail:
    msg: "The disk letter already exist on the VM"   when:  '"{{ drive_letter }}" in "{{ disks_drives_letters}}"'

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