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