githubixx.iscsi_target

ansible-role-iscsi_target

Ce rôle configure une cible iSCSI basée sur Linux-LIO sur un hôte Linux en utilisant targetcli. De plus, ce rôle inclut des modules Python pour interagir avec la commande targetcli, qui peuvent être utilisés séparément pour des tâches plus avancées. Les modules permettent de vérifier, créer et supprimer.

Testé avec :

  • Ubuntu 20.04
  • Ubuntu 22.04
  • Archlinux

La documentation sur LIO et Target est disponible ici.

Exigences

Ce rôle ne crée pas de disques/partitions/LVs. On s'attend à ce qu'ils soient déjà présents sur la machine ou créés par un autre rôle. Par exemple : githubixx.lvm.

Journal des modifications

voir CHANGELOG

Variables de rôle

# La ou les cibles iSCSI sont configurées via la variable imbriquée "iscsi_targets".
# Une configuration minimale ressemble à cet exemple :
#
# 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"
#
# Pour plus d'informations, voir le README.
iscsi_targets: []

La configuration ci-dessus créera une configuration iSCSI qui ressemblera à ceci (Sortie générée avec targetcli 'ls'):

# o- / .................................................................................... [...]
#   o- backstores ......................................................................... [...]
#   | o- block ............................................................. [Objets de stockage : 1]
#   | | o- lun_node1 ................................... [/dev/vdb (1.0GiB) écriture activée]
#   | |   o- alua .............................................................. [Groupes ALUA : 1]
#   | |     o- default_tg_pt_gp .................................. [État ALUA : Actif/optimisé]
#   | o- fileio ............................................................ [Objets de stockage : 0]
#   | o- pscsi ............................................................. [Objets de stockage : 0]
#   | o- ramdisk ........................................................... [Objets de stockage : 0]
#   o- iscsi ....................................................................... [Cibles : 1]
#   | o- iqn.2021-11.blog.tauceti:ubuntu .............................................. [TPGs : 1]
#   |   o- tpg1 .......................................................... [pas de gen-acls, pas d'auth]
#   |     o- acls ..................................................................... [ACLs : 1]
#   |     | o- iqn.2021-07.blog.tauceti:node1 .................................. [LUNs mappés : 1]
#   |     |   o- mapped_lun0 ........................................ [lun0 bloc/lun_node1 (rw)]
#   |     o- luns ..................................................................... [LUNs : 1]
#   |     | o- lun0 ............................. [bloc/lun_node1 (/dev/vdb) (default_tg_pt_gp)]
#   |     o- portals ............................................................... [Portails : 1]
#   |       o- 0.0.0.0:3260 ................................................................ [OK]
#   o- loopback .................................................................... [Cibles : 0]
#   o- vhost ....................................................................... [Cibles : 0]
#   o- xen-pvscsi .................................................................. [Cibles : 0]

iscsi_targets.name spécifie le nom de la cible iSCSI (le serveur iSCSI, en quelque sorte). Comme vous pouvez le voir ci-dessus, cette entrée apparaîtra sous le nœud iscsi dans la sortie de targetcli.

disks crée un ou plusieurs objets de stockage bloc. Dans ce cas, il sera appelé lun_node1, l'ID LUN sera 0. Le type de stockage sera un dispositif block, qui dans ce cas se trouve à /dev/vdb. Ce dispositif peut (et devrait même) bien sûr être un volume logique.

initiators définit tous les initiateurs iSCSI (les clients iSCSI - si vous le souhaitez - qui veulent accéder à la cible iSCSI spécifiée ci-dessus). Chaque hôte initiateur iSCSI (client) qui veut se connecter à la cible iSCSI (serveur) doit avoir une entrée ici. Le nom de l'initiateur iSCSI se trouve normalement dans /etc/iscsi/initiatorname.iscsi sur chaque initiateur (client) après l'installation du package open-iscsi. L'objet authentication contient soit uniquement userid et password, soit également optionnellement userid_mutual et password_mutual.

mapped_luns assigne les LUNs (unités logiques) mappées à l'initiateur. Normalement, mapped_lunid et lunid correspondent au même lunid dans iscsi_targets.disks, mais cela peut également être différent.

portals permet de spécifier l'adresse IP sur laquelle le service de cible iSCSI doit écouter. Par exemple, si 0.0.0.0 est spécifié, alors le service écoutera sur toutes les interfaces sur le port 3260. Bien sûr, les faits Ansible peuvent également être utilisés, par exemple {{ ansible_default_ipv4.address | default(ansible_all_ipv4_addresses[0]) }}.

#######################################
# Paramètres uniquement pertinents pour Archlinux
#######################################

# Le package "targetcli-fb" est nécessaire pour configurer la cible iSCSI. Pour Archlinux,
# ce package doit être installé à partir de l'AUR. Cela nécessite un helper d'installation AUR
# comme "yay", "paru", "pacaur", "trizen" ou "pikaur". Si un tel helper
# est déjà installé sur l'hôte cible, il n'est pas nécessaire de l'installer
# via ce rôle. Dans ce cas, "iscsi_archlinux_aur_helper" doit être
# défini sur "" (chaîne vide) et ce rôle ignorera l'installation d'un helper AUR.
# La tâche d'installation choisit l'un des helpers AUR mentionnés ci-dessus (dans cet ordre)
# pour installer les packages iSCSI.
iscsi_archlinux_aur_helper: yay

# Bien qu'Ansible s'attende à se connecter en SSH en tant que root, makepkg ou les helpers AUR n'autorisent pas
# l'exécution d'opérations en tant que root, cela échoue avec "vous ne pouvez pas effectuer cette
# opération en tant que root". Il est donc recommandé d'avoir un utilisateur, qui
# soit non-root mais n'ait pas besoin de mot de passe. Si la variable "iscsi_archlinux_aur_helper"
# est définie, on suppose que l'utilisateur du helper AUR n'existe pas encore
# donc il sera créé. L'utilisateur fera partie du groupe "wheel".
iscsi_archlinux_aur_helper_user: aur_builder

Dépendances

Pour Archlinux, la collection Ansible kewlfft.aur est utilisée pour 1) installer un helper AUR comme yay et 2) installer l'utilitaire targetcli depuis le dépôt d’utilisateur Archlinux.

Exemple de Playbook

- hosts: votre-hôte
  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"

Tests

Ce rôle a une petite configuration de test qui est créée en utilisant Molecule, libvirt (vagrant-libvirt) et QEMU/KVM. Veuillez consulter mon article de blog Tester les rôles Ansible avec Molecule, libvirt (vagrant-libvirt) et QEMU/KVM pour savoir comment configurer. La configuration de test est ici.

Ensuite, Molecule peut être exécuté :

molecule converge

Cela mettra en place quelques machines virtuelles (VM) avec différents systèmes d'exploitation Linux pris en charge et installera le rôle iscsi_target.

Pour exécuter quelques tests :

molecule verify

Pour nettoyer, exécutez

molecule destroy

Licence

MIT/BSD

Informations sur l'auteur

Auteur original : Ondrej Famera ansible.targetcli
Auteur supplémentaire : Ricardo Sanchez ansible-role-iscsi_target
Auteur supplémentaire (version de ce rôle) : https://www.tauceti.blog

À propos du projet

Configure iSCSI target role

Installer
ansible-galaxy install githubixx.iscsi_target
Licence
mit
Téléchargements
4.5k
Propriétaire
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)