githubixx.lvm

ansible-role-lvm

Ten zestaw ról Ansible instaluje zasoby menedżera logicznych woluminów Linux (LVM), takie jak Grupy Woluminów (VG), Woluminy Logiczne (LV) i zajmuje się tworzeniem systemów plików oraz punktów montowania.

Zmiany

Zobacz CHANGELOG

Zmienne Roli

Domyślnie nie są tworzone żadne zasoby LVM. Zobacz przykłady poniżej. Klucz lvm_vgs jest punktem wyjścia dla wszystkich zasobów LVM, które powinny być tworzone.

lvm_vgs: []

Najpierw kilka przykładów dotyczących tworzenia zasobów LVM (jak obsługiwane jest usuwanie, zobacz poniżej).

Utwórz grupę woluminów (VG) o nazwie test-vg-01, która używa urządzenia /dev/vdb jako woluminu fizycznego:

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

Wszystkie trzy parametry są wymagane! vgname to nazwa Grupy Woluminów. pvs to lista przecinkowo oddzielonych urządzeń do użycia jako urządzenia fizyczne w tej grupie woluminów. state kontroluje, czy grupa woluminów istnieje.
Aby usunąć VG, musisz określić state: absent oraz force: true. W przeciwieństwie do parametru force w module community.general.lvg force: true nie usunie VG, które nadal zawierają (a) wolumin logiczny(e)! Ma to na celu utrudnienie przypadkowego usunięcia danych.

Utwórz grupę woluminów (VG) o nazwie test-vg-01, która używa urządzeń /dev/vdb i /dev/vdc jako woluminów fizycznych:

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

Obecnie obsługiwane są następujące dodatkowe parametry community.general.lvg:

Jak w poprzednim przykładzie, ale także utwórz wolumin logiczny test-lv-01 i przydziel 10% dostępnego miejsca VG:

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

Wszystkie woluminy logiczne, które zawiera grupa woluminów, są wymienione pod kluczem lvm_lvs. Parametry lvname, size i state są wymagane! lvname to nazwa woluminu logicznego. size określa rozmiar woluminu logicznego, zgodnie z lvcreate(8) --size, domyślnie w megabajtach lub opcjonalnie z jednym z jednostek [bBsSkKmMgGtTpPeE]; lub zgodnie z lvcreate(8) --extents jako procent [VG|PVS|FREE]; wartości zmiennoprzecinkowe muszą zaczynać się od cyfry. state kontroluje, czy wolumin logiczny istnieje. Aby usunąć LV, musisz określić state: absent oraz force: true.

Obecnie również obsługiwane są następujące dodatkowe parametry community.general.lvol:

Jak w poprzednim przykładzie, ale także utwórz system plików ext4, używając woluminu logicznego test-lv-01 jako urządzenia dla systemu plików:

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

Klucz fs wskazuje, że wolumin logiczny powinien zawierać system plików. type określa, jaki system plików powinien być używany. state: present mówi, że system plików jest tworzony, jeśli jeszcze nie istnieje. W przypadku state: absent sygnatury systemu plików na urządzeniu są usuwane, jeśli zawiera system plików (jak wiadomo przez blkid). Gdy state: absent, wszystkie inne opcje, z wyjątkiem urządzenia, są ignorowane, a moduł nie kończy się błędem, jeśli urządzenie faktycznie nie istnieje. W przypadku state: absent również force: true jest wymagane, inaczej system plików nie będzie dotknięty. W przeciwieństwie do parametru force w module community.general.filesystem force: true nie nadpisuje istniejącego systemu plików. Naprawdę trzeba najpierw usunąć stary, aby móc stworzyć nowy system plików! Znowu ma to na celu uniknięcie przypadkowego usunięcia.

Jak w poprzednim przykładzie, ale także utwórz katalog /mnt1 i zamontuj system plików ext4 tam. Tworzy to również wpis w /etc/fstab (domyślnie).

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

Klucz mountpoint obsługuje akcje związane z punktami montowania. state ma te same opcje, co moduł ansible.posix.mount, takie jak mounted, absent, present, unmounted i remounted (zobacz również state). state i path.name są wymagane. path.name określa nazwę katalogu, w którym punkt montowania ma być zamontowany. Jeśli katalog nie istnieje, zostanie utworzony. Aby uzyskać dodatkowe opcje, zobacz następny przykład.

Jak w poprzednim przykładzie, ale system plików teraz otrzymuje etykietę mnt1. Ponadto system plików jest montowany w /mnt1 z opcją systemu plików noatime. System plików jest również montowany, używając etykiety mnt1, jak wspomniano (src: LABEL=mnt1). Właścicielem i grupą katalogu /mnt1 będą vagrant, a uprawnienia katalogu będą 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

