Not able to get swap partition UUID after creating it with Parted ansible's module
I have to create a new partition in a fresh disk on a VM. I use the parted module in order to create the partition. In a future task (in the same playbook), I need to use the UUID of the device partition (not the partition UUID, but the device UUID of the partition, present for example in /dev/disks/by-uuid/)
The problem is that : I don't find a way to get the UUID of the partition in a task after the parted module archieved the job. I'm sure that the parted module works fine because the partition exists after the run.
Let's take a look of what I tried :
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
The terrible fact is that : if I launch the same task (like 2, 3 or 4) in another playbook, I'm able to get results. But in the same playbook of the parted module : I can't.
Here's my full playbook :
---
- 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
I don't mentionned it before, but the last task works fine on an other playbook OR even directly in SSH on the VM. The command doesn't return anything only during the playbook execution context.
Here's some other informations about my setup:
ansible-playbook 2.9.27 python version = 2.7.17 Ubuntu 18.04 (where ansible is installed AND the target server) community.general collection (version 3.7.0)
If someone have any ideas about this ; thanks for all !
As far as I understand the scenario and know from own experience, the behavior seems to be intended. The OS must be "forced" to re-read the partition table once changes have been done and before one will be able to get the new device information.
Further links
- Reread partition table without rebooting
partprobe
usage- Ansible Issue #48034
- Ansible Issue #63676