githubixx.lvm
ansible-role-lvm
このAnsibleロールは、Linuxの論理ボリュームマネージャー (LVM) のリソースをインストールします。これには ボリュームグループ (VG) や 論理ボリューム (LV) の作成、ファイルシステム の作成と マウントポイント の管理が含まれます。
更新履歴
CHANGELOG を参照してください。
ロール変数
デフォルトでは、LVMリソースは作成されません。以下の例を参照してください。lvm_vgs キーは作成するすべてのLVMリソースのエントリポイントです。
lvm_vgs: []
まず、LVMリソースの作成に関するいくつかの例を示します(削除の方法については下記参照)。
物理ボリューム /dev/vdb を使用して test-vg-01 というボリュームグループ (VG) を作成します:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
3つのパラメータは必須です! vgname はボリュームグループの名前です。 pvs はこのボリュームグループに使用する物理デバイスのリストです。 state はボリュームグループが存在するかどうかを制御します。
VGを削除するには、state: absent と force: true を指定する必要があります。これに対し、community.general.lvg モジュールの force パラメータは、論理ボリュームを含むVGを削除することはありません!これは、データを誤って削除するのを防ぐためです。
物理ボリューム /dev/vdb と /dev/vdc を使用して test-vg-01 というボリュームグループ (VG) を作成します:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb,/dev/vdc
state: present
現在、次の追加のcommunity.general.lvgパラメータがサポートされています:
前の例と同様ですが、論理ボリューム test-lv-01 を作成し、使用可能なVGスペースの 10% を割り当てます:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
ボリュームグループに含まれるすべての論理ボリュームは、lvm_lvs キーの下にリストされます。lvname、size、および stateパラメータは必須です! lvname は論理ボリュームの名前です。 sizeは論理ボリュームのサイズを指定します。デフォルトではメガバイト単位で、オプションで [bBsSkKmMgGtTpPeE] の単位が使用できます。 state は、論理ボリュームが存在するかどうかを制御します。LVを削除するには、state: absent と force: true を指定する必要があります。
現在、以下の追加のcommunity.general.lvolパラメータもサポートされています:
前の例と同様ですが、論理ボリューム test-lv-01 をデバイスとして使用して ext4 ファイルシステムを作成します:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
fs:
type: ext4
state: present
fs キーは、論理ボリュームにファイルシステムを含めるべきことを指定します。 type は使用するファイルシステムを指定します。 state: present は、ファイルシステムがすでに存在しない場合は作成されることを示します。 state: absent の場合、デバイスにファイルシステムが含まれている場合、その署名は消去されます(blkidで知られているように)。 state: absent の場合、デバイス以外のすべてのオプションは無視され、デバイスが実際に存在しなくてもモジュールは失敗しません。また、state: absentの場合、force: true が必要です。そうしないと、ファイルシステムは影響を受けません。 community.general.filesystem モジュールの force パラメータとは異なり、force: true によって既存のファイルシステムが上書きされることはありません。新しいファイルシステムを作成するには、古いものを最初に消去する必要があります!これも誤って削除するのを避けるためです。
前の例と同様ですが、 /mnt1 ディレクトリを作成し、そこで ext4 ファイルシステムをマウントします。これにより /etc/fstab にもエントリが作成されます(デフォルトで)。
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
fs:
type: ext4
state: present
mountpoint:
state: mounted
path:
name: /mnt1
mountpoint キーは、マウントポイントに関連するアクションを管理します。 state は、ansible.posix.mount モジュールが提供するものと同じオプション (mounted, absent, present, unmounted, remounted) を持っています。 state と path.name は必須です。 path.name はマウントポイントとしてマウントされるディレクトリの名前を指定します。ディレクトリが存在しない場合は、自動的に作成されます。今後のオプションについては次の例を参照してください。
前の例と同様ですが、ファイルシステムにラベル mnt1 が追加されます。また、ファイルシステムは noatime ファイルシステムオプションで /mnt1 にマウントされます。このファイルシステムは、ラベルを使用してマウントされます(src: LABEL=mnt1)。 /mnt1 ディレクトリの owner と group は vagrant に設定され、ディレクトリのパーミッションは 0750 になります:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
lvm_lvs:
- lvname: test-lv-01
size: 10%VG
state: present
fs:
type: ext4
opts: -L mnt1
state: present
mountpoint:
opts: noatime
state: mounted
src: LABEL=mnt1
path:
name: /mnt1
mode: '0750'
owner: vagrant
group: vagrant
デフォルトでは、 mountpoint.src は /dev/ + vgname + / + lvname になります。上記の例では LABEL=mnt1 が使用されました。opts: -L mnt では、そのラベルを持つファイルシステムを作成するオプションが提供されました。これにより、後で mountpoint.src に使用できます。
mountpoint は次の追加パラメータをサポートしています:
物理ボリューム /dev/vdb と /dev/vdc を使用して、test-vg-01 と test-vg-02 という2つのボリュームグループ (VG) を作成します:
lvm_vgs:
- vgname: test-vg-01
pvs: /dev/vdb
state: present
- vgname: test-vg-02
pvs: /dev/vdc
state: present
マウントポイントをアンマウントし、/etc/fstab からそのエントリを削除する例を示します:
mountpoint:
state: absent
path:
name: /vg01lv01
これはもちろん、マウントポイントがプログラムやサービスによって使用されていない場合のみ機能します。
ファイルシステム、論理ボリューム (LV) やボリュームグループ (VG) の削除はデータを破壊する可能性があるため、特に注意が必要です。この場合、リソースを削除するために state: absent を指定するだけでは不十分です。 force: true も必要です。当然のことながら、まだ論理ボリュームを含むボリュームグループを削除することは失敗します。また、ファイルシステムがある論理ボリュームを state: present で削除することも失敗します。
以下の例では、指定されたマウントポイント(/vg02lv01)をアンマウントし、/etc/fstab からそのエントリを削除し、ext4 ファイルシステムを消去し、論理ボリューム (vg02lv01) を削除し、最後にボリュームグループ (vg02) を削除します(この順序で):
lvm_vgs:
- vgname: vg02
pvs: /dev/vdc
state: absent
force: true
lvm_lvs:
- lvname: vg02lv01
size: 10%VG
state: absent
force: true
fs:
type: ext4
state: absent
force: true
mountpoint:
state: absent
path:
name: /vg02lv01
ファイルシステムを作成するには、追加のパッケージが必要です。 ext(2|3|4) の場合、e2fsprogs パッケージをインストールする必要があります。したがって、設定したいファイルシステムに応じて、追加のパッケージをインストールしたり、必要ないパッケージをリストから削除したりする必要があります。もちろん、インストールするパッケージをリストに追加することもできます。
デフォルトでは、 ext(2|3|4) または xfs に必要なツールのみがインストールされます。他のファイルシステムの場合は、btrfsprogs/btrfs-progs、dosfstools、f2fs-tools または reiserfsprogs が必要になる場合があります:
# SuSE 互換のOS用の追加パッケージ
additional_packages_suse:
- e2fsprogs
- xfsprogs
# Debian 互換のOS用の追加パッケージ
additional_packages_debian:
- e2fsprogs
- xfsprogs
# Redhat 互換のOS用の追加パッケージ
additional_packages_redhat:
- e2fsprogs
- xfsprogs
# Archlinux 互換のOS用の追加パッケージ
additional_packages_arch:
- e2fsprogs
- xfsprogs
一般的に、次のモジュールのほとんどのオプションがサポートされています:
community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount
依存関係
このロールは、いくつかのAnsibleモジュールに依存しています:
community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount
TODO
現在、次の機能は実装されていません:
- ボリュームグループのサイズ変更
- 論理ボリュームの縮小
- 論理ボリュームのスナップショット
- 論理ボリューム/ファイルシステムのサイズ変更
例プレイブック
例1(ロールタグなし)
- hosts: your-host
roles:
- githubixx.lvm
例2(ロールにタグを割り当てる)
-
hosts: your-host
roles:
-
role: githubixx.lvm
tags: role-lvm
さらなる例
このロールのテストに使用されるいくつかの例があります。 molecule ディレクトリを参照してください。
テスト
このロールには、Molecule、libvirt(vagrant-libvirt)およびQEMU/KVMを使用して作成された小さなテストセットアップがあります。設定方法については、私のブログ投稿 Testing Ansible roles with Molecule, libvirt (vagrant-libvirt) and QEMU/KVM を参照してください。テスト構成は こちら です。
その後、moleculeを実行できます:
molecule converge -s kvm
これにより、サポートされているさまざまなLinuxオペレーティングシステムとさまざまなLVMリソースを持つ仮想マシン(VM)がいくつかセットアップされます。
クリーンアップを行うには、次のコマンドを実行します:
molecule destroy -s kvm
