githubixx.iscsi_target

ansible-role-iscsi_target

Ten zestaw ról konfiguruje podstawowy serwer iSCSI oparty na Linux-LIO na hoście Linux, używając targetcli. Dodatkowo zawiera moduły Pythona do interakcji z komendą targetcli, które można używać osobno do bardziej zaawansowanych zadań. Moduły implementują sprawdzanie, tworzenie i usuwanie.

Testowane z:

  • Ubuntu 20.04
  • Ubuntu 22.04
  • Archlinux

Dokumentację na temat LIO i Target można znaleźć tutaj.

Wymagania

Ten zestaw ról nie tworzy żadnych dysków/partycji/LV. Oczekuje się, że są już obecne na maszynie lub utworzone przez inną rolę. Na przykład: githubixx.lvm.

Dziennik zmian

zobacz CHANGELOG

Zmienne roli

# Serwer iSCSI(y) jest konfigurowany za pomocą zagnieżdżonej zmiennej "iscsi_targets".
# Przykładowa minimalna konfiguracja wygląda tak:
#
# 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"
#
# Więcej informacji w README.
iscsi_targets: []

Powyższa konfiguracja utworzy ustawienia iSCSI, które będą wyglądać tak (Wynik wygenerowany za pomocą targetcli 'ls'):

# o- / .................................................................................... [...]
#   o- backstores ......................................................................... [...]
#   | o- block ............................................................. [Obiekty przechowywania: 1]
#   | | o- lun_node1 ................................... [/dev/vdb (1.0GiB) włączony tryb pisania]
#   | |   o- alua .............................................................. [Grupy ALUA: 1]
#   | |     o- default_tg_pt_gp .................................. [Stan ALUA: Aktywny/ zoptymalizowany]
#   | o- fileio ............................................................ [Obiekty przechowywania: 0]
#   | o- pscsi ............................................................. [Obiekty przechowywania: 0]
#   | o- ramdisk ........................................................... [Obiekty przechowywania: 0]
#   o- iscsi ....................................................................... [Cele: 1]
#   | o- iqn.2021-11.blog.tauceti:ubuntu .............................................. [TPGs: 1]
#   |   o- tpg1 .......................................................... [bez-gen-acls, bez-autoryzacji]
#   |     o- acls ..................................................................... [ACLy: 1]
#   |     | o- iqn.2021-07.blog.tauceti:node1 .................................. [Przypisane LUNy: 1]
#   |     |   o- mapped_lun0 ........................................ [lun0 blok/lun_node1 (rw)]
#   |     o- luns ..................................................................... [LUNy: 1]
#   |     | o- lun0 ............................. [blok/lun_node1 (/dev/vdb) (default_tg_pt_gp)]
#   |     o- portals ............................................................... [Portale: 1]
#   |       o- 0.0.0.0:3260 ................................................................ [OK]
#   o- loopback .................................................................... [Cele: 0]
#   o- vhost ....................................................................... [Cele: 0]
#   o- xen-pvscsi .................................................................. [Cele: 0]

iscsi_targets.name określa nazwę serwera iSCSI (można powiedzieć, że to serwer iSCSI). Jak widać powyżej, ten wpis pojawi się pod węzłem iscsi w wyjściu targetcli.

disks tworzy jeden lub więcej obiektów przechowywania blokowego. W tym przypadku będzie nazywać się lun_node1, a identyfikator LUN to 0. Typ przechowywania to urządzenie block, które w tym przypadku znajduje się w /dev/vdb. To urządzenie może (a może nawet powinno) być również wolumenem logicznym.

initiators definiuje wszystkie inicjatory iSCSI (klienci iSCSI - jeśli chcesz - które chcą uzyskać dostęp do określonego wyżej serwera iSCSI). Każdy host inicjatora iSCSI (klient), który chce połączyć się z serwerem iSCSI, musi mieć tutaj wpis. Nazwę inicjatora iSCSI można normalnie znaleźć w /etc/iscsi/initiatorname.iscsi na każdym inicjatorze (kliencie) po zainstalowaniu pakietu open-iscsi. Obiekt authentication zawiera albo tylko userid i password, a opcjonalnie również userid_mutual i password_mutual.

