lvm

ansible-role-lvm

Эта роль Ansible устанавливает ресурсы управления логическими томами Linux (LVM), такие как Группы томов (VG), Логические тома (LV) и управляет созданием файловых систем и точек монтирования.

Изменения

Смотрите CHANGELOG

Переменные роли

По умолчанию ресурсы LVM не создаются. См. примеры ниже. Ключ lvm_vgs является отправной точкой для всех ресурсов LVM, которые должны быть созданы.

lvm_vgs: []

Сначала несколько примеров создания ресурсов LVM (как осуществляется удаление, смотрите ниже).

Создайте группу томов (VG) с именем test-vg-01, которая использует устройство /dev/vdb в качестве физического тома:

lvm_vgs:
  - vgname: test-vg-01
    pvs: /dev/vdb
    state: present

Все три параметра обязательны! vgname — это имя группы томов. pvs — это список устройств, разделенных запятыми, которые будут использоваться в этой группе томов. state управляет существованием группы томов.
Для удаления VG необходимо указать state: absent и также force: true. В отличие от параметра force модуля community.general.lvg force: true не удалит VG, если он все еще содержит (один) логический том! Это сделано для того, чтобы затруднить случайное удаление данных.

Создайте группу томов (VG) с именем test-vg-01, используя устройства /dev/vdb и /dev/vdc в качестве физических томов:

lvm_vgs:
  - vgname: test-vg-01
    pvs: /dev/vdb,/dev/vdc
    state: present

В настоящее время поддерживаются следующие дополнительные параметры community.general.lvg:

Как в предыдущем примере, но также создайте логический том test-lv-01 и выделите 10% доступного пространства VG:

lvm_vgs:
  - vgname: test-vg-01
    pvs: /dev/vdb
    state: present
    lvm_lvs:
      - lvname: test-lv-01
        size: 10%VG
        state: present

Все логические тома, содержащиеся в группе томов, перечисляются под ключом lvm_lvs. Параметры lvname, size и state обязательны! lvname — это имя логического тома. size указывает размер логического тома, в соответствии с lvcreate(8) --size, по умолчанию в мегабайтах или, возможно, с одной из единиц [bBsSkKmMgGtTpPeE]; или согласно lvcreate(8) --extents как процент [VG|PVS|FREE]; Дробные значения должны начинаться с цифры. state контролирует существование логического тома. Для удаления LV необходимо указать state: absent и также force: true.

В настоящее время также поддерживаются следующие дополнительные параметры community.general.lvol:

Как в предыдущем примере, но также создайте файловую систему ext4, используя логический том test-lv-01 в качестве устройства для файловой системы:

lvm_vgs:
  - vgname: test-vg-01
    pvs: /dev/vdb
    state: present
    lvm_lvs:
      - lvname: test-lv-01
        size: 10%VG
        state: present
        fs:
          type: ext4
          state: present

Ключ fs указывает, что логический том должен содержать файловую систему. type указывает, какая файловая система должна быть использована. state: present указывает, что файловая система создается, если она еще не существует. В случае state: absent подписи файловой системы на устройстве стираются, если оно содержит файловую систему (как известно blkid). В случае state: absent все другие параметры, кроме устройства, игнорируются, и модуль не завершится с ошибкой, если устройство на самом деле не существует. В случае state: absent также требуется force: true, иначе файловая система не будет затронута. В отличие от параметра force модуля community.general.filesystem force: true не перезапишет существующую файловую систему. Вы действительно должны сначала стереть старую, чтобы иметь возможность создать новую файловую систему! Это также сделано для предотвращения случайного удаления.

Как в предыдущем примере, но также создайте директорию /mnt1 и смонтируйте файловую систему ext4 там. Это также создаст запись в /etc/fstab (по умолчанию).

lvm_vgs:
  - vgname: test-vg-01
    pvs: /dev/vdb
    state: present
    lvm_lvs:
      - lvname: test-lv-01
        size: 10%VG
        state: present
        fs:
          type: ext4
          state: present
          mountpoint:
            state: mounted
            path:
              name: /mnt1

Ключ mountpoint отвечает за действия, связанные с точкой монтирования. state имеет те же параметры, что и модуль ansible.posix.mount, такие как mounted, absent, present, unmounted и remounted (также см. state). state и path.name обязательны. path.name указывает имя директории, в которую должна быть смонтирована точка монтирования. Если директория еще не существует, она будет создана. Для дополнительных опций смотрите следующий пример.

Как в предыдущем примере, но теперь файловая система получает метку mnt1. Также файловая система монтируется в /mnt1 с опцией файловой системы noatime. Файловая система также монтируется, используя метку mnt1 как указано (src: LABEL=mnt1). Владелец и группа директории /mnt1 будут vagrant, а права доступа к директории будут 0750:

