githubixx.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 или позже
Информация об авторе
ansible-galaxy install githubixx.lvm