mapped_luns przypisuje przypisane LUNy (jednostki logiczne) do inicjatora. Zwykle mapped_lunid i lunid odpowiadają temu samemu lunid w iscsi_targets.disks. Ale może być też inaczej.

portals pozwala określić adres IP, na którym usługa serwera iSCSI powinna nasłuchiwać. Na przykład, jeśli podano 0.0.0.0, to usługa będzie nasłuchiwać na wszystkich interfejsach na porcie 3260. Oczywiście można również użyć faktów Ansible, np. {{ ansible_default_ipv4.address | default(ansible_all_ipv4_addresses[0]) }}.

#######################################
# Ustawienia tylko dla Archlinux
#######################################

# Pakiet "targetcli-fb" jest potrzebny do skonfigurowania serwera iSCSI. Dla Archlinux
# pakiet ten musi być zainstalowany z AUR. To wymaga wsparcia przy instalacji AUR
# jak "yay", "paru", "pacaur", "trizen" lub "pikaur". Jeśli taki pomocnik
# jest już zainstalowany na hoście docelowym, nie ma potrzeby jego instalacji
# za pomocą tej roli. W takim przypadku zmienną "iscsi_archlinux_aur_helper" 
# należy ustawić na "" (pusty ciąg), a ta rola pominie instalację pomocnika AUR.
# Zadne zadanie instalacji wybiera jednego z wymienionych powyżej AUR pomocników (w tej kolejności)
# do instalacji pakietów iSCSI.
iscsi_archlinux_aur_helper: yay

# Chociaż Ansible oczekuje połączenia przez SSH jako root, makepkg lub pomocnicy AUR
# nie pozwalają na wykonywanie operacji jako root, powodując błąd "nie można
# wykonać tej operacji jako root". Dlatego zaleca się posiadanie użytkownika, który
# jest nie-rouot, ale nie wymaga hasła. Jeśli zmienna "iscsi_archlinux_aur_helper"
# jest ustawiona, zakłada się, że użytkownik pomocnika AUR jeszcze nie istnieje,
# więc zostanie utworzony. Użytkownik będzie częścią grupy "wheel".
iscsi_archlinux_aur_helper_user: aur_builder

Zależności

Dla Archlinux kolekcja Ansible kewlfft.aur jest używana do 1) instalacji pomocnika AUR, takiego jak yay oraz 2) do instalacji narzędzia targetcli z Archlinux User Repository.

Przykładowy Playbook

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

Testowanie

Ten zestaw ról ma małe środowisko testowe, które jest tworzone przy użyciu Molecule, libvirt (vagrant-libvirt) i QEMU/KVM. Proszę zobaczyć mój post na blogu Testowanie ról Ansible z Molecule, libvirt (vagrant-libvirt) i QEMU/KVM, jak skonfigurować to środowisko. Konfiguracja testowa znajduje się tutaj.

Następnie można uruchomić molekuły:

molecule converge

To skonfiguruje kilka maszyn wirtualnych (VM) z różnymi wspieranymi systemami operacyjnymi Linux i zainstaluje rolę iscsi_target.

Aby przeprowadzić kilka testów:

molecule verify

Aby wyczyścić zainstalowane elementy, uruchom

molecule destroy

Licencja

MIT/BSD

Informacje o autorze

Oryginalny autor: Ondrej Famera ansible.targetcli
Dodatkowy autor: Ricardo Sanchez ansible-role-iscsi_target
Dodatkowy autor (ta wersja roli): https://www.tauceti.blog

O projekcie

Configure iSCSI target role

Zainstaluj
ansible-galaxy install githubixx.iscsi_target
Licencja
mit
Pobrania
4.5k
Właściciel
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)