githubixx.iscsi_target

ansible-role-iscsi_target

Diese Rolle konfiguriert ein auf Linux-LIO basierendes iSCSI-Ziel auf einem Linux-Host mithilfe von targetcli. Zusätzlich enthält diese Rolle Python-Module, die mit dem targetcli-Befehl interagieren können, die auch separat für fortgeschrittene Aufgaben verwendet werden können. Die Module ermöglichen das Überprüfen, Erstellen und Löschen.

Getestet mit:

  • Ubuntu 20.04
  • Ubuntu 22.04
  • Archlinux

Dokumentation über LIO und Targets finden Sie hier.

Anforderungen

Diese Rolle erstellt keine Festplatten/Partitionen/LVs. Es wird erwartet, dass sie bereits auf dem Rechner vorhanden sind oder von einer anderen Rolle erstellt wurden. Zum Beispiel: githubixx.lvm.

Änderungsprotokoll

siehe CHANGELOG

Rollen-Variablen

# Die iSCSI-Ziel(e) werden über die verschachtelte Variable "iscsi_targets" konfiguriert.
# Ein sehr minimalistisches Setup sieht so aus:
#
# 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"
#
# Weitere Informationen finden Sie in der README.
iscsi_targets: []

Die obige Konfiguration erstellt ein iSCSI-Setup, das so aussieht (Ausgabe generiert mit targetcli 'ls'):

# o- / .................................................................................... [...]
#   o- backstores ......................................................................... [...]
#   | o- block ............................................................. [Speicherobjekte: 1]
#   | | o- lun_node1 ................................... [/dev/vdb (1.0GiB) Schreib-Cache aktiviert]
#   | |   o- alua .............................................................. [ALUA-Gruppen: 1]
#   | |     o- default_tg_pt_gp .................................. [ALUA-Zustand: Aktiv/optimiert]
#   | o- fileio ............................................................ [Speicherobjekte: 0]
#   | o- pscsi ............................................................. [Speicherobjekte: 0]
#   | o- ramdisk ........................................................... [Speicherobjekte: 0]
#   o- iscsi ....................................................................... [Ziele: 1]
#   | o- iqn.2021-11.blog.tauceti:ubuntu .............................................. [TPGs: 1]
#   |   o- tpg1 .......................................................... [keine-gen-acls, keine-auth]
#   |     o- acls ..................................................................... [ACLs: 1]
#   |     | o- iqn.2021-07.blog.tauceti:node1 .................................. [Zugeordnete LUNs: 1]
#   |     |   o- mapped_lun0 ........................................ [lun0 block/lun_node1 (rw)]
#   |     o- luns ..................................................................... [LUNs: 1]
#   |     | o- lun0 ............................. [block/lun_node1 (/dev/vdb) (default_tg_pt_gp)]
#   |     o- portals ............................................................... [Portale: 1]
#   |       o- 0.0.0.0:3260 ................................................................ [OK]
#   o- loopback .................................................................... [Ziele: 0]
#   o- vhost ....................................................................... [Ziele: 0]
#   o- xen-pvscsi .................................................................. [Ziele: 0]

iscsi_targets.name gibt den Namen des iSCSI-Ziels an (sozusagen der iSCSI-Server). Wie oben zu sehen, wird dieser Eintrag unter dem iscsi-Knoten in der targetcli-Ausgabe angezeigt.

disks erstellt ein oder mehrere Blockspeicherobjekte. In diesem Fall wird es lun_node1 heißen, und die LUN-ID wird 0 sein. Der Speichertyp wird ein Blockgerät sein, das sich in diesem Fall unter /dev/vdb befindet. Dieses Gerät kann (und sollte vielleicht sogar) auch ein logisches Volume sein.

initiators definiert alle iSCSI-Initiatoren (die iSCSI-Clients), die auf das oben angegebene iSCSI-Ziel zugreifen möchten. Jeder iSCSI-Initiator-Host (Client), der eine Verbindung zum iSCSI-Ziel (Server) herstellen möchte, benötigt hier einen Eintrag. Der iSCSI-Initiatorname kann normalerweise in /etc/iscsi/initiatorname.iscsi auf jedem Initiator (Client) gefunden werden, nachdem das open-iscsi-Paket installiert wurde. Das authentication-Objekt enthält entweder nur userid und password und optional auch userid_mutual sowie password_mutual.