Domyślnie mountpoint.src to /dev/ + vgname + / + lvname. W powyższym przykładzie użyto LABEL=mnt1. W opts: -L mnt zapewniono opcję utworzenia systemu plików z tą etykietą. Dzięki temu można go później użyć jako mountpoint.src.

mountpoint wspiera następujące dodatkowe parametry:

Utwórz dwie grupy woluminów (VG) o nazwach test-vg-01 i test-vg-02, które używają odpowiednio urządzeń /dev/vdb i /dev/vdc jako woluminów fizycznych:

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

Oto przykład na odmontowanie punktu montowania i usunięcie jego wpisu z /etc/fstab:

mountpoint:
  state: absent
  path:
    name: /vg01lv01

To oczywiście działa tylko wtedy, gdy punkt montowania nie jest używany przez program lub usługę.

Przy usuwaniu systemów plików, woluminów logicznych (LV) i grup woluminów (VG) może dojść do zniszczenia danych, więc należy zachować szczególną ostrożność! W takim przypadku samo określenie state: absent do usunięcia takiego zasobu nie wystarczy. Potrzebne jest również force: true. Oczywiście usunięcie grupy woluminów, która nadal zawiera wolumin logiczny, zakończy się niepowodzeniem. Również usunięcie woluminu logicznego z systemem plików z state: present zakończy się niepowodzeniem.

Następujący przykład odmontuje określony punkt montowania (/vg02lv01) i usunie jego wpis z /etc/fstab, wyczyści system plików ext4, usunie wolumin logiczny (vg02lv01) i na koniec usunie grupę woluminów (vg02) (w tej kolejności):

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

Aby móc tworzyć systemy plików, potrzebne są dodatkowe pakiety. Dla ext(2|3|4) musisz zainstalować pakiet e2fsprogs, na przykład. Tak więc w zależności od tego, jaki system plików chcesz skonfigurować, możesz potrzebować zainstalować dodatkowe pakiety lub usunąć pakiety, które nie są potrzebne. Oczywiście możesz dodać dowolne pakiety, które chcesz zainstalować, do listy.

Domyślnie zainstalowane są tylko narzędzia potrzebne dla ext(2|3|4) lub xfs. Dla innych systemów plików może być potrzebny btrfsprogs/btrfs-progs, dosfstools, f2fs-tools lub reiserfsprogs, na przykład:

# Dodatkowe pakiety dla systemów zgodnych z SuSE
additional_packages_suse:
  - e2fsprogs
  - xfsprogs

# Dodatkowe pakiety dla systemów zgodnych z Debianem
additional_packages_debian:
  - e2fsprogs
  - xfsprogs

# Dodatkowe pakiety dla systemów zgodnych z Redhat
additional_packages_redhat:
  - e2fsprogs
  - xfsprogs

# Dodatkowe pakiety dla systemów zgodnych z Archlinux
additional_packages_arch:
  - e2fsprogs
  - xfsprogs

Ogólnie rzecz biorąc, obsługiwanych jest większość opcji poniższych modułów:

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

Zależności

Ta rola zależy od kilku modułów Ansible:

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

TODO

Obecnie następujące funkcje nie są zaimplementowane:

  • Rozmiar Grupy Woluminów
  • Zmniejszenie Woluminu Logicznego
  • Zrzut Woluminu Logicznego
  • Zmiana rozmiaru Woluminu Logicznego/Systemu Plików

Przykład Playbooka

Przykład 1 (bez tagu roli)

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

Przykład 2 (przypisanie tagu do roli)

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

Więcej przykładów

Istnieje kilka dodatkowych przykładów używanych do testowania tej roli. Zobacz katalogi molecule.

Testowanie

Ta rola ma małą konfigurację testową, która jest tworzona za pomocą Molecule, libvirt (vagrant-libvirt) i QEMU/KVM. Zobacz mój post na blogu Testowanie ról Ansible z Molecule, libvirt (vagrant-libvirt) i QEMU/KVM, jak skonfigurować. Konfiguracja testowa jest dostępna tutaj.

Następnie możesz uruchomić molecule:

molecule converge -s kvm

To utworzy wiele maszyn wirtualnych (VM) z różnymi obsługiwanymi systemami operacyjnymi Linux i utworzy różne zasoby LVM.

Aby oczyścić, uruchom

molecule destroy -s kvm

Licencja

GNU General Public License v3.0 lub później

Informacje o autorze

http://www.tauceti.blog

O projekcie

Manage Linux Logical Volume Manager resources

Zainstaluj
ansible-galaxy install githubixx.lvm
Licencja
gpl-3.0
Pobrania
1.8k
Właściciel
Senior System Engineer - Python, Go, Cloud, Kubernetes, Commodore, Retro, 80's ;-)