. Мне нужно создать новый раздел на новом диске на виртуальной машине. Я использую модуль 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)
Если у кого-то есть идеи по этому поводу ; Спасибо за все !
Итак, я нашел решение.
Проблема в том, что когда раздел не смонтирован, у него нет UUID. При работе с разделами данных, такими как xfs, extX и т. д. Раздел напрямую монтируется системой, поэтому раздел получает прямой UUID.
Это не относится к разделу подкачки, вы должны сначала включить его с помощью mkswap
, чтобы система могла смонтировать раздел подкачки.
Вот почему мне удалось получить значение UUID во втором выполнении плейбука. :Я получил значение UUID до включения свопа в плейбуке. Таким образом, раздел не был смонтирован и не имел UUID.
Если это может кому-то помочь
Насколько я понимаю сценарий и знаю по собственному опыту, такое поведение кажется преднамеренным. ОС должна быть «принудительно» повторно -читать таблицу разделов после внесения изменений и до того, как можно будет получить новую информацию об устройстве.
Дополнительные ссылки