mapped_luns weist die zugeordnete LUN (logische Einheiten) dem Initiator zu. Normalerweise stimmen mapped_lunid und lunid mit der gleichen lunid in iscsi_targets.disks überein. Es könnte aber auch unterschiedlich sein.

portals ermöglicht es, die IP-Adresse anzugeben, auf der der iSCSI-Zieldienst hören soll. Wenn z.B. 0.0.0.0 angegeben ist, hört der Dienst auf allen Schnittstellen am Port 3260. Natürlich können auch Ansible-Fakten verwendet werden, z.B. {{ ansible_default_ipv4.address | default(ansible_all_ipv4_addresses[0]) }}.

#######################################
# Einstellungen nur für Archlinux relevant
#######################################

# Das Paket "targetcli-fb" ist erforderlich, um das iSCSI-Ziel zu konfigurieren. Für Archlinux
# muss dieses Paket aus dem AUR installiert werden. Dies erfordert einen AUR-Install
# Helfer wie "yay", "paru", "pacaur", "trizen" oder "pikaur". Wenn ein solcher Helfer
# bereits auf dem Zielrechner installiert ist, besteht keine Notwendigkeit, ihn
# über diese Rolle zu installieren. In diesem Fall muss "iscsi_archlinux_aur_helper"
# auf "" (leerer String) gesetzt werden, und diese Rolle überspringt die Installation eines AUR-Helfers.
# Die Installationsaufgabe wählt einen der oben genannten AUR-Helfer (in dieser Reihenfolge)
# aus, um die iSCSI-Pakete zu installieren.
iscsi_archlinux_aur_helper: yay

# Während Ansible erwartet, dass als root über SSH zugegriffen wird, erlauben 
# makepkg oder AUR-Helfer es nicht, Operationen als root auszuführen, 
# sie scheitern mit "Sie können diese Operation nicht als root ausführen". 
# Es wird daher empfohlen, einen Benutzer zu haben, der kein root ist, 
# aber kein Passwort benötigt. Wenn die Variable "iscsi_archlinux_aur_helper"
# gesetzt ist, wird davon ausgegangen, dass der AUR-Helfer-Benutzer noch nicht existiert,
# daher wird er erstellt. Der Benutzer wird Teil der Gruppe "wheel" sein.
iscsi_archlinux_aur_helper_user: aur_builder

Abhängigkeiten

Für Archlinux wird die Ansible-Sammlung kewlfft.aur verwendet, um 1) einen AUR-Helfer wie yay zu installieren und 2) das Dienstprogramm targetcli aus dem Archlinux User Repository zu installieren.

Beispiel-Playbook

- hosts: your-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"

Testen

Diese Rolle hat ein kleines Test-Setup, das mit Molecule, libvirt (vagrant-libvirt) und QEMU/KVM erstellt wurde. Bitte sehen Sie meinen Blogbeitrag Testing Ansible roles with Molecule, libvirt (vagrant-libvirt) and QEMU/KVM, wie man es einrichtet. Die Testkonfiguration befindet sich hier.

Anschließend kann Molecule ausgeführt werden:

molecule converge

Dies richtet einige virtuelle Maschinen (VM) mit verschiedenen unterstützten Linux-Betriebssystemen ein und installiert die iscsi_target-Rolle.

Um einige Tests durchzuführen:

molecule verify

Um aufzuräumen, führen Sie aus:

molecule destroy

Lizenz

MIT/BSD

Autorinformationen

Ursprünglicher Autor: Ondrej Famera ansible.targetcli
Zusätzlicher Autor: Ricardo Sanchez ansible-role-iscsi_target
Zusätzlicher Autor (diese Rollen-Version): https://www.tauceti.blog

Über das Projekt

Configure iSCSI target role

Installieren
ansible-galaxy install githubixx.iscsi_target
GitHub Repository
Lizenz
mit
Downloads
4.5k
Besitzer
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)