lvm_vgs:
  - vgname: test-vg-01
    pvs: /dev/vdb
    state: present
    lvm_lvs:
      - lvname: test-lv-01
        size: 10%VG
        state: present
        fs:
          type: ext4
          opts: -L mnt1
          state: present
          mountpoint:
            opts: noatime
            state: mounted
            src: LABEL=mnt1
            path:
              name: /mnt1
              mode: '0750'
              owner: vagrant
              group: vagrant

По умолчанию mountpoint.src — это /dev/ + vgname + / + lvname. В приведенном выше примере использовалась LABEL=mnt1. В opts: -L mnt был предоставлен параметр для создания файловой системы с этой меткой. Таким образом, ее можно использовать позже для mountpoint.src.

mountpoint поддерживает следующие дополнительные параметры:

Создайте две группы томов (VG) с именами test-vg-01 и test-vg-02, которые используют устройства /dev/vdb и /dev/vdc соответственно в качестве физических томов:

lvm_vgs:
  - vgname: test-vg-01
    pvs: /dev/vdb
    state: present
  - vgname: test-vg-02
    pvs: /dev/vdc
    state: present

Вот пример, как размонтировать точку монтирования и удалить ее запись из /etc/fstab:

mountpoint:
  state: absent
  path:
    name: /vg01lv01

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

При удалении файловых систем, логических томов (LV) и групп томов (VG) потенциально можно уничтожить ваши данные, необходимо проявлять особую осторожность! В данном случае указание state: absent для удаления такого ресурса недостаточно. Также требуется force: true. Конечно, удаление группы томов, которая все еще содержит логические тома, не удастся. Также не удастся удалить логический том с файловой системой с state: present.

В следующем примере будет размонтирована указанная точка монтирования (/vg02lv01) и удалена ее запись из /etc/fstab, будет стерта файловая система ext4, удален логический том (vg02lv01) и в конце удалена группа томов (vg02) (в таком порядке):

lvm_vgs:
  - vgname: vg02
    pvs: /dev/vdc
    state: absent
    force: true
    lvm_lvs:
      - lvname: vg02lv01
        size: 10%VG
        state: absent
        force: true
        fs:
          type: ext4
          state: absent
          force: true
          mountpoint:
            state: absent
            path:
              name: /vg02lv01

Чтобы иметь возможность создавать файловые системы, необходимы дополнительные пакеты. Для ext(2|3|4) необходимо установить пакет e2fsprogs. Поэтому в зависимости от того, какую файловую систему вы хотите настроить, вам может потребоваться установить дополнительные пакеты или удалить ненужные пакеты из списка. Вы, конечно, можете добавить любые пакеты, которые хотите установить, в список.

По умолчанию устанавливаются только инструменты, необходимые для ext(2|3|4) или xfs. Для других файловых систем вам может понадобиться, например, btrfsprogs/btrfs-progs, dosfstools, f2fs-tools или reiserfsprogs:

# Дополнительные пакеты для совместимых с SuSE ОС
additional_packages_suse:
  - e2fsprogs
  - xfsprogs

# Дополнительные пакеты для совместимых с Debian ОС
additional_packages_debian:
  - e2fsprogs
  - xfsprogs

# Дополнительные пакеты для совместимых с Redhat ОС
additional_packages_redhat:
  - e2fsprogs
  - xfsprogs

# Дополнительные пакеты для совместимых с Archlinux ОС
additional_packages_arch:
  - e2fsprogs
  - xfsprogs

В общем, поддерживаются большинство опций следующих модулей:

community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount

Зависимости

Эта роль зависит от нескольких модулей Ansible:

community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount

TODO

В настоящее время следующие функции не реализованы:

  • Изменение размера группы томов
  • Уменьшение размера логического тома
  • Снимок логического тома
  • Изменение размера логического тома/файловой системы

Пример плейбука

Пример 1 (без тега роли)

- hosts: ваш-хост
  roles:
    - githubixx.lvm

Пример 2 (присвоение тега роли)

-
  hosts: ваш-хост
  roles:
    -
      role: githubixx.lvm
      tags: role-lvm

Еще примеры

Есть еще несколько примеров, используемых для тестирования этой роли. Смотрите директории molecule.

Тестирование

Эта роль имеет небольшой тестовый набор, который создается с помощью Molecule, libvirt (vagrant-libvirt) и QEMU/KVM. Пожалуйста, смотрите мой блог Тестирование ролей Ansible с Molecule, libvirt (vagrant-libvirt) и QEMU/KVM о том, как настроить. Конфигурация тестов доступна здесь.

После этого можно выполнить molecule:

molecule converge -s kvm

Это создаст несколько виртуальных машин (VM) с различными поддерживаемыми операционными системами Linux и создаст различные ресурсы LVM.

Чтобы очистить, выполните

molecule destroy -s kvm

Лицензия

GNU General Public License v3.0 или позже

Информация об авторе

http://www.tauceti.blog

О проекте

Manage Linux Logical Volume Manager resources

Установить
ansible-galaxy install githubixx/ansible-role-lvm
Лицензия
gpl-3.0
Загрузки
999
Владелец
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)