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

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

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

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

Creating the partition with the parted module
Re-launch facts with the setup module (with and without filtering on ansible_devices) in order to use the ansible_devices.sdX.partitions.sdXY.uuid --> return void
Use the blkid -s UUID -o value /dev/sdXY throught the shell module --> return void
Use the ls -l /dev/disk/by-uuid/ | grep sdXY | awk '{print $9}' throught the shell module --> still return void

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

Вот мой полный плейбук:

---
- hosts: all
  become: yes
  gather_facts: "yes"
  tasks:

   - name: Check actual swap quantity
     debug:
       var: ansible_swaptotal_mb
     failed_when: ansible_swaptotal_mb > 1999


   - name: Add a 2Gb disk
     shell: pwsh./add_disk_vm.ps1 -vm {{ ansible_hostname }} -diskspace 2
     delegate_to: localhost


   - name: Scan for new disks
     shell: for i in $(ls /sys/class/scsi_host/); do echo "- - -" > /sys/class/scsi_host/$i/scan ; done

   - name: Get letter of the new disk
     shell: 'dmesg | grep "sd\w.*2.00 GiB)$" | grep -o "sd\w" | tail -1'
     register: diskletter


   - name: Create new partition
     community.general.parted:
       device: /dev/{{ diskletter.stdout }}
       fs_type: linux-swap
       label: gpt
       name: swap
       number: 1
       state: present
     register: parted


   #here the task who should work, but returning nothing
   - name: Get UUID
     shell: blkid -s UUID -o value /dev/{{ diskletter.stdout }}1
     register: uuidinfo

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

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

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

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

1
задан 12 November 2021 в 11:11
2 ответа

Итак, я нашел решение.

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

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

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

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

0
ответ дан 17 November 2021 в 13:37

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

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

1
ответ дан 15 November 2021 в 17:04

Теги

Похожие вопросы