Рейтинг:2

Не удалось получить UUID раздела подкачки после его создания с помощью модуля Parted ansible.

флаг cn

Мне нужно создать новый раздел на новом диске на виртуальной машине. Я использую модуль parted для создания раздела. В будущей задаче (в том же плейбуке) мне нужно использовать UUID раздела устройства (не UUID раздела, а UUID устройства раздела, присутствующий, например, в /dev/disks/by-uuid/)

Проблема в том, что: я не нахожу способ получить UUID раздела в задаче после того, как модуль parted заархивировал задание. Я уверен, что модуль parted работает нормально, потому что раздел существует после запуска.

Давайте посмотрим, что я пробовал:

Создание раздела с помощью модуля parted
Перезапустите факты с модулем настройки (с фильтрацией и без нее на ansible_devices), чтобы использовать ansible_devices.sdX.partitions.sdXY.uuid --> return void
Используйте значение blkid -s UUID -o /dev/sdXY через модуль оболочки --> return void
Используйте команду ls -l /dev/disk/by-uuid/ | grep sdXY | awk '{print $9}' через модуль оболочки --> все равно возвращает void

Ужасный факт заключается в том, что если я запускаю ту же задачу (например, 2, 3 или 4) в другой книге, я могу получить результаты. Но в той же пьесе модуля parted: я не могу.

Вот мой полный сборник игр:

---
- хозяева: все
  стать: да
  собрать_факты: "да"
  задачи:

   - имя: Проверить фактическое количество свопов
     отлаживать:
       переменная: ansible_swaptotal_mb
     failed_when: ansible_swaptotal_mb > 1999


   - имя: Добавить диск 2Gb
     оболочка: pwsh ./add_disk_vm.ps1 -vm {{ ansible_hostname }} -diskspace 2
     делегат_к: локальный


   - название: Поиск новых дисков
     оболочка: для i в $(ls /sys/class/scsi_host/); do echo "- - -" > /sys/class/scsi_host/$i/scan ; сделано

   - name: Получить букву нового диска
     оболочка: 'dmesg | grep "sd\w.*2.00 GiB)$" | grep -o "sd\w" | хвост -1'
     регистр: дисклеттер


   - имя: Создать новый раздел
     сообщество.general.parted:
       устройство: /dev/{{ diskletter.stdout }}
       fs_type: linux-своп
       метка: gpt
       имя: своп
       номер 1
       состояние: присутствует
     регистрация: расстались


   #вот задача, которая должна работать, но ничего не возвращает
   - имя: Получить UUID
     оболочка: blkid -s UUID -o значение /dev/{{ diskletter.stdout }}1
     зарегистрироваться: uuidinfo

Я не упоминал об этом раньше, но последняя задача отлично работает на другом плейбуке ИЛИ даже непосредственно в SSH на виртуальной машине. Команда ничего не возвращает только в контексте выполнения плейбука.

Вот еще немного информации о моей настройке:

ansible-playbook 2.9.27 версия питона = 2.7.17 Ubuntu 18.04 (где установлен ansible И целевой сервер) Коллекция community.general (версия 3.7.0)

Если у кого-то есть идеи по этому поводу; Спасибо за все !

Рейтинг:1
флаг ca

Насколько я понимаю сценарий и знаю по собственному опыту, такое поведение кажется преднамеренным. ОС должна быть «принудительно» перечитать таблицу разделов после внесения изменений. и прежде чем можно будет получить информацию о новом устройстве.

Дополнительные ссылки

флаг cn
Привет, спасибо за ответ; Я пытался использовать partprobe или partx для перезагрузки информации о диске, но безуспешно: UUID по-прежнему недоступен. Я буду использовать выполнение двух плейбуков вместо одного
Рейтинг:0
флаг cn

Хорошо, наконец, я нашел решение.

Проблема в том, что когда раздел не смонтирован, у него нет UUID. При работе с разделами данных, такими как xfs, extX и т. д. Раздел напрямую монтируется системой, поэтому раздел получает прямой UUID.

Это не относится к разделу подкачки, вы должны сначала включить его с помощью mkswap для системы можно монтировать раздел подкачки.

Вот почему я смог получить значение UUID во втором исполнении playbook: я достиг значения UUID перед включением свопа в playbook. Таким образом, раздел не был смонтирован и не имел UUID.

Если это может помочь кому-то

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.