Tôi phải tạo một phân vùng mới trong một đĩa mới trên máy ảo. Tôi sử dụng mô-đun chia tay để tạo phân vùng. Trong một tác vụ trong tương lai (trong cùng một playbook), tôi cần sử dụng UUID của phân vùng thiết bị (không phải UUID của phân vùng, mà là UUID của thiết bị của phân vùng, chẳng hạn như trong/dev/đĩa/by-uuid/)
Vấn đề là: Tôi không tìm được cách lấy UUID của phân vùng trong một tác vụ sau khi mô-đun được chia tách lưu trữ công việc. Tôi chắc chắn rằng mô-đun chia tay hoạt động tốt vì phân vùng tồn tại sau khi chạy.
Hãy xem những gì tôi đã thử:
Tạo phân vùng với mô-đun parted
Khởi chạy lại các sự kiện với mô-đun thiết lập (có và không lọc trên ansible_devices) để sử dụng ansible_devices.sdX.partitions.sdXY.uuid -> return void
Sử dụng giá trị blkid -s UUID -o /dev/sdXY thông qua mô-đun shell -> return void
Sử dụng ls -l /dev/disk/by-uuid/ | grep sdXY | awk '{print $9}' thông qua mô-đun shell --> vẫn trả về void
Sự thật tồi tệ là: nếu tôi chạy cùng một tác vụ (như 2, 3 hoặc 4) trong một playbook khác, tôi có thể nhận được kết quả. Nhưng trong cùng một vở kịch của mô-đun đã chia tay: Tôi không thể.
Đây là playbook đầy đủ của tôi:
---
- máy chủ: tất cả
trở thành: có
tập hợp_facts: "có"
nhiệm vụ:
- name: Kiểm tra số lượng swap thực tế
gỡ lỗi:
biến: ansible_swaptotal_mb
fail_khi: ansible_swaptotal_mb > 1999
- tên: Thêm đĩa 2Gb
shell: pwsh ./add_disk_vm.ps1 -vm {{ ansible_hostname }} -diskspace 2
ủy nhiệm_to: máy chủ cục bộ
- tên: Quét đĩa mới
vỏ: cho tôi trong $(ls /sys/class/scsi_host/); làm echo "- - -" > /sys/class/scsi_host/$i/scan ; xong
- name: Lấy ký tự của đĩa mới
vỏ: 'dmesg | grep "sd\w.*2.00 GiB)$" | grep -o "sd\w" | đuôi -1'
đăng ký: diskletter
- name: Tạo phân vùng mới
cộng đồng.chung.parted:
thiết bị: /dev/{{ diskletter.stdout }}
fs_type: trao đổi linux
nhãn: gpt
tên: trao đổi
số 1
trạng thái: hiện tại
đăng ký: chia tay
#đây nhiệm vụ ai nên làm việc, nhưng không trả lại gì
- tên: Nhận UUID
shell: blkid -s UUID -o value /dev/{{ diskletter.stdout }}1
đăng ký: uuidinfo
Tôi không đề cập đến nó trước đây, nhưng tác vụ cuối cùng hoạt động tốt trên một playbook khác HOẶC thậm chí trực tiếp trong SSH trên VM. Lệnh không trả lại bất cứ thứ gì chỉ trong ngữ cảnh thực thi playbook.
Đây là một số thông tin khác về thiết lập của tôi:
ansible-playbook 2.9.27
phiên bản trăn = 2.7.17
Ubuntu 18.04 (nơi cài đặt ansible VÀ máy chủ đích)
bộ sưu tập Community.General (phiên bản 3.7.0)
Nếu ai đó có bất kỳ ý tưởng nào về điều này; cảm ơn vì tất cả !