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
ansible-galaxy install githubixx.iscsi_target