Команда, Мой код: работает и выполняет свою работу. удалить раздел по путям размонтирования, если он не является корневым и присутствует в определенном списке в vars.
предостережение: я заметил, что иногда некоторые устройства остаются отключенными, и когда я повторно запускаю задачу, они затем удаляются. не уверен, в чем проблема.
шаги:
- проходит через все устройства, которые находятся в варах
- проверяет, существуют ли они на узле, с помощью команды lsblk
- на основе результата каждого пункта[device from list], задача запускает
include_task
, который затем выполняет удаление [ unmount, delete
partition steps]
Есть ли какие-то стандартные подходы, которые я мог бы использовать в каждой своей задаче? например, вместо использования модуля оболочки, могу я просто сделать это, используя ansible_device
и сравнить его со списком устройств, которые у меня есть в var, а затем, если есть совпадение, перейти к удалению? если да, то я не знаю, как провести это сравнение. что-нибудь еще, дайте знать, пожалуйста. Благодарю. Я новичок, дайте мне точный пример кода, указывающий на лучшие подходы. ценить это.
vars.yml
local_volume_mount_root_directory: /local-volumes
nvme_extn: "p"
loop_device: "loop"
device_prefix: /dev/
devices_list: ["/dev/sdd", "/dev/nvme1n1"]
device_part_number: 1
device_storage_class: ssd-wkr
задачи
- name: "Check if all inventory defined devices exists on node"
shell: "lsblk -p -l | grep {{ item }}"
register: inv_device_exists
ignore_errors: yes
with_items: "{{ devices_list }}"
tags: inv_device_deletion
- name: "Run include_tasks if each inventory device exists on node"
include_tasks:
file: delete_devices.yml
apply:
tags: inv_device_deletion
when: item.stdout != ""
with_items: "{{ inv_device_exists.results }}"
tags: inv_device_deletion
ниже: убедитесь, что каждое устройство не является ROOT, затем проверьте, какой он тип, с помощью регулярного выражения, затем введите блок, чтобы удалить его.
delete_devices.yml
- name: "Check if all inventory defined devices are mounted on ROOT /"
shell: lsblk -l -p | grep -w "{{ item.item }}" | grep -w /
register: is_device_root
failed_when:
- is_device_root.rc == 0
ignore_errors: no
- name: block to delete Type SD
block:
- name: Get device UUID
command: blkid -s UUID -o value "{{ item.item }}{{ device_part_number }}"
register: uuid_sd
ignore_errors: yes
- name: un-mount devices sd
mount:
path: "{{ volume_mount_root_directory }}/{{ device_storage_class }}/{{ uuid_sd.stdout }}"
state: unmounted
ignore_errors: yes
when: uuid_sd.stdout != ""
- name: Delete partitions "{{ item.item }}"
parted:
device: "{{ item.item }}"
number: "{{ device_part_number }}"
state: absent
when: item.item is regex("sdw+")
- name: block to delete Type NVME
block:
- name: Get NVME device UUID
command: blkid -s UUID -o value "{{ item.item }}{{ nvme_extn }}{{ device_part_number }}"
register: uuid_nvme
ignore_errors: yes
- name: un-mount devices nvme
mount:
path: "{{ volume_mount_root_directory }}/{{ device_storage_class }}/{{ uuid_nvme.stdout }}"
state: unmounted
ignore_errors: yes
when: uuid_nvme.stdout != ""
- name: Delete partitions "{{ item.item }}"
parted:
device: "{{ item.item }}"
number: "{{ device_part_number }}"
state: absent
when: item.item is regex("nvmew+")
```