githubixx.iscsi_target
ansible-role-iscsi_target
Este rol configura un objetivo iSCSI basado en Linux-LIO en un host de Linux utilizando targetcli
. Además, este rol incluye módulos de Python para interactuar con el comando targetcli
que se pueden usar por separado para tareas más avanzadas. Los módulos implementan comprobaciones, creación y eliminación.
Probado con:
- Ubuntu 20.04
- Ubuntu 22.04
- Archlinux
La documentación sobre LIO y Target se puede encontrar aquí.
Requisitos
Este rol no crea discos/particiones/LVs. Se espera que ya estén presentes en la máquina o que sean creados por otro rol. Por ejemplo: githubixx.lvm.
Registro de cambios
ver CHANGELOG
Variables del rol
# El/Los objetivo/s iSCSI se configura/n a través de la variable anidada "iscsi_targets".
# Una configuración bastante mínima se ve como este ejemplo:
#
# iscsi_targets:
# - name: "iqn.2021-11.blog.tauceti:{{ ansible_facts['nodename'] }}"
# disks:
# - name: lun_node1
# path: /dev/vdb
# type: block
# lunid: 0
# initiators:
# - name: iqn.2021-07.blog.tauceti:node1
# authentication:
# userid: node1user
# password: node1pw
# userid_mutual: node1sharedkey
# password_mutual: node1sharedsecret
# mapped_luns:
# - mapped_lunid: 0
# lunid: 0
# portals:
# - ip: "0.0.0.0"
#
# Para más información, consulte README.
iscsi_targets: []
La configuración anterior creará una configuración iSCSI que se verá así (Salida generada con targetcli 'ls'
):
# o- / .................................................................................... [...]
# o- backstores ......................................................................... [...]
# | o- block ............................................................. [Objetos de Almacenamiento: 1]
# | | o- lun_node1 ................................... [/dev/vdb (1.0GiB) escritura a través activada]
# | | o- alua .............................................................. [Grupos ALUA: 1]
# | | o- default_tg_pt_gp .................................. [Estado ALUA: Activo/optimizado]
# | o- fileio ............................................................ [Objetos de Almacenamiento: 0]
# | o- pscsi ............................................................. [Objetos de Almacenamiento: 0]
# | o- ramdisk ........................................................... [Objetos de Almacenamiento: 0]
# o- iscsi ....................................................................... [Objetivos: 1]
# | o- iqn.2021-11.blog.tauceti:ubuntu .............................................. [TPGs: 1]
# | o- tpg1 .......................................................... [sin-acls-gen, sin-autenticación]
# | o- acls ..................................................................... [ACLs: 1]
# | | o- iqn.2021-07.blog.tauceti:node1 .................................. [LUNs Mapeados: 1]
# | | o- mapped_lun0 ........................................ [lun0 bloque/lun_node1 (rw)]
# | o- luns ..................................................................... [LUNs: 1]
# | | o- lun0 ............................. [bloque/lun_node1 (/dev/vdb) (default_tg_pt_gp)]
# | o- portals ............................................................... [Portales: 1]
# | o- 0.0.0.0:3260 ................................................................ [OK]
# o- loopback .................................................................... [Objetivos: 0]
# o- vhost ....................................................................... [Objetivos: 0]
# o- xen-pvscsi .................................................................. [Objetivos: 0]
iscsi_targets.name
especifica el nombre del objetivo iSCSI (el servidor iSCSI, por así decirlo). Como puedes ver, esta entrada aparecerá bajo el nodo iscsi
en la salida de targetcli
.
disks
crea uno o más objeto(s) de almacenamiento en bloque. En este caso, se llamará lun_node1
, el ID de LUN será 0
. El tipo de almacenamiento será un dispositivo block
que en este caso se encuentra en /dev/vdb
. Este dispositivo también puede (y quizás incluso deba) ser un volumen lógico, por supuesto.
initiators
define todos los iniciadores iSCSI (los clientes iSCSI) que desean acceder al objetivo iSCSI especificado anteriormente. Cada host iniciador iSCSI (cliente) que desee conectarse al objetivo iSCSI (servidor) necesita una entrada aquí. El nombre del iniciador iSCSI normalmente se puede encontrar en /etc/iscsi/initiatorname.iscsi
en cada iniciador (cliente) después de que se haya instalado el paquete open-iscsi
. El objeto authentication
contiene solo userid
y password
, y opcionalmente también userid_mutual
más password_mutual
.
mapped_luns
asigna LUNs mapeados (unidades lógicas) al iniciador. Normalmente, mapped_lunid
y lunid
coinciden con el mismo lunid
en iscsi_targets.disks
, pero también podría ser diferente.
portals
permite especificar la dirección IP en la que el servicio objetivo iSCSI debe escuchar. Por ejemplo, si se especifica 0.0.0.0
, entonces el servicio escuchará en todas las interfaces en el puerto 3260
. Por supuesto, también se pueden usar hechos de Ansible, por ejemplo, {{ ansible_default_ipv4.address | default(ansible_all_ipv4_addresses[0]) }}
.
#######################################
# Configuraciones relevantes solo para Archlinux
#######################################
# Se necesita el paquete "targetcli-fb" para configurar el objetivo iSCSI. Para Archlinux
# este paquete necesita ser instalado desde AUR. Esto requiere un ayudante de instalación AUR
# como "yay", "paru", "pacaur", "trizen" o "pikaur". Si tal ayudante
# ya está instalado en el host de destino, entonces no hay necesidad de instalarlo
# a través de este rol. En este caso, "iscsi_archlinux_aur_helper" debe ser
# configurado como "" (cadena vacía) y este rol omitirá la instalación de un ayudante AUR.
# La tarea de instalación elige uno de los ayudantes AUR mencionados arriba (en ese orden)
# para instalar los paquetes iSCSI.
iscsi_archlinux_aur_helper: yay
# Mientras que Ansible espera conectarse por SSH como root, makepkg o ayudantes AUR no permiten
# ejecutar operaciones como root, fallan con "no puedes realizar esta
# operación como root". Por lo tanto, se recomienda tener un usuario que
# no sea root pero que no necesite contraseña. Si la variable "iscsi_archlinux_aur_helper"
# está configurada, se supone que el usuario ayudante AUR no existe aún
# por lo que se creará. El usuario será parte del grupo "wheel".
iscsi_archlinux_aur_helper_user: aur_builder
Dependencias
Para Archlinux, se utiliza la colección de Ansible kewlfft.aur para 1) instalar un ayudante AUR como yay y 2) instalar la utilidad targetcli del Archlinux User Repository.
Ejemplo de Playbook
- hosts: tu-host
become: true
gather_facts: true
roles:
- githubixx.iscsi_target
vars:
iscsi_targets:
- name: "iqn.2021-11.blog.tauceti:{{ ansible_facts['nodename'] }}"
disks:
- name: lun_node1
path: /dev/vdb
type: block
lunid: 0
initiators:
- name: iqn.2021-07.blog.tauceti:node1
authentication:
userid: node1user
password: node1pw
userid_mutual: node1sharedkey
password_mutual: node1sharedsecret
mapped_luns:
- mapped_lunid: 0
lunid: 0
portals:
- ip: "0.0.0.0"
Pruebas
Este rol tiene una pequeña configuración de prueba que se crea utilizando Molecule, libvirt (vagrant-libvirt) y QEMU/KVM. Por favor, consulta mi publicación en el blog Testing Ansible roles with Molecule, libvirt (vagrant-libvirt) and QEMU/KVM para saber cómo configurarlo. La configuración de prueba se encuentra aquí.
Después, se puede ejecutar molecule:
molecule converge
Esto configurará algunas máquinas virtuales (VM) con diferentes sistemas operativos Linux compatibles e instalará el rol iscsi_target
.
Para ejecutar algunas pruebas:
molecule verify
Para limpiar, ejecuta
molecule destroy
Licencia
MIT/BSD
Información del autor
Autor original: Ondrej Famera ansible.targetcli
Autor adicional: Ricardo Sanchez ansible-role-iscsi_target
Autor adicional (versión de este rol): https://www.tauceti.blog
ansible-galaxy install githubixx.iscsi_target