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

Acerca del proyecto

Configure iSCSI target role

Instalar
ansible-galaxy install githubixx.iscsi_target
Licencia
mit
Descargas
4.5k
Propietario
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)