我必须在 VM 上的新磁盘中创建一个新分区。我使用 parted 模块来创建分区。在未来的任务中(在同一个剧本中),我需要使用设备分区的 UUID(不是分区 UUID,而是分区的设备 UUID,例如在 /dev/disks/by-uuid/ 中)
问题是:在 parted 模块归档作业后,我找不到在任务中获取分区 UUID 的方法。我确信 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),我就能得到结果。但是在 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
我之前没有提到它,但最后一个任务在其他剧本上运行良好,甚至直接在 VM 上的 SSH 中运行。该命令仅在剧本执行上下文期间不返回任何内容。
以下是有关我的设置的其他一些信息:
ansible-playbook 2.9.27 python 版本 = 2.7.17 Ubuntu 18.04(安装了 ansible 和目标服务器) community.general 集合(版本 3.7.0)
如果有人对此有任何想法;谢谢大家!