linux-system-roles.storage
Rol de Almacenamiento en Linux
Este rol permite a los usuarios configurar el almacenamiento local con un mínimo de entrada.
Actualmente, el rol soporta la gestión de sistemas de archivos y entradas de montaje en:
- discos
- grupos de volúmenes LVM
- grupos de Stratis
También se soporta la encriptación (usando LUKS) y RAID (usando MD). El soporte para gestionar dispositivos preexistentes es limitado, pero se pueden agregar nuevos volúmenes LVM y sistemas de archivos Stratis a configuraciones y puntos de montaje existentes, y se pueden agregar algunas otras funciones a (o quitar de) dispositivos existentes.
Requisitos
Ver abajo.
Requisitos de colección
El rol requiere colecciones externas. Usa el siguiente comando para instalarlas:
ansible-galaxy collection install -vv -r meta/collection-requirements.yml
Variables del Rol
NOTA: A partir de la versión 1.3.0, los parámetros no especificados se interpretan de manera diferente para grupos/volúmenes existentes y no existentes. Para grupos y volúmenes nuevos/no existentes, cualquier parámetro omitido usará el valor por defecto descrito en defaults/main.yml
. Para grupos y volúmenes existentes, los parámetros omitidos heredarán cualquiera de los ajustes que ya tenga el grupo o volumen. Esto significa que para cambiar/sustituir los valores por defecto del rol en un grupo o volumen existente, debes especificar explícitamente los nuevos valores/configuraciones en las variables del rol.
storage_pools
La variable storage_pools
es una lista de grupos a gestionar. Cada grupo contiene una lista simplificada de diccionarios volume
como se describe a continuación, así como las siguientes claves:
name
Especifica el nombre del grupo a gestionar/crear como una cadena. (Un ejemplo de un grupo es un grupo de volúmenes LVM).
type
Especifica el tipo de grupo a gestionar. Valores válidos para
type
:lvm
,stratis
.state
Los valores válidos son
present
(comportamiento por defecto) oabsent
. Los grupos marcados comoabsent
serán eliminados por el rol. Los grupos marcados comopresent
serán creados (si el grupo con el nombre especificado no existe) o preservados.grow_to_fill
Cuando se establece, los Volúmenes Físicos del grupo se cambiarán de tamaño para coincidir con los tamaños de sus respectivos dispositivos.
(por ejemplo, después del aumento del tamaño del disco de una Máquina Virtual).Por defecto:
false
NOTA: Este argumento es válido solo para grupos LVM.
shared
Si se establece en
true
, el rol crea o gestiona un grupo de volúmenes compartido. Requiere que los servicios lvmlockd y dlm estén configurados y funcionando.Por defecto:
false
ADVERTENCIA: Modificar el valor
shared
en un grupo existente es una operación destructiva. El grupo en sí será eliminado como parte del proceso.NOTA: Este argumento es válido solo para grupos LVM.
disks
Una lista que especifica el conjunto de discos a usar como almacenamiento de respaldo para el grupo. Los identificadores soportados incluyen: nodo de dispositivo (como
/dev/sda
o/dev/mapper/mpathb
), nombre base del nodo de dispositivo (comosda
ompathb
), y symlink de /dev/disk (como/dev/disk/by-id/wwn-0x5000c5005bc37f3f
).Para grupos LVM esto también se puede usar para agregar y quitar discos a/de un grupo existente. Los discos en la lista que no están usados por el grupo serán añadidos al grupo. Los discos que actualmente son usados por el grupo pero no están presentes en la lista serán eliminados del grupo solo si
storage_safe_mode
está configurado enfalse
.raid_level
Cuando se usa con
type: lvm
gestiona un grupo de volúmenes con un arreglo mdraid del nivel dado en él. Los discos de entrada se usan en este caso como miembros de RAID. Los valores aceptados son:linear
,raid0
,raid1
,raid4
,raid5
,raid6
,raid10
.volumes
Esta es una lista de volúmenes que pertenecen al grupo actual. Sigue el mismo patrón que la variable
storage_volumes
, que se explica a continuación.encryption
Especifica si el grupo será encriptado usando LUKS. ADVERTENCIA: Cambiar la encriptación para un grupo es una operación destructiva, lo que significa que el grupo en sí será eliminado como parte del proceso de agregar/quitar la capa de encriptación.
encryption_password
Esta cadena especifica una contraseña o frase de paso utilizada para desbloquear/abrir el volumen LUKS.
encryption_key
Esta cadena especifica la ruta completa al archivo clave en los nodos gestionados que se usará para desbloquear los volúmenes LUKS. Es responsabilidad del usuario de este rol copiar de manera segura este archivo a los nodos gestionados o asegurar de otra manera que el archivo esté en los nodos gestionados.
encryption_cipher
Esta cadena especifica un cifrado no por defecto que se usará por LUKS.
encryption_key_size
Este entero especifica el tamaño de la clave LUKS (en bytes).
encryption_luks_version
Este entero especifica la versión de LUKS a usar.
encryption_clevis_pin
Para grupos Stratis, el método clevis que debe usarse para encriptar el grupo creado. Valores aceptados son:
tang
ytpm2
.encryption_tang_url
Al crear un grupo Stratis encriptado a través de NBDE usando un servidor tang, especifica la URL del servidor.
encryption_tang_thumbprint
Al crear un grupo Stratis encriptado a través de NBDE usando un servidor tang, especifica la huella digital del servidor.
storage_volumes
La variable storage_volumes
es una lista de volúmenes a gestionar. Cada volumen tiene las siguientes variables:
name
Especifica el nombre del volumen.
type
Especifica el tipo de volumen sobre el cual residirá el sistema de archivos. Valores válidos para
type
:lvm
,disk
,partition
oraid
. El valor por defecto se determina según el sistema operativo y la versión (actualmentelvm
).NOTA: El soporte para gestionar volúmenes de partición es actualmente muy limitado, el rol permite crear solo una única partición que abarque todo el disco.
state
Los valores válidos son
present
(comportamiento por defecto) oabsent
. Los volúmenes marcados comoabsent
serán eliminados por el rol. Los volúmenes marcados comopresent
serán creados (si un volumen con el nombre especificado no existe) o preservados y posiblemente cambiados para coincidir con otros valores (por ejemplo, si un volumen con el nombre especificado existe pero no tiene elsize
requerido, se cambiará de tamaño si es posible).disks
Especifica el conjunto de discos a usar como almacenamiento de respaldo para el sistema de archivos. Esto es actualmente solo relevante para volúmenes de tipo
disk
, donde la lista debe contener solo un solo ítem.size
El
size
especifica el tamaño del sistema de archivos. El formato para esto está destinado a ser legible para humanos, por ejemplo: "10g", "50 GiB". El tamaño de los volúmenes LVM puede ser especificado como un porcentaje del tamaño del grupo/VG, por ejemplo: "50%" a partir de v1.4.2.Al usar
compression
odeduplication
, elsize
puede ser establecido más alto que el espacio disponible real, por ejemplo: 3 veces el tamaño del volumen, basado en la duplicación y/o compresibilidad de los datos almacenados.NOTA: El tamaño solicitado del volumen puede ser reducido según sea necesario para que el volumen quepa en el espacio disponible del grupo, pero solo si la reducción requerida no es más del 2% del tamaño solicitado del volumen.
fs_type
Indica el tipo de sistema de archivos deseado a usar, por ejemplo: "xfs", "ext4", "swap". El valor por defecto se determina según el sistema operativo y la versión (actualmente
xfs
para todos los sistemas soportados). Usa "unformatted" si no deseas que el sistema de archivos esté presente. ADVERTENCIA: Usar "unformatted" como tipo de sistema de archivos en un sistema de archivos existente es una operación destructiva y destruirá todos los datos en el volumen.fs_label
El
fs_label
es una cadena que se usará para una etiqueta de sistema de archivos.fs_create_options
El
fs_create_options
especifica argumentos personalizados paramkfs
como una cadena.mount_point
El
mount_point
especifica el directorio en el cual se montará el sistema de archivos.mount_options
El
mount_options
especifica opciones de montaje personalizadas como una cadena, por ejemplo: 'ro'.mount_user
El
mount_user
especifica el propietario deseado del directorio de montaje.mount_group
El
mount_group
especifica el grupo deseado del directorio de montaje.mount_mode
El
mount_mode
especifica los permisos deseados del directorio de montaje.raid_level
Especifica el nivel de RAID. También se puede crear RAID LVM. Un volumen RAID "normal" requiere que el tipo sea
raid
. RAID LVM necesita que el volumen tenga un padre destorage_pools
con tipolvm
, también se deben especificarraid_disks
. Valores aceptados son:- para volumen RAID LVM:
raid0
,raid1
,raid4
,raid5
,raid6
,raid10
,striped
,mirror
. - para volumen RAID:
linear
,raid0
,raid1
,raid4
,raid5
,raid6
,raid10
.
ADVERTENCIA: Cambiar
raid_level
para un volumen es una operación destructiva, lo que significa que todos los datos en ese volumen se perderán como parte del proceso de eliminar el RAID antiguo y agregar uno nuevo. El cambio de forma de RAID no se soporta actualmente.- para volumen RAID LVM:
raid_device_count
Cuando el tipo es
raid
especifica el número de dispositivos RAID activos.raid_spare_count
Cuando el tipo es
raid
especifica el número de dispositivos RAID de repuesto.raid_metadata_version
Cuando el tipo es
raid
especifica la versión de los metadatos de RAID como una cadena, por ejemplo: '1.0'.raid_chunk_size
Cuando el tipo es
raid
especifica el tamaño del fragmento de RAID como una cadena, por ejemplo: '512 KiB'. El tamaño del fragmento debe ser un múltiplo de 4 KiB.raid_stripe_size
Cuando el tipo es
lvm
especifica el tamaño de la franja RAID LVM como una cadena, por ejemplo: '512 KiB'.raid_disks
Especifica qué discos deben ser usados para el volumen RAID LVM. El
raid_level
necesita ser especificado y el volumen debe tener un padre destorage_pools
con tipolvm
. Acepta una sublista dedisks
del padrestorage_pools
. En caso de múltiples volúmenes RAID LVM dentro del mismo grupo de almacenamiento, se puede usar el mismo disco en múltiplesraid_disks
.encryption
Especifica si el volumen será encriptado usando LUKS. ADVERTENCIA: Cambiar la encriptación para un volumen es una operación destructiva, lo que significa que todos los datos en ese volumen serán eliminados como parte del proceso de agregar/quitar la capa de encriptación.
encryption_password
Esta cadena especifica una contraseña o frase de paso utilizada para desbloquear/abrir el volumen LUKS.
encryption_key
Esta cadena especifica la ruta completa al archivo clave en los nodos gestionados que se usará para desbloquear los volúmenes LUKS. Es responsabilidad del usuario de este rol copiar de manera segura este archivo a los nodos gestionados o asegurar de otra manera que el archivo esté en los nodos gestionados.
encryption_cipher
Esta cadena especifica un cifrado no por defecto que se usará por LUKS.
encryption_key_size
Este entero especifica el tamaño de la clave LUKS (en bits).
encryption_luks_version
Este entero especifica la versión de LUKS a usar.
deduplication
Especifica si se usará el Virtual Data Optimizer (VDO). Cuando se establece, los datos duplicados almacenados en el volumen de almacenamiento serán deduplicados, lo que resulta en más capacidad de almacenamiento. Puede usarse junto con
compression
yvdo_pool_size
. El volumen debe ser parte destorage_pool
LVM. Límite de unstorage_volume
VDO porstorage_pool
. El volumen subyacente debe tener al menos 9 GB (el mínimo bare es alrededor de 5 GiB).compression
Especifica si se usará el Virtual Data Optimizer (VDO). Cuando se establece, los datos almacenados en el volumen serán comprimidos, lo que resultará en más capacidad de almacenamiento. El volumen debe ser parte de
storage_pool
LVM. Puede usarse junto condeduplication
yvdo_pool_size
. Límite de unstorage_volume
VDO porstorage_pool
.vdo_pool_size
Cuando se usa el Virtual Data Optimizer (VDO), especifica el tamaño real que el volumen ocupará en el dispositivo. El tamaño virtual del volumen VDO se establece con el parámetro
size
. El formatovdo_pool_size
está destinado a ser legible para humanos, por ejemplo: "30g", "50GiB". El valor por defecto es igual al tamaño del volumen.cached
Especifica si el volumen debe ser almacenado en caché o no. Esto actualmente es soportado solo para volúmenes LVM donde se utiliza dm-cache.
cache_size
Tamaño de la caché. El formato
cache_size
está destinado a ser legible para humanos, por ejemplo: "30g", "50GiB".cache_mode
Modo para la caché. Los valores soportados incluyen
writethrough
(por defecto) ywriteback
.cache_devices
Lista de dispositivos que serán utilizados para la caché. Estos deberían ser volúmenes físicos o discos en los que se asignan esos volúmenes físicos. Generalmente deseas seleccionar dispositivos rápidos como SSD o discos NVMe para la caché.
thin
Especifica si el volumen debe ser aprovisionado de manera delgada o no. Esto es soportado solo para volúmenes LVM.
thin_pool_name
Para volúmenes
thin
, esto se puede usar para especificar el nombre del grupo LVM delgado que se usará para el volumen. Si el grupo con el nombre proporcionado ya existe, el volumen se añadirá a ese grupo. Si no existe, se creará un nuevo grupo llamadothin_pool_name
. Si no se especifica:- si no hay grupos delgados existentes, se creará un nuevo grupo delgado con un nombre generado automáticamente,
- si hay exactamente un grupo delgado existente, el volumen delgado se añadirá a él, y
- si hay múltiples grupos delgados presentes, se generará una excepción.
thin_pool_size
Tamaño para el grupo delgado. El formato
thin_pool_size
está destinado a ser legible para humanos, por ejemplo: "30g", "50GiB".
storage_safe_mode
Cuando es verdadero (el valor por defecto), ocurrirá un error en lugar de eliminar automáticamente dispositivos existentes y/o formatear.
storage_udevadm_trigger
Cuando es verdadero (el valor por defecto es falso), el rol utilizará el desencadenador udevadm para hacer que los cambios udev surtan efecto de inmediato. Esto puede ayudar en algunas plataformas con udev "defectuoso".
Ejemplo de Playbook
- name: Gestionar almacenamiento
hosts: all
roles:
- name: linux-system-roles.storage
storage_pools:
- name: app
disks:
- sdb
- sdc
volumes:
- name: shared
size: "100 GiB"
mount_point: "/mnt/app/shared"
#fs_type: xfs
state: present
- name: users
size: "400g"
fs_type: ext4
mount_point: "/mnt/app/users"
storage_volumes:
- name: images
type: disk
disks: ["mpathc"]
mount_point: /opt/images
fs_label: images
rpm-ostree
Ver README-ostree.md
Licencia
MIT
Configure volumes and filesystems
ansible-galaxy install linux-system-roles.storage