使用 Parted ansible 的模組創建交換分區 UUID 後無法獲取它
我必須在 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)
如果有人對此有任何想法;謝謝大家!
好的,我終於找到了解決方案。
問題是當分區沒有掛載時,它沒有 UUID。使用 xfs、extX 等數據分區時…分區是由系統直接掛載的,因此分區直接使用 UUID。
交換分區不是這種情況,您必須首先啟用它,
mkswap
系統才能掛載交換分區。這就是為什麼我能夠在第二次 playbook 執行中獲得 UUID 值:我在 playbook 中啟用交換之前達到了 UUID 值。所以分區沒有掛載,也沒有 UUID。
如果它可以幫助某人
據我了解情況並從自己的經驗中知道,這種行為似乎是有意的。一旦更改完成,作業系統必須“強制”重新讀取分區表,然後才能獲得新的設備資訊。
更多連結