githubixx.lvm

ansible-role-lvm

Diese Ansible-Rolle installiert Linux Logical Volume Manager (LVM) Ressourcen wie Volume Groups (VG), Logical Volumes (LV) und verwaltet die Erstellung von Dateisystemen und Mountpunkten.

Changelog

Siehe CHANGELOG

Rollenvariablen

Standardmäßig werden keine LVM-Ressourcen erstellt. Siehe Beispiele unten. Der Schlüssel lvm_vgs ist der Einstiegspunkt für alle LVM-Ressourcen, die erstellt werden sollen.

lvm_vgs: []

Hier sind ein paar Beispiele zur Erstellung von LVM-Ressourcen (wie die Löschung gehandhabt wird, siehe weiter unten).

Erstelle eine Volume-Gruppe (VG) namens test-vg-01, die das Gerät /dev/vdb als physisches Volume nutzt:

lvm_vgs:
  - vgname: test-vg-01
    pvs: /dev/vdb
    state: present

Alle drei Parameter sind erforderlich! vgname ist der Name der Volume-Gruppe. pvs ist eine Liste von durch Kommas getrennten Geräten, die als physische Geräte in dieser Volume-Gruppe verwendet werden. state steuert, ob die Volume-Gruppe existiert.
Um eine VG zu löschen, müssen Sie state: absent und auch force: true angeben. Im Gegensatz zum force-Parameter des community.general.lvg Moduls löscht force: true keine VGs, die noch (eine) logische Volumen enthalten! Dies soll die versehentliche Löschung von Daten erschweren.

Erstelle eine Volume-Gruppe (VG) namens test-vg-01, die die Geräte /dev/vdb und /dev/vdc als physische Volumes nutzt:

lvm_vgs:
  - vgname: test-vg-01
    pvs: /dev/vdb,/dev/vdc
    state: present

Momentan werden die folgenden zusätzlichen community.general.lvg Parameter unterstützt:

Wie im vorherigen Beispiel, aber auch ein logisches Volume test-lv-01 erstellen und 10% des verfügbaren VG-Speichers zuweisen:

lvm_vgs:
  - vgname: test-vg-01
    pvs: /dev/vdb
    state: present
    lvm_lvs:
      - lvname: test-lv-01
        size: 10%VG
        state: present

Alle logischen Volumen, die eine Volumen-Gruppe enthält, sind unter dem Schlüssel lvm_lvs aufgeführt. Die Parameter lvname, size und state sind erforderlich! lvname ist der Name des logischen Volumens. size gibt die Größe des logischen Volumens an, basierend auf lvcreate(8) --size, standardmäßig in Megabyte oder optional mit einer der [bBsSkKmMgGtTpPeE] Einheiten; oder basierend auf lvcreate(8) --extents als Prozentsatz von [VG|PVS|FREE]; Fließkommawerte müssen mit einer Ziffer beginnen. state steuert, ob das logische Volumen existiert. Um ein LV zu löschen, müssen Sie state: absent und auch force: true angeben.

Aktuell werden auch die folgenden zusätzlichen community.general.lvol Parameter unterstützt:

Wie im vorherigen Beispiel, aber auch ein ext4-Dateisystem erstellen, wobei das logische Volumen test-lv-01 als Gerät für das Dateisystem verwendet wird:

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

Der Schlüssel fs gibt an, dass das logische Volumen ein Dateisystem enthalten soll. type gibt an, welches Dateisystem verwendet werden soll. state: present gibt an, dass das Dateisystem erstellt wird, wenn es noch nicht vorhanden ist. Bei state: absent werden die Signaturen des Dateisystems auf dem Gerät gelöscht, wenn es ein Dateisystem enthält (wie mit blkid bekannt). Bei state: absent werden alle anderen Optionen außer dem Gerät ignoriert, und das Modul schlägt nicht fehl, wenn das Gerät tatsächlich nicht existiert. Bei state: absent muss auch force: true angegeben werden, ansonsten wird das Dateisystem nicht berührt. Im Gegensatz zum force Parameter des community.general.filesystem Moduls wird force: true kein vorhandenes Dateisystem überschreiben. Sie müssen das alte zuerst löschen, um ein neues Dateisystem zu erstellen! Dies soll erneut versehentliche Löschungen vermeiden.

Wie im vorherigen Beispiel, aber auch ein Verzeichnis /mnt1 erstellen und das ext4-Dateisystem dort einhängen. Dies erzeugt auch einen Eintrag in /etc/fstab (standardmäßig).

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

Der Schlüssel mountpoint verwaltet die mit dem Mountpunkt verbundenen Aktionen. state hat die gleichen Optionen wie das ansible.posix.mount Modul, nämlich mounted, absent, present, unmounted und remounted (siehe auch state). state und path.name sind erforderlich. path.name spezifiziert den Namen des Verzeichnisses, in dem der Mountpunkt montiert werden soll. Wenn das Verzeichnis noch nicht existiert, wird es erstellt. Für weitere Optionen siehe das nächste Beispiel.

Wie im vorherigen Beispiel, aber jetzt erhält das Dateisystem ein Label mnt1. Außerdem wird das Dateisystem unter /mnt1 mit der Dateisystemoption noatime gemountet. Das Dateisystem wird ebenfalls unter Verwendung des Labels mnt1 gemountet (src: LABEL=mnt1). Der owner und die group des Verzeichnisses /mnt1 werden auf vagrant gesetzt und die Verzeichnisberechtigungen betragen 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

