githubixx.iscsi_target

ansible-role-iscsi_target

このロールは、targetcliを使用してLinuxホスト上にLinux-LIOベースのiSCSIターゲットを設定します。さらに、このロールにはtargetcliコマンドと対話するためのPythonモジュールが含まれており、これを使用してより高度な操作を行うことができます。モジュールは確認、作成、および削除の機能を実装しています。

テスト済みの環境:

  • Ubuntu 20.04
  • Ubuntu 22.04
  • Archlinux

LIOおよびターゲットに関する文書はこちらで確認できます。

要件

このロールは、ディスクやパーティション、論理ボリューム(LV)を作成しません。これらはすでにマシンに存在するか、他のロールによって作成されることが期待されています。例えば、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サーバーです)。上記のように、このエントリはtargetcli出力のiscsiノードの下に表示されます。

disksは1つ以上のブロックストレージオブジェクトを作成します。この場合、lun_node1と呼ばれ、LUN IDは0になります。ストレージタイプはブロックデバイスで、この場合は/dev/vdbにあります。このデバイスはもちろん論理ボリュームでもかまいません。

initiatorsはすべてのiSCSIイニシエータ(iSCSIターゲットにアクセスしたいiSCSIクライアント)を定義します。iSCSIターゲットに接続したいすべてのiSCSIイニシエータホスト(クライアント)は、ここにエントリを持つ必要があります。iSCSIイニシエータ名は、通常open-iscsiパッケージがインストールされた後、各イニシエータ(クライアント)の/etc/iscsi/initiatorname.iscsiにあります。authenticationオブジェクトには、useridpassword、およびオプションでuserid_mutualpassword_mutualが含まれます。

mapped_lunsは、イニシエータにマッピングされたLUN(論理ユニット)を割り当てます。通常、mapped_lunidlunidiscsi_targets.disks内の同じlunidと一致しますが、異なる場合もあります。

portalsは、iSCSIターゲットサービスがリッスンすべきIPアドレスを指定できます。たとえば、0.0.0.0を指定した場合、サービスはポート3260ですべてのインターフェースでリッスンします。もちろん、Ansibleのファクトも使用できます。例:{{ ansible_default_ipv4.address | default(ansible_all_ipv4_addresses[0]) }}

#######################################
# Archlinuxに関連する設定のみ
#######################################

# iSCSIターゲットを設定するためには「targetcli-fb」パッケージが必要です。Archlinuxの場合、
# このパッケージはAURからインストールする必要があります。これには「yay」、「paru」、「pacaur」、「trizen」、「pikaur」
# などのAURインストールヘルパーが必要です。このヘルパーがターゲットホストにすでにインストールされている場合は、
# このロールを使用してインストールする必要はありません。この場合、「iscsi_archlinux_aur_helper」
# 変数を空("")に設定し、このロールはAURヘルパーのインストールをスキップします。
# インストールタスクは、上記に示したAURヘルパーのいずれかを選び、
# iSCSIパッケージをインストールします。
iscsi_archlinux_aur_helper: yay

# AnsibleはrootとしてSSH接続を期待していますが、makepkgやAURヘルパーは
# rootとしての操作を許可しないため、「rootとしてこの操作を行うことはできません」と失敗します。
# したがって、パスワードが不要な非rootユーザーを持つことをお勧めします。
# 「iscsi_archlinux_aur_helper」変数が設定されている場合、AURヘルパーユーザーはまだ存在しないとみなされるため、
# ユーザーが作成されます。このユーザーは「wheel」グループのメンバーになります。
iscsi_archlinux_aur_helper_user: aur_builder

依存関係

Archlinuxでは、kewlfft.aur Ansibleコレクションを使用して、1) yayのようなAURヘルパーをインストールし、2) Archlinuxユーザーリポジトリからtargetcliユーティリティをインストールします。

例のプレイブック

- 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を使用して作成された小さなテストセットアップがあります。セットアップ方法については私のブログ投稿Testing Ansible roles with Molecule, libvirt (vagrant-libvirt) and QEMU/KVMを参照してください。テスト構成はこちらで確認できます。

その後、Moleculeを実行できます:

molecule converge

これは、異なるサポートされているLinuxオペレーティングシステムを持ついくつかの仮想マシン(VM)をセットアップし、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.iscsi_target
ライセンス
mit
ダウンロード
4.5k
所有者
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)