iscsi_target
ansible-role-iscsi_target
Эта роль настраивает iSCSI-цель на основе Linux-LIO на хосте Linux с помощью targetcli
. Эта роль также включает модули Python для взаимодействия с командой targetcli
, которые можно использовать отдельно для более продвинутых задач. Модули реализуют проверку, создание и удаление.
Протестировано на:
- Ubuntu 20.04
- Ubuntu 22.04
- Archlinux
Документацию по LIO и Target можно найти здесь.
Требования
Эта роль не создает диски/разделы/логические тома. Ожидается, что они уже существуют на машине или созданы какой-то другой ролью. Например: githubixx.lvm.
Журнал изменений
Смотрите CHANGELOG
Переменные роли
# iSCSI цель(и) настраиваются через вложенную переменную "iscsi_targets".
# Минимальная конфигурация выглядит так:
#
# 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"
#
# Для получения дополнительной информации смотрите README.
iscsi_targets: []
Вышеуказанная конфигурация создаст iSCSI настройку, которая будет выглядеть так (вывод сгенерирован с помощью targetcli 'ls'
):
# o- / .................................................................................... [...]
# o- backstores ......................................................................... [...]
# | o- block ............................................................. [Storage Objects: 1]
# | | o- lun_node1 ................................... [/dev/vdb (1.0GiB) write-thru activated]
# | | o- alua .............................................................. [ALUA Groups: 1]
# | | o- default_tg_pt_gp .................................. [ALUA state: Active/optimized]
# | o- fileio ............................................................ [Storage Objects: 0]
# | o- pscsi ............................................................. [Storage Objects: 0]
# | o- ramdisk ........................................................... [Storage Objects: 0]
# o- iscsi ....................................................................... [Targets: 1]
# | o- iqn.2021-11.blog.tauceti:ubuntu .............................................. [TPGs: 1]
# | o- tpg1 .......................................................... [no-gen-acls, no-auth]
# | o- acls ..................................................................... [ACLs: 1]
# | | o- iqn.2021-07.blog.tauceti:node1 .................................. [Mapped 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 ............................................................... [Portals: 1]
# | o- 0.0.0.0:3260 ................................................................ [OK]
# o- loopback .................................................................... [Targets: 0]
# o- vhost ....................................................................... [Targets: 0]
# o- xen-pvscsi .................................................................. [Targets: 0]
iscsi_targets.name
указывает имя iSCSI цели (по сути, сервера iSCSI). Как видно выше, эта запись появится под узлом iscsi
в выводе targetcli
.
disks
создает один или несколько объектов блочного хранилища. В этом случае он будет называться lun_node1
, ID LUN будет равен 0
. Тип хранилища будет блочным устройством, которое в данном случае находится по адресу /dev/vdb
. Это устройство, конечно, также может быть логическим томом.
initiators
определяет всех iSCSI инициаторов (клиентов iSCSI), которые хотят получить доступ к указанной выше iSCSI цели. Каждый хост инициатора iSCSI (клиент), который хочет подключиться к iSCSI цели (серверу), должен иметь запись здесь. Имя инициатора iSCSI обычно можно найти в /etc/iscsi/initiatorname.iscsi
на каждом инициаторе (клиенте) после установки пакета open-iscsi
. Объект authentication
содержит либо только userid
и password
, а также опционально userid_mutual
и password_mutual
.
mapped_luns
назначает сопоставленные LUN (логические единицы) для инициатора. Обычно mapped_lunid
и lunid
совпадают с тем же lunid
в iscsi_targets.disks
. Однако они также могут быть разными.
portals
позволяет указать IP-адрес, на котором служба iSCSI должна слушать. Например, если указан 0.0.0.0
, то служба будет слушать на всех интерфейсах на порту 3260
. Конечно, также можно использовать факты Ansible, например, {{ ansible_default_ipv4.address | default(ansible_all_ipv4_addresses[0]) }}
.
#######################################
# Настройки, относящиеся только к Archlinux
#######################################
# Пакет "targetcli-fb" необходим для настройки iSCSI цели. Для Archlinux
# этот пакет необходимо установить из AUR. Для этого требуется помощник
# установки AUR, например "yay", "paru", "pacaur", "trizen" или "pikaur".
# Если такой помощник уже установлен на целевом хосте, то нет необходимости
# устанавливать его через эту роль. В этом случае "iscsi_archlinux_aur_helper"
# нужно установить в "" (пустую строку), и эта роль пропустит установку помощника AUR.
# Задача установки выбирает одного из упомянутых выше помощников AUR (в этом порядке)
# для установки пакетов iSCSI.
iscsi_archlinux_aur_helper: yay
# В то время как Ansible ожидает SSH как root, makepkg или помощники AUR не разрешают
# выполнять операции как root, у них возникают ошибки с "вы не можете выполнить эту
# операцию как root". Поэтому рекомендуется создать пользователя, который
# не является root, но не требует пароля. Если переменная "iscsi_archlinux_aur_helper"
# установлена, предполагается, что пользователь помощника AUR ещё не существует,
# и он будет создан. Пользователь будет частью группы "wheel".
iscsi_archlinux_aur_helper_user: aur_builder
Зависимости
Для Archlinux используется коллекция Ansible kewlfft.aur для 1) установки помощника AUR, такого как yay, и 2) установки утилиты targetcli из пользовательского репозитория Archlinux.
Пример плейбука
- 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"
Тестирование
Эта роль имеет небольшую тестовую конфигурацию, созданную с использованием Molecule, libvirt (vagrant-libvirt) и QEMU/KVM. Пожалуйста, смотрите мой блог Тестирование ролей Ansible с Molecule, libvirt (vagrant-libvirt) и QEMU/KVM о том, как настроить. Конфигурация тестирования здесь.
После этого можно выполнить molecule:
molecule converge
Это создаст несколько виртуальных машин (VM) с различными поддерживаемыми операционными системами Linux и установит роль iscsi_target
.
Чтобы запустить несколько тестов:
molecule verify
Для очистки запустите
molecule destroy
Лицензия
MIT/BSD
Информация об авторе
Оригинальный автор: Ondrej Famera ansible.targetcli
Дополнительный автор: Ricardo Sanchez ansible-role-iscsi_target
Дополнительный автор (эта версия роли): https://www.tauceti.blog
ansible-galaxy install githubixx/ansible-role-iscsi_target