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

http://www.tauceti.blog

Acerca del proyecto

Manage Linux Logical Volume Manager resources

Instalar
ansible-galaxy install githubixx.lvm
Licencia
gpl-3.0
Descargas
1.8k
Propietario
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)