Standardmäßig ist mountpoint.src /dev/ + vgname + / + lvname. Im obigen Beispiel wurde LABEL=mnt1 verwendet. In opts: -L mnt wurde die Option bereitgestellt, ein Dateisystem mit diesem Label zu erstellen. Dieses kann später für mountpoint.src verwendet werden.

mountpoint unterstützt die folgenden zusätzlichen Parameter:

Erstellen Sie zwei Volume-Gruppen (VG) namens test-vg-01 und test-vg-02, die das Gerät /dev/vdb bzw. /dev/vdc als physische Volumes verwenden:

lvm_vgs:
  - vgname: test-vg-01
    pvs: /dev/vdb
    state: present
  - vgname: test-vg-02
    pvs: /dev/vdc
    state: present

Hier ist ein Beispiel, um einen Mountpunkt auszuhängen und seinen Eintrag aus /etc/fstab zu löschen:

mountpoint:
  state: absent
  path:
    name: /vg01lv01

Dies funktioniert natürlich nur, wenn der Mountpunkt nicht von einem Programm oder Dienst verwendet wird.

Da das Löschen von Dateisystemen, logischen Volumen (LV) und Volumen-Gruppen (VG) potenziell Ihre Daten gefährden kann, sollte besondere Vorsicht walten! In diesem Fall ist es nicht genug, state: absent zum Löschen einer solchen Ressource anzugeben. force: true wird ebenfalls benötigt. Natürlich wird das Löschen einer Volumen-Gruppe, die noch ein logisches Volumen enthält, fehlschlagen. Auch das Löschen eines logischen Volumens mit einem Dateisystem mit state: present schlägt fehl.

Das folgende Beispiel wird den angegebenen Mountpunkt (/vg02lv01) aushängen und seinen Eintrag aus /etc/fstab entfernen, das ext4-Dateisystem löschen, das logische Volumen (vg02lv01) löschen und schließlich die Volumen-Gruppe (vg02) löschen (in dieser Reihenfolge):

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

Um Dateisysteme erstellen zu können, sind zusätzliche Pakete erforderlich. Für ext(2|3|4) benötigen Sie z.B. das Paket e2fsprogs. Je nachdem, welches Dateisystem Sie einrichten möchten, müssen möglicherweise zusätzliche Pakete installiert oder nicht benötigte Pakete aus der Liste entfernt werden. Natürlich können Sie beliebige Pakete, die Sie installieren möchten, zur Liste hinzufügen.

Standardmäßig sind nur die notwendigen Werkzeuge für ext(2|3|4) oder xfs installiert. Für andere Dateisysteme benötigen Sie möglicherweise btrfsprogs/btrfs-progs, dosfstools, f2fs-tools oder reiserfsprogs z.B.:

# Zusätzliche Pakete für SuSE-kompatible Betriebssysteme
additional_packages_suse:
  - e2fsprogs
  - xfsprogs

# Zusätzliche Pakete für Debian-kompatible Betriebssysteme
additional_packages_debian:
  - e2fsprogs
  - xfsprogs

# Zusätzliche Pakete für Redhat-kompatible Betriebssysteme
additional_packages_redhat:
  - e2fsprogs
  - xfsprogs

# Zusätzliche Pakete für Archlinux-kompatible Betriebssysteme
additional_packages_arch:
  - e2fsprogs
  - xfsprogs

Im Allgemeinen werden die meisten Optionen der folgenden Module unterstützt:

community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount

Abhängigkeiten

Diese Rolle hängt von einigen Ansible-Modulen ab:

community.general.lvg
community.general.lvol
community.general.filesystem
ansible.posix.mount

TODO

Momentan sind die folgenden Funktionen nicht implementiert:

  • Größe von Volume Groups ändern
  • Logisches Volumen verkleinern
  • Snapshot von logischen Volumen erstellen
  • Größe von logischen Volumen/Dateisystem ändern

Beispiel-Playbook

Beispiel 1 (ohne Rollentag)

- hosts: your-host
  roles:
    - githubixx.lvm

Beispiel 2 (Rollentag zuweisen)

-
  hosts: your-host
  roles:
    -
      role: githubixx.lvm
      tags: role-lvm

Weitere Beispiele

Es gibt noch ein paar weitere Beispiele, die zum Testen dieser Rolle verwendet werden. Siehe die molecule Verzeichnisse.

Testen

Diese Rolle hat eine kleine Testumgebung, die mit Molecule, libvirt (vagrant-libvirt) und QEMU/KVM erstellt wurde. Siehe meinen Blogbeitrag Testing Ansible roles with Molecule, libvirt (vagrant-libvirt) and QEMU/KVM wie man es einrichtet. Die Testkonfiguration ist hier.

Danach kann Molecule ausgeführt werden:

molecule converge -s kvm

Dies richtet mehrere virtuelle Maschinen (VM) mit verschiedenen unterstützten Linux-Betriebssystemen ein und erstellt verschiedene LVM-Ressourcen.

Um aufzuräumen, führen Sie aus:

molecule destroy -s kvm

Lizenz

GNU Allgemeine öffentliche Lizenz v3.0 oder später

Autoreninformation

http://www.tauceti.blog

Über das Projekt

Manage Linux Logical Volume Manager resources

Installieren
ansible-galaxy install githubixx.lvm
Lizenz
gpl-3.0
Downloads
1.8k
Besitzer
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)