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/ansible-role-lvm