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
オブジェクトには、userid
とpassword
、およびオプションでuserid_mutual
とpassword_mutual
が含まれます。
mapped_luns
は、イニシエータにマッピングされたLUN(論理ユニット)を割り当てます。通常、mapped_lunid
とlunid
はiscsi_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