githubixx.lvm
rol-ansible-lvm
Este rol de Ansible instala recursos del Gestor de Volúmenes Lógicos de Linux (LVM), como Grupos de Volúmenes
(VG), Volúmenes Lógicos
(LV) y maneja la creación de sistemas de archivos
y puntos de montaje
.
Registro de cambios
vea CHANGELOG
Variables del rol
Por defecto, no se crean recursos de LVM. Vea los ejemplos a continuación. La clave lvm_vgs
es el punto de entrada para todos los recursos de LVM que se deben crear.
lvm_vgs: []
Primero, algunos ejemplos sobre la creación de recursos de LVM (cómo se maneja la eliminación se ve más abajo).
Cree un grupo de volúmenes (VG) llamado test-vg-01
que use el dispositivo /dev/vdb
como volumen físico:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
¡Los tres parámetros son obligatorios! vgname es el nombre del Grupo de Volúmenes. pvs es una lista de dispositivos separados por comas que se usarán como dispositivos físicos en este grupo de volúmenes. state controla si el grupo de volúmenes existe.
Para eliminar un VG, debes especificar state: absent
y también force: true
. A diferencia del parámetro force
del módulo community.general.lvg, force: true
no eliminará los VGs que aún contienen uno o más volúmenes lógicos. ¡Esto es para dificultar la eliminación accidental de datos!
Cree un grupo de volúmenes (VG) llamado test-vg-01
que use los dispositivos /dev/vdb
y /dev/vdc
como volúmenes físicos:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb,/dev/vdc
state: present
Actualmente se admiten los siguientes parámetros adicionales de community.general.lvg:
Como el ejemplo anterior, pero también crea un volumen lógico test-lv-01
y asigna 10%
del espacio VG disponible:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
Todos los volúmenes lógicos que contiene un grupo de volúmenes se enumeran bajo la clave lvm_lvs
. Se requieren los parámetros lvname
, size
y state
. lvname es el nombre del volumen lógico. size especifica el tamaño del volumen lógico, según lvcreate(8) --size
, por defecto en megabytes o opcionalmente con una de las unidades [bBsSkKmMgGtTpPeE]; o según lvcreate(8) --extents
como un porcentaje de [VG|PVS|FREE]; Los valores en punto flotante deben comenzar con un dígito. state controla si el volumen lógico existe. Para eliminar un LV, debes especificar state: absent
y también force: true
.
Actualmente, también se admiten los siguientes parámetros adicionales de community.general.lvol:
Como el ejemplo anterior, pero también crea un sistema de archivos ext4
utilizando el volumen lógico test-lv-01
como dispositivo para el sistema de archivos:
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
La clave fs
especifica que el volumen lógico debe contener un sistema de archivos. type especifica el sistema de archivos que se debe usar. state: present
especifica que el sistema de archivos se crea si aún no existe. En caso de state: absent
, las firmas del sistema de archivos en el dispositivo se borran si contiene un sistema de archivos (como lo conoce blkid
). Cuando state: absent
, todas las demás opciones excepto el dispositivo se ignoran, y el módulo no falla si el dispositivo no existe realmente. En caso de state: absent
también se necesita force: true
, de lo contrario, el sistema de archivos no se tocará. A diferencia del parámetro force del módulo community.general.filesystem, force: true
no sobrescribirá un sistema de archivos existente. ¡Realmente necesitas borrar el antiguo primero para poder crear un nuevo sistema de archivos! Nuevamente, esto es para evitar la eliminación accidental.
Como el ejemplo anterior, pero también crea un directorio /mnt1
y monta el sistema de archivos ext4
allí. Esto también crea una entrada en /etc/fstab
(por defecto).
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
La clave mountpoint
maneja las acciones relacionadas con el punto de montaje. state tiene las mismas opciones que proporciona el módulo ansible.posix.mount, como mounted
, absent
, present
, unmounted
y remounted
(también vea state). state
y path.name
son obligatorios. path.name
especifica el nombre del directorio donde se montará el punto de montaje. Si el directorio no existe ya, se creará. Para más opciones, vea el siguiente ejemplo.
Como el ejemplo anterior, pero el sistema de archivos ahora recibe una etiqueta mnt1
. También el sistema de archivos se monta en /mnt1
con la opción de sistema de archivos noatime
. También el sistema de archivos se monta utilizando la etiqueta mnt1
como se mencionó (src: LABEL=mnt1
). El owner
y el group
del directorio /mnt1
serán vagrant
y los permisos del directorio serán 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
Por defecto, mountpoint.src
es /dev/ + vgname + / + lvname
. En el ejemplo anterior se utilizó LABEL=mnt1
. En opts: -L mnt
, se proporcionó la opción para crear un sistema de archivos con esa etiqueta. Así que eso se puede usar más tarde para mountpoint.src
.
mountpoint
admite los siguientes parámetros adicionales:
Cree dos grupos de volúmenes (VG) llamados test-vg-01
y test-vg-02
, que utilizan el dispositivo /dev/vdb
y /dev/vdc
, respectivamente, como volúmenes físicos:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
- vgname: test-vg-02
pvs: /dev/vdc
state: present
Aquí hay un ejemplo para desmontar un punto de montaje y eliminar su entrada de /etc/fstab
:
mountpoint:
state: absent
path:
name: /vg01lv01
Esto, por supuesto, solo funciona si el punto de montaje no está siendo utilizado por un programa o servicio.
Como la eliminación de sistemas de archivos, los volúmenes lógicos (LV) y los grupos de volúmenes (VG) pueden destruir tus datos, se debe tener un cuidado adicional. En este caso, especificar state: absent
para eliminar un recurso no es suficiente. También se necesita force: true
. Por supuesto, eliminar un grupo de volúmenes que aún contiene un volumen lógico fallará. También fallará eliminar un volumen lógico con un sistema de archivos con state: present
.
El siguiente ejemplo desmontará el punto de montaje especificado (/vg02lv01
) y eliminará su entrada de /etc/fstab
, borrará el sistema de archivos ext4
, eliminará el volumen lógico (vg02lv01
) y finalmente eliminará el grupo de volúmenes (vg02
) (en ese orden):
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
Para poder crear sistemas de archivos, se necesitan paquetes adicionales. Para ext(2|3|4)
necesitas tener el paquete e2fsprogs
instalado, por ejemplo. Así que dependiendo de qué sistema de archivos quieras configurar, es posible que debas instalar paquetes adicionales o eliminar paquetes innecesarios de la lista. Por supuesto, puedes añadir los paquetes que desees instalar a la lista.
Por defecto, solo se instalan las herramientas necesarias para ext(2|3|4)
o xfs
. Para otros sistemas de archivos, puedes necesitar btrfsprogs/btrfs-progs
, dosfstools
, f2fs-tools
o reiserfsprogs
, por ejemplo:
# Paquetes adicionales para sistemas operativos compatibles con SuSE
additional_packages_suse:
- e2fsprogs
- xfsprogs
# Paquetes adicionales para sistemas operativos compatibles con Debian
additional_packages_debian:
- e2fsprogs
- xfsprogs
# Paquetes adicionales para sistemas operativos compatibles con Redhat
additional_packages_redhat:
- e2fsprogs
- xfsprogs
# Paquetes adicionales para sistemas operativos compatibles con Archlinux
additional_packages_arch:
- e2fsprogs
- xfsprogs
En general, se admiten la mayoría de las opciones de los siguientes módulos:
community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount
Dependencias
Este rol depende de algunos módulos de Ansible:
community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount
POR HACER
Actualmente, las siguientes características no están implementadas:
- Redimensionar Grupos de Volúmenes
- Reducir Volúmenes Lógicos
- Snapshot de Volúmenes Lógicos
- Redimensionar Volúmenes/ Sistemas de archivo Lógicos
Ejemplo de Playbook
Ejemplo 1 (sin etiqueta de rol)
- hosts: tu-host
roles:
- githubixx.lvm
Ejemplo 2 (asignar etiqueta al rol)
-
hosts: tu-host
roles:
-
role: githubixx.lvm
tags: rol-lvm
Más ejemplos
Hay algunos ejemplos más utilizados para probar este rol. Vea los directorios de molecule.
Pruebas
Este rol tiene una pequeña configuración de prueba que se crea utilizando Molecule, libvirt (vagrant-libvirt) y QEMU/KVM. Por favor, vea mi publicación en el blog Probando roles de Ansible con Molecule, libvirt (vagrant-libvirt) y QEMU/KVM sobre cómo configurar. La configuración de la prueba está aquí.
Después, se puede ejecutar molecule:
molecule converge -s kvm
Esto configurará varias máquinas virtuales (VM) con diferentes sistemas operativos Linux admitidos y creará varios recursos de LVM.
Para limpiar, ejecute
molecule destroy -s kvm
Licencia
Licencia Pública General de GNU v3.0 o posterior
Información del Autor
ansible-galaxy install githubixx.lvm