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

О проекте

Configure iSCSI target role

Установить
ansible-galaxy install githubixx/ansible-role-iscsi_target
Лицензия
mit
Загрузки
2884
Владелец
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)