удаление списка устройств с помощью ansible

Команда, Мой код: работает и выполняет свою работу. удалить раздел по путям размонтирования, если он не является корневым и присутствует в определенном списке в vars.

предостережение: я заметил, что иногда некоторые устройства остаются отключенными, и когда я повторно запускаю задачу, они затем удаляются. не уверен, в чем проблема.

шаги:

  1. проходит через все устройства, которые находятся в варах
  2. проверяет, существуют ли они на узле, с помощью команды lsblk
  3. на основе результата каждого пункта[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+")
```

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *