From ea9109220bb268b5f14e75e38d9fb32c2d79bae5 Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Wed, 15 Apr 2020 14:33:41 +0200 Subject: [PATCH] molecule test and idempotence --- .github/workflows/molecule.yml | 112 +++++++++++++ .idea/.gitignore | 8 + .idea/ansible-manage-lvm.iml | 8 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/misc.xml | 7 + .idea/modules.xml | 8 + .idea/vcs.xml | 6 + handlers/main.yml | 42 +++++ molecule/default/converge.yml | 28 ++++ molecule/default/molecule.yml | 27 ++++ .../conftest.cpython-27-PYTEST.pyc | Bin 0 -> 1206 bytes .../test_default.cpython-27-PYTEST.pyc | Bin 0 -> 4840 bytes molecule/default/tests/conftest.py | 21 +++ molecule/default/tests/test_default.py | 22 +++ tasks/centos.yml | 26 ++- tasks/create_lv.yml | 86 ++++++++++ tasks/create_vg.yml | 22 +++ tasks/debian.yml | 30 +++- tasks/manage_lvm.yml | 150 +++++------------- 19 files changed, 488 insertions(+), 121 deletions(-) create mode 100644 .github/workflows/molecule.yml create mode 100644 .idea/.gitignore create mode 100644 .idea/ansible-manage-lvm.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 molecule/default/converge.yml create mode 100644 molecule/default/molecule.yml create mode 100644 molecule/default/tests/__pycache__/conftest.cpython-27-PYTEST.pyc create mode 100644 molecule/default/tests/__pycache__/test_default.cpython-27-PYTEST.pyc create mode 100644 molecule/default/tests/conftest.py create mode 100644 molecule/default/tests/test_default.py create mode 100644 tasks/create_lv.yml create mode 100644 tasks/create_vg.yml diff --git a/.github/workflows/molecule.yml b/.github/workflows/molecule.yml new file mode 100644 index 0000000..4ac0ec3 --- /dev/null +++ b/.github/workflows/molecule.yml @@ -0,0 +1,112 @@ +--- + +# This is a basic workflow to help you get started with Actions + +name: Molecule + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch +on: + push: + pull_request: + branches: + - master + - tags/* + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + lint: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + - name: install lint prerequisite + run: | + sudo apt -y install python3-setuptools ansible-lint + + - name: Install molecule + run: | + sudo apt update + sudo apt -y install python3-setuptools python3 python3-pip docker + sudo pip3 install wheel + sudo pip3 install docker molecule testinfra yamllint ansible-lint flake8 + + - name: molecule lint + run: | + molecule lint + + requirements: + # The type of runner that the job will run on + runs-on: ubuntu-latest + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + - name: install prereq + run: | + ansible-galaxy collection install -r requirements.yml + ansible-galaxy role install -r requirements.yml + + molecule: + + runs-on: ubuntu-latest + if: "false" + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + - uses: actions/checkout@v2 + + - name: configure keyboard layout + run: | + echo XKBLAYOUT='us' > /etc/default/keyboard + + - name: install virtualization stack + env: + DEBIAN_FRONTEND: noninteractive + run: | + sudo apt-get update + sudo apt -y install cpu-checker + kvm-ok + # shit happens here, containerization sucks... that was worth the try + + - name: install virtualization stack + env: + DEBIAN_FRONTEND: noninteractive + run: | + sudo apt -y install policycoreutils-python-utils qemu-kvm qemu-utils libvirt-clients libvirt-daemon-system bridge-utils python3-libvirt libnss-libvirt libguestfs-tools virtinst virt-top genisoimage libvirt-dev libvirt-bin + + - name: install vagrant + env: + VAGRANT_DISABLE_STRICT_DEPENDENCY_ENFORCEMENT: 1 + run: | + wget https://releases.hashicorp.com/vagrant/2.2.7/vagrant_2.2.7_x86_64.deb + sudo apt -y install ./vagrant_2.2.7_x86_64.deb + vagrant plugin install vagrant-persistent-storage + vagrant plugin install vagrant-libvirt + sudo groupadd --system libvirt + sudo usermod -a -G libvirt $(whoami) + sudo /etc/init.d/libvirtd restart + + - name: Install molecule + run: | + sudo apt -y install python3-setuptools + pip3 install molecule-vagrant wheel + + - name: create molecule vm + env: + LC_ALL: C.UTF-8 + LANG: C.UTF-8 + run: | + molecule create --scenario-name kvm + + - name: verify + run: | + molecule verify + + - name: teardown + run: | + molecule destroy diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..73f69e0 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/ansible-manage-lvm.iml b/.idea/ansible-manage-lvm.iml new file mode 100644 index 0000000..d0876a7 --- /dev/null +++ b/.idea/ansible-manage-lvm.iml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..8656114 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..900cbad --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/handlers/main.yml b/handlers/main.yml index 2027eb2..db4600d 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,2 +1,44 @@ --- # handlers file for ansible-manage-lvm +- name: manage_lvm | resizing swap + shell: "swapoff -a && mkswap /dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }} && swapon -va" + become: true + with_subelements: + - "{{ lvm_groups }}" + - lvnames + when: > + item[1]['filesystem'] is defined and + item[1]['filesystem'] == "swap" + +- name: manage_lvm | resizing btrfs + command: "btrfs filesystem resize max {{ item[1]['mntp'] }}" + become: true + with_subelements: + - "{{ lvm_groups }}" + - lvnames + when: > + item[1]['filesystem'] is defined and + item[1]['filesystem'] == "btrfs" + +- name: manage_lvm | resizing xfs + command: xfs_growfs -d {{ item[1]['mntp'] }} + become: true + with_subelements: + - "{{ lvm_groups }}" + - lvnames + when: > + item[1]['filesystem'] is defined and + item[1]['filesystem'] == "xfs" + +- name: manage_lvm | resizing filesystem + command: resize2fs /dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }} + become: true + with_subelements: + - "{{ lvm_groups }}" + - lvnames + when: > + item[1]['filesystem'] is defined and + item[1]['filesystem'] != "None" and + item[1]['filesystem'] != "swap" and + item[1]['filesystem'] != "xfs" and + item[1]['filesystem'] != "btrfs" diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml new file mode 100644 index 0000000..9848cce --- /dev/null +++ b/molecule/default/converge.yml @@ -0,0 +1,28 @@ +--- +- name: Converge + hosts: all + vars: + lvm_groups: + - vgname: my_vg + disks: + - /dev/sdb1 + create: true + lvnames: + - lvname: my_lv + size: 40%VG + opts: "--wipesignatures y" + create: true + filesystem: ext4 + mntp: "/var/lib/mountpoint" + - lvname: my_lv2 + size: 10%VG + opts: "--wipesignatures y" + create: true + filesystem: ext4 + mntp: "/var/lib/mountpoint2" + manage_lvm: true + + tasks: + - name: "Include lvm" + include_role: + name: "ansible-manage-lvm" diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml new file mode 100644 index 0000000..967e97f --- /dev/null +++ b/molecule/default/molecule.yml @@ -0,0 +1,27 @@ +--- +driver: + name: vagrant + provider: + name: virtualbox +lint: yamllint . && flake8 && ansible-lint --exclude=meta +platforms: + - name: Fedora-Molecule-LVM + box: bento/fedora-31 + # box-url: ${platform_root}/packer/bento/builds/fedora-31-x86_64.virtualbox.box + provider_override_args: + - "persistent_storage.enabled = true" + - "persistent_storage.location = 'molecule-lvm.vdi'" + - "persistent_storage.size = 100" + - "persistent_storage.mount = false" + - "persistent_storage.diskdevice = '/dev/sdb'" +provisioner: + name: ansible + inventory: + group_vars: + lvm: +verifier: + name: testinfra + env: + PYTHONWARNINGS: "ignore:.*U.*mode is deprecated:DeprecationWarning" + options: + v: 1 diff --git a/molecule/default/tests/__pycache__/conftest.cpython-27-PYTEST.pyc b/molecule/default/tests/__pycache__/conftest.cpython-27-PYTEST.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4cd4455ea52f29cce7001157510af524ee8f81ee GIT binary patch literal 1206 zcmcgr!A=`75FIBWkPr%`RS~y6^bl1dd+P~RsZfxRXg~qll0&T}>ogm@cCcqjBef@b z=m%8&y8cCfpfg?q{eniycQVRBTTsAF3dxnXxnc$#HBtHl&ww59Rz6tnXUP288 zTsOhJ1|bAiU|QwIBm!%2M=2xVW4Zzulwa4u-N0ADBTUy|+PKeC!R{SpNqwDe0rALn zFwYn;;p#txWYJlBjl}qU3WLH#NQ3#v8oh|-6J?^pq{>CP)oN5|70ol8gqqBZT@q!+ zW1_W6OAGpbhiHN~PTdq4dGlC|+jK_7b}n<95}DNMR%zrb?@o?;2N%aZdDMU3>z|(t zF6H6TaSyBI75{2U>nFC*Y2-+0&^UHBXBAnh9z=H9Eh@(b2bv}*#dUf*3hU@OM@y;G z^K8NAQZ{ZgK$=Qg~g2L z_Ae+vr7E_>hS(9CqD5%4QWtem+RH^!rgkJHHUl0P{5D8A;G4m4DX)r5(*~%9cha3L zmKl$`e5q{TNj%MpnKd1!=8hZ*20moNCYC4MjEI8V#0}W#0dI5gl)|Hj0sSW<`3>4H V|I}~zUH3d}oeXQiHnc>m`WG<|GX($u literal 0 HcmV?d00001 diff --git a/molecule/default/tests/__pycache__/test_default.cpython-27-PYTEST.pyc b/molecule/default/tests/__pycache__/test_default.cpython-27-PYTEST.pyc new file mode 100644 index 0000000000000000000000000000000000000000..cb5ebdb4334c030b92c5ac50307aba08930c8788 GIT binary patch literal 4840 zcmdUzOK%%T631)A5hc=+WjpaBj}0bH98p+{G-XS+k=RIJK;-n*a_f+jZkDy^<%oLySjf>t=cc^ z&G3hBzlfHIdgMNk=|lYV-;g9kPmp?)EK%mslch?o(Xmg*%k-p9Nsa!EW-FBVBCJxf zEJA~lx(H2v{c&rBdwmBCtb*%D1Xnl91TkZUxBUJ!hm`mFoODwQK196Dw-8u&C@CXe$zWy>_E)2vS3 zv`*7yRvLXkW4xDOGMEM?&_rR)%Q2`=`kI%VqhyV)rf9xSW`&Md>1zyAC;eYC4LWYJ za_FY~Ub5$0Hm`B}CUHFYz~WZ z(1~-M9%O2J5a)4UZDU@Y0rpgHl&Mal4&zZ~Iy^5eY2=F9!-=V5q%6%cinAIvAxH4y3kARP^FZnapS261-3X!G|be_5pl?LJ$xTz_AC}7=lX`1R?uOCs26@NqU~-xJKSb**j9?6U z2!i>P)&!CbF66!dz+{84t-wIX%^#)3nnQT`bM=A{kh!@*33CywMK_k4;Nq1TG`dPD zmH@)5T+kq6nS7q64IU2PQ(&wCipz5-@`CT{0I41&MKJCssUBwWB$x($Y~WzK7i{P571V>JWd6jSeRX;**Ou3dn7k)A_?r*z)hKz}kq zIm!iLR^5=x!wa0S9m9*9@YKUskr>WKKwTz0>lK4xT&nO2*I(jgR|u4(a6 zw7gifc=%H#OTk9JQ~6|r`o98MB^eG z4OG-Gi_tKG7wVM?ULA;l+22G$UftX9>H@L_%BFO&f*A)DbC~_`ESNcr*`N+!lb{aN zz$u2I!5f@!gm26|;T5QLf&;!PM6js)PlY-g>ow-6TcN=!&6+?RA~uOr8Bfnd-74wt zJR9F7uXF#5x;Ge-7}TK-ahZ+nEH)kL*64V>Lfx;@;yi1Q(aO5?c+O=Ps6*HXr@VNr zE$sj`L1Ov9y=Jrg+C@qb8M@IeXkVGhM zit@qcbQAf!I8t$fh(!nd`F|8=<4w>W%;KAYWe8{g+$3hmXvWdQ2l^{Kn8f!h{6bg+ zmJ&{aqBb&x;HsVuYugIccCA47IltSbHf1_Qgo@A<-{7H*ak~g)9i#8dGtEuN$5hxB zzRl7*oV?4)4I~nE!V~ORz}FF66=y*!;bDxNh^^?%9G{r<@Ak z5;&f=PNaK#-qscDvbHZTE*?xkgskYNaKM#QS-2ApAT%!yEwMXkz@2bp%n|a!sr= 1 + + +def test_volume_is_mounted(host): + host.file("/var/lib/mountpoint").mode == 0o731 diff --git a/tasks/centos.yml b/tasks/centos.yml index 66cab6b..0d897f3 100644 --- a/tasks/centos.yml +++ b/tasks/centos.yml @@ -1,18 +1,38 @@ --- - name: centos | installing lvm2 - yum: + package: name: "lvm2" state: "present" become: true - name: centos | installing sg3_utils - yum: + package: name: "sg3_utils" state: "present" become: true +- name: centos | install xfs tools + package: + name: "xfsprogs" + state: "present" + become: yes + loop: "{{ lvm_groups|subelements('lvnames') }}" + when: > + ( + (item.1 is defined and item.1 != 'None') and + ( + item.1.filesystem is defined and + item.1.filesystem == "xfs" + ) + and + ( + item.1.create is defined and + item.1.create + ) + ) + - name: centos | checking for scsi devices - shell: "sg_scan" + command: "sg_scan" become: true register: "scsi_devices" changed_when: False diff --git a/tasks/create_lv.yml b/tasks/create_lv.yml new file mode 100644 index 0000000..24f303f --- /dev/null +++ b/tasks/create_lv.yml @@ -0,0 +1,86 @@ +--- + +- name: manage_lvm | creating new LVM logical volume(s) + lvol: + vg: "{{ vg.item[0]['vgname'] }}" + lv: "{{ vg.item[1]['lvname'] }}" + size: "{{ vg.item[1]['size'] }}" + shrink: no + opts: "{{ vg.item[1]['opts'] | default('') }}" + state: "present" + become: true + notify: + - manage_lvm | resizing swap + - manage_lvm | resizing btrfs + - manage_lvm | resizing xfs + - manage_lvm | resizing filesystem + when: > + ( + (vg.item[0]['create'] is defined + and vg.item[0]['create']) and + (vg.item[1] is defined and + vg.item[1] != 'None') and + (vg.item[1]['create'] is defined and + vg.item[1]['create']) + ) + +- name: manage_lvm | creating new filesystem on new LVM logical volume(s) + filesystem: + fstype: "{{ vg.item[1]['filesystem'] }}" + dev: "/dev/{{ vg.item[0]['vgname'] }}/{{ vg.item[1]['lvname'] }}" + # resizefs: yes #coming in 2.0 which will replace the resizing filesystem task below + become: true + when: > + ( + (vg.item[0]['create'] is defined and + vg.item[0]['create']) and + (vg.item[1] is defined and + vg.item[1] != 'None') and + (vg.item[1]['create'] is defined and + vg.item[1]['create']) and + ( + vg.item[1]['filesystem'] is defined and + vg.item[1]['filesystem'] != 'None' and + vg.item[1]['filesystem'] != "swap" and + vg.item[1]['filesystem'] != "xfs" + ) + ) + +- name: lvm | check already converted + loop: "{{ lvm_groups|subelements('lvnames') }}" + shell: "xfs_info /dev/{{ vg.item.0.vgname }}/{{ vg.item.1.lvname }} | grep -c 'ftype=1'" + become: yes + register: alreadyformattedresult + ignore_errors: True + changed_when: no + when: > + ( + (vg.item.1 is defined and vg.item.1 != 'None') and + ( + vg.item.1.filesystem2 is defined and + vg.item.1.filesystem2 == "xfs" + ) + and + ( + vg.item.1.create is defined and + vg.item.1.create + ) + ) + +- name: manage_lvm | creating new filesystem on new LVM logical volume(s) + command: mkfs.xfs /dev/{{ vg.item.0.vgname }}/{{ vg.item.1.lvname }} + become: yes + when: > + ( + alreadyformattedresult and + (vg.item[0]['create'] is defined and + vg.item[0]['create']) and + (vg.item[1] is defined and + vg.item[1] != 'None') and + (vg.item[1]['create'] is defined and + vg.item[1]['create']) and + ( + vg.item[1]['filesystem'] is defined and + vg.item[1]['filesystem'] == "xfs" + ) + ) diff --git a/tasks/create_vg.yml b/tasks/create_vg.yml new file mode 100644 index 0000000..ba408ae --- /dev/null +++ b/tasks/create_vg.yml @@ -0,0 +1,22 @@ +--- +- name: manage_lvm | check existing physical volume group(s) + shell: "vgdisplay | grep '{{ item['vgname'] }}'" + become: true + with_items: "{{ lvm_groups }}" + ignore_errors: True + changed_when: no + register: vg_exist + +- debug: var=vg_exist + +- name: manage_lvm | creating new LVM physical volume group(s) + lvg: + vg: "{{ item.item['vgname'] }}" + pvs: "{{ item.item['disks']|join(',') }}" + state: "present" + become: true + with_items: "{{ vg_exist.results }}" + when: > + item.rc != 0 and + item.item['create'] is defined and + item.item['create'] diff --git a/tasks/debian.yml b/tasks/debian.yml index 3b38eaf..0ccccbf 100644 --- a/tasks/debian.yml +++ b/tasks/debian.yml @@ -1,22 +1,40 @@ --- - name: debian | installing pre-reqs - apt: + package: name: - lvm2 - scsitools - - xfsprogs state: "present" become: true +- name: centos | install xfs tools + package: + name: "xfsprogs" + state: "present" + become: yes + loop: "{{ lvm_groups|subelements('lvnames') }}" + when: > + ( + (item.1 is defined and item.1 != 'None') and + ( + item.1.filesystem is defined and + item.1.filesystem == "xfs" + ) + and + ( + item.1.create is defined and + item.1.create + ) + ) - name: debian | checking for scsi devices - shell: "sg_scan" + command: "sg_scan" become: true register: "scsi_devices" - changed_when: False + changed_when: false - name: debian | rescanning for new disks added command: "/sbin/rescan-scsi-bus" become: true - changed_when: False - when: scsi_devices['stdout'] != "" + changed_when: false + when: scsi_devices['stdout'] | length diff --git a/tasks/manage_lvm.yml b/tasks/manage_lvm.yml index 872977b..c2f9ae1 100644 --- a/tasks/manage_lvm.yml +++ b/tasks/manage_lvm.yml @@ -1,123 +1,26 @@ --- -- name: manage_lvm | creating new LVM volume group(s) - lvg: - vg: "{{ item['vgname'] }}" - pvs: "{{ item['disks']|join(',') }}" - state: "present" - become: true - with_items: "{{ lvm_groups }}" - when: > - (item['create'] is defined and - item['create']) +- name: manage_lvm | manage physical volume group creation + include: create_vg.yml -- name: manage_lvm | creating new LVM logical volume(s) - lvol: - vg: "{{ item[0]['vgname'] }}" - lv: "{{ item[1]['lvname'] }}" - size: "{{ item[1]['size'] }}" - shrink: no - opts: "{{ item[1]['opts'] | default('') }}" - state: "present" +- name: manage_lvm | check existing logical volume group(s) + shell: "lvs -o lv_name {{ item[0]['vgname'] }} --separator='|' --noheadings | grep {{ item[1]['lvname'] }}" become: true - register: lvm + ignore_errors: True + changed_when: no with_subelements: - "{{ lvm_groups }}" - lvnames - when: > - ((item[0]['create'] is defined - and item[0]['create']) and - (item[1] is defined and - item[1] != 'None') and - (item[1]['create'] is defined and - item[1]['create'])) + register: lv_exist -- name: manage_lvm | creating new filesystem on new LVM logical volume(s) - filesystem: - fstype: "{{ item[1]['filesystem'] }}" - dev: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}" - # resizefs: yes #coming in 2.0 which will replace the resizing filesystem task below - become: true - with_subelements: - - "{{ lvm_groups }}" - - lvnames - when: > - ((item[0]['create'] is defined and - item[0]['create']) and - (item[1] is defined and - item[1] != 'None') and - (item[1]['create'] is defined and - item[1]['create']) and - (item[1]['filesystem'] is defined and - item[1]['filesystem'] != 'None') and - item[1]['filesystem'] != "swap") +- debug: var=lv_exist -- name: manage_lvm | mounting new filesystem(s) - mount: - name: "{{ item[1]['mntp'] }}" - src: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}" - fstype: "{{ item[1]['filesystem'] }}" - state: "mounted" - opts: "{{ item[1]['mopts'] | default('defaults') }}" - become: true - with_subelements: - - "{{ lvm_groups }}" - - lvnames +- name: manage_lvm | loop over logical volume(s) + include: create_lv.yml + loop: "{{ lv_exist.results }}" + loop_control: + loop_var: vg when: > - ((item[0]['create'] is defined and - item[0]['create']) and - (item[1] is defined and - item[1] != 'None') and - (item[1]['create'] is defined and - item[1]['create']) and - (item[1]['mount'] is defined and - item[1]['mount'])) - -- name: manage_lvm | resizing filesystem - command: resize2fs /dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }} - become: true - with_subelements: - - "{{ lvm_groups }}" - - lvnames - when: > - lvm['changed'] and - item[1]['filesystem'] is defined and - item[1]['filesystem'] != "None" and - item[1]['filesystem'] != "swap" and - item[1]['filesystem'] != "xfs" and - item[1]['filesystem'] != "btrfs" - -- name: manage_lvm | resizing xfs - command: xfs_growfs -d {{ item[1]['mntp'] }} - become: true - with_subelements: - - "{{ lvm_groups }}" - - lvnames - when: > - lvm['changed'] and - item[1]['filesystem'] is defined and - item[1]['filesystem'] == "xfs" - -- name: manage_lvm | resizing swap - shell: "swapoff -a && mkswap /dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }} && swapon -va" - become: true - with_subelements: - - "{{ lvm_groups }}" - - lvnames - when: > - lvm['changed'] and - item[1]['filesystem'] is defined and - item[1]['filesystem'] == "swap" - -- name: manage_lvm | resizing btrfs - shell: "btrfs filesystem resize max {{ item[1]['mntp'] }}" - become: true - with_subelements: - - "{{ lvm_groups }}" - - lvnames - when: > - lvm['changed'] and - item[1]['filesystem'] is defined and - item[1]['filesystem'] == "btrfs" + vg.rc != 0 - name: manage_lvm | unmounting filesystem(s) mount: @@ -136,6 +39,29 @@ not item[1]['create'] and item[1]['filesystem'] != "swap") +- meta: flush_handlers + +- name: manage_lvm | mounting new filesystem(s) + mount: + name: "{{ item[1]['mntp'] }}" + src: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}" + fstype: "{{ item[1]['filesystem'] }}" + state: "mounted" + opts: "{{ item[1]['mopts'] | default('defaults') }}" + become: true + with_subelements: + - "{{ lvm_groups }}" + - lvnames + when: > + ((item[0]['create'] is defined and + item[0]['create']) and + (item[1] is defined and + item[1] != 'None') and + (item[1]['create'] is defined and + item[1]['create']) and + (item[1]['mount'] is defined and + item[1]['mount'])) + - name: manage_lvm | Removing LVM logical volume(s) lvol: vg: "{{ item[0]['vgname'] }}" @@ -152,7 +78,7 @@ (item[1]['create'] is defined and not item[1]['create']) -- name: manage_lvm | Removing LVM volume group(s) +- name: manage_lvm | Removing LVM physical volume group(s) lvg: vg: "{{ item['vgname'] }}" pvs: "{{ item['disks']|join(',') }}"