From ea9109220bb268b5f14e75e38d9fb32c2d79bae5 Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Wed, 15 Apr 2020 14:33:41 +0200 Subject: [PATCH 01/11] 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(',') }}" From ba5d929fce982af9baa44cfe8ad0b3079133f444 Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Wed, 15 Apr 2020 15:14:30 +0200 Subject: [PATCH 02/11] use dots instead of carets --- handlers/main.yml | 41 -------- molecule/default/converge.yml | 2 +- .../test_default.cpython-27-PYTEST.pyc | Bin 4840 -> 5120 bytes molecule/default/tests/test_default.py | 4 + tasks/create_lv.yml | 88 ++++------------ tasks/create_vg.yml | 22 ++-- tasks/main.yml | 4 +- tasks/manage_lvm.yml | 94 +++++++----------- 8 files changed, 70 insertions(+), 185 deletions(-) diff --git a/handlers/main.yml b/handlers/main.yml index db4600d..c4e1266 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,44 +1,3 @@ --- # 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 index 9848cce..558c977 100644 --- a/molecule/default/converge.yml +++ b/molecule/default/converge.yml @@ -18,7 +18,7 @@ size: 10%VG opts: "--wipesignatures y" create: true - filesystem: ext4 + filesystem: xfs mntp: "/var/lib/mountpoint2" manage_lvm: true diff --git a/molecule/default/tests/__pycache__/test_default.cpython-27-PYTEST.pyc b/molecule/default/tests/__pycache__/test_default.cpython-27-PYTEST.pyc index cb5ebdb4334c030b92c5ac50307aba08930c8788..a74dd9a92dbd309bbc42bd1c86eb9cc4eb9c4464 100644 GIT binary patch delta 183 zcmaE%+MprN{F#^Q71Q*%olFc2$qY~cWHUGbadGHGc^^J@h86~fC~k%nCWc@Qj*SJ; zg507YNsuZA#>poH%o#-{35v-WW!_|DV9)>w2ibrKTOgqU6k-TspX@JGp&<@rmZTP! z#Fypgl;)-y#b*}B=jNB@m87Of0;Qk^YVb_HAy~>3WIx$Us85IwD8a_e!yv@K$->FT I$#>!|xUJ;NONRok3 egM0Ezq0-68!rcNqKt3BY4}%Z`CkrPVCmR6&AP%Mg diff --git a/molecule/default/tests/test_default.py b/molecule/default/tests/test_default.py index ad9e53a..a97b145 100644 --- a/molecule/default/tests/test_default.py +++ b/molecule/default/tests/test_default.py @@ -20,3 +20,7 @@ def test_mylv_logical_volume_is_created(host): def test_volume_is_mounted(host): host.file("/var/lib/mountpoint").mode == 0o731 + + +def test_volume2_is_mounted(host): + host.file("/var/lib/mountpoint2").mode == 0o731 diff --git a/tasks/create_lv.yml b/tasks/create_lv.yml index 24f303f..837588b 100644 --- a/tasks/create_lv.yml +++ b/tasks/create_lv.yml @@ -2,85 +2,39 @@ - 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'] }}" + vg: "{{ vg.0.vgname }}" + lv: "{{ vg.1.lvname'] }}" + size: "{{ vg.1.size }}" shrink: no - opts: "{{ vg.item[1]['opts'] | default('') }}" + opts: "{{ vg.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']) + (vg.0.create is defined + and vg.0.create) and + (vg[1] is defined and + vg.1 != 'None') and + (vg.1.create is defined and + vg.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 + fstype: "{{ vg.1.filesystem }}" + dev: "/dev/{{ vg.0.vgname }}/{{ vg.1.lvname }}" + resizefs: yes 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.0.create is defined and + vg.0.create) and + (vg[1] is defined and + vg.1 != 'None') and + (vg.1.create is defined and + vg.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" + vg.1.filesystem is defined and + vg.1.filesystem != 'None' ) ) diff --git a/tasks/create_vg.yml b/tasks/create_vg.yml index ba408ae..d79f362 100644 --- a/tasks/create_vg.yml +++ b/tasks/create_vg.yml @@ -1,22 +1,12 @@ --- -- 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) +- name: manage_lvm | creating new LVM volume group(s) lvg: - vg: "{{ item.item['vgname'] }}" - pvs: "{{ item.item['disks']|join(',') }}" + vg: "{{ item.vgname }}" + pvs: "{{ item.disks | join(',') }}" state: "present" become: true - with_items: "{{ vg_exist.results }}" + loop: "{{ lvm_groups }}" when: > - item.rc != 0 and - item.item['create'] is defined and - item.item['create'] + item.create is defined and + item.create diff --git a/tasks/main.yml b/tasks/main.yml index 96ebddf..86d4e50 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -8,5 +8,5 @@ - include: manage_lvm.yml when: > - manage_lvm and - lvm_groups is defined + manage_lvm and + lvm_groups is defined diff --git a/tasks/manage_lvm.yml b/tasks/manage_lvm.yml index c2f9ae1..59df20d 100644 --- a/tasks/manage_lvm.yml +++ b/tasks/manage_lvm.yml @@ -2,89 +2,67 @@ - name: manage_lvm | manage physical volume group creation include: create_vg.yml -- 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 - ignore_errors: True - changed_when: no - with_subelements: - - "{{ lvm_groups }}" - - lvnames - register: lv_exist - -- debug: var=lv_exist - - name: manage_lvm | loop over logical volume(s) include: create_lv.yml - loop: "{{ lv_exist.results }}" + loop: "{{ lvm_groups }}" loop_control: loop_var: vg - when: > - vg.rc != 0 - name: manage_lvm | unmounting filesystem(s) mount: - name: "{{ item[1]['mntp'] }}" - src: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}" - fstype: "{{ item[1]['filesystem'] | default(omit) }}" + name: "{{ item.1.mntp }}" + src: "/dev/{{ item.0.vgname }}/{{ item.1.lvname }}" + fstype: "{{ item.1.filesystem | default(omit) }}" state: "absent" become: true - with_subelements: - - "{{ lvm_groups }}" - - lvnames + loop: "{{ lvm_groups|subelements('lvnames') }}" when: > - (item[1] is defined and - item[1] != 'None') and - (item[1]['create'] is defined and - not item[1]['create'] and - item[1]['filesystem'] != "swap") - -- meta: flush_handlers + (item.1 is defined and + item.1 != 'None') and + (item.1.create is defined and + not item.1.create and + item.1.filesystem != "swap") - name: manage_lvm | mounting new filesystem(s) mount: - name: "{{ item[1]['mntp'] }}" - src: "/dev/{{ item[0]['vgname'] }}/{{ item[1]['lvname'] }}" - fstype: "{{ item[1]['filesystem'] }}" + name: "{{ item.1.mntp }}" + src: "/dev/{{ item.0.vgname }}/{{ item.1.lvname }}" + fstype: "{{ item.1.filesystem }}" state: "mounted" - opts: "{{ item[1]['mopts'] | default('defaults') }}" + opts: "{{ item.1.mopts | default('defaults') }}" become: true - with_subelements: - - "{{ lvm_groups }}" - - lvnames + loop: "{{ lvm_groups|subelements('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'])) + ((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'] }}" - lv: "{{ item[1]['lvname'] }}" + vg: "{{ item.0.vgname }}" + lv: "{{ item.1.lvname }}" state: "absent" force: yes become: true - with_subelements: - - "{{ lvm_groups }}" - - lvnames + loop: "{{ lvm_groups|subelements('lvnames') }}" when: > - (item[1] is defined and - item[1] != 'None') and - (item[1]['create'] is defined and - not item[1]['create']) + (item.1 is defined and + item.1 != 'None') and + (item.1.create is defined and + not item.1.create) -- name: manage_lvm | Removing LVM physical volume group(s) +- name: manage_lvm | Removing LVM volume group(s) lvg: - vg: "{{ item['vgname'] }}" - pvs: "{{ item['disks']|join(',') }}" + vg: "{{ item.vgname }}" + pvs: "{{ item.disks | join(',') }}" state: "absent" become: true - with_items: "{{ lvm_groups }}" + loop: "{{ lvm_groups }}" when: > - item['create'] is defined and - not item['create'] + item.create is defined and + not item.create From 17e8ec1058c5cb66b21b15a8d3912ac9980508a9 Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Wed, 15 Apr 2020 16:56:18 +0200 Subject: [PATCH 03/11] configured molecule and fix xfs on centos --- handlers/main.yml | 1 - molecule/default/converge.yml | 4 +- .../test_default.cpython-27-PYTEST.pyc | Bin 5120 -> 5120 bytes tasks/create_fs.yml | 93 ++++++++++++++++++ tasks/create_lv.yml | 50 ++++------ tasks/manage_lvm.yml | 52 +++------- 6 files changed, 128 insertions(+), 72 deletions(-) create mode 100644 tasks/create_fs.yml diff --git a/handlers/main.yml b/handlers/main.yml index c4e1266..2027eb2 100644 --- a/handlers/main.yml +++ b/handlers/main.yml @@ -1,3 +1,2 @@ --- # handlers file for ansible-manage-lvm - diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml index 558c977..a3a01f2 100644 --- a/molecule/default/converge.yml +++ b/molecule/default/converge.yml @@ -13,10 +13,12 @@ opts: "--wipesignatures y" create: true filesystem: ext4 + mount: true mntp: "/var/lib/mountpoint" - lvname: my_lv2 - size: 10%VG + size: 20%VG opts: "--wipesignatures y" + mount: true create: true filesystem: xfs mntp: "/var/lib/mountpoint2" diff --git a/molecule/default/tests/__pycache__/test_default.cpython-27-PYTEST.pyc b/molecule/default/tests/__pycache__/test_default.cpython-27-PYTEST.pyc index a74dd9a92dbd309bbc42bd1c86eb9cc4eb9c4464..13c970951392a8d4d9761b16a878f69f765d002d 100644 GIT binary patch delta 15 WcmZqBXwYC|{>;lYO<*J2FJS;AX#~yy delta 15 WcmZqBXwYC|{>;nuifJR;FJS;C8wC^q diff --git a/tasks/create_fs.yml b/tasks/create_fs.yml new file mode 100644 index 0000000..037baa5 --- /dev/null +++ b/tasks/create_fs.yml @@ -0,0 +1,93 @@ +--- + +- name: manage_lvm | creating new filesystem on new LVM logical volume(s) + filesystem: + fstype: "{{ lv.filesystem }}" + dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}" + resizefs: yes + loop: "{{ vg.lvnames }}" + loop_control: + loop_var: lv + become: true + when: > + ( + (vg.create is defined and + vg.create) and + (lv is defined and + lv != 'None') and + (lv.create is defined and + lv.create) and + ( + lv.filesystem is defined and + lv.filesystem != 'None' and + lv.filesystem != 'xfs' + ) + ) + # unable to resize xfs: looks like we've to reference the mountpoint instead of the device + +- name: manage_lvm | creating new xfs filesystem on new LVM logical volume(s) + filesystem: + fstype: "{{ lv.filesystem }}" + dev: "/dev/{{ vg.vgname }}/{{ lv.lvname }}" + loop: "{{ vg.lvnames }}" + loop_control: + loop_var: lv + become: true + when: > + ( + (vg.create is defined and + vg.create) and + (lv is defined and + lv != 'None') and + (lv.create is defined and + lv.create) and + ( + lv.filesystem is defined and + lv.filesystem == 'xfs' + ) + ) + # unable to resize xfs: looks like we've to reference the mountpoint instead of the device + +- name: manage_lvm | unmounting filesystem(s) + mount: + path: "{{ lv.mntp }}" + src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}" + fstype: "{{ lv.filesystem | default(omit) }}" + state: "absent" + become: true + loop: "{{ vg.lvnames }}" + loop_control: + loop_var: lv + when: > + (lv is defined and + lv != 'None') and + (lv.create is defined and + not lv.create and + lv.filesystem != "swap") + +- name: "debug mount" + loop: "{{ vg.lvnames }}" + debug: var=lv + loop_control: + loop_var: lv + + +- name: manage_lvm | mounting new filesystem(s) + mount: + path: "{{ lv.mntp }}" + src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}" + fstype: "{{ lv.filesystem }}" + state: "mounted" + opts: "{{ lv.mopts | default('defaults') }}" + become: true + loop: "{{ vg.lvnames }}" + loop_control: + loop_var: lv + when: > + ((vg.create is defined and + vg.create) and + lv != 'None' and + (lv.create is defined and + lv.create) and + (lv.mount is defined and + lv.mount)) diff --git a/tasks/create_lv.yml b/tasks/create_lv.yml index 837588b..983e420 100644 --- a/tasks/create_lv.yml +++ b/tasks/create_lv.yml @@ -1,40 +1,30 @@ --- +- debug: var=vg + +- name: "debug lvm" + loop: "{{ vg.lvnames }}" + debug: var=lv + loop_control: + loop_var: lv - name: manage_lvm | creating new LVM logical volume(s) lvol: - vg: "{{ vg.0.vgname }}" - lv: "{{ vg.1.lvname'] }}" - size: "{{ vg.1.size }}" + vg: "{{ vg.vgname }}" + lv: "{{ lv.lvname }}" + size: "{{ lv.size }}" shrink: no - opts: "{{ vg.1.opts | default('') }}" + opts: "{{ lv.opts | default('') }}" state: "present" + loop: "{{ vg.lvnames }}" + loop_control: + loop_var: lv become: true when: > ( - (vg.0.create is defined - and vg.0.create) and - (vg[1] is defined and - vg.1 != 'None') and - (vg.1.create is defined and - vg.1.create) - ) - -- name: manage_lvm | creating new filesystem on new LVM logical volume(s) - filesystem: - fstype: "{{ vg.1.filesystem }}" - dev: "/dev/{{ vg.0.vgname }}/{{ vg.1.lvname }}" - resizefs: yes - become: true - when: > - ( - (vg.0.create is defined and - vg.0.create) and - (vg[1] is defined and - vg.1 != 'None') and - (vg.1.create is defined and - vg.1.create) and - ( - vg.1.filesystem is defined and - vg.1.filesystem != 'None' - ) + (vg.create is defined + and vg.create) and + (lv is defined and + lv != 'None') and + (lv.create is defined and + lv.create) ) diff --git a/tasks/manage_lvm.yml b/tasks/manage_lvm.yml index 59df20d..a8e1587 100644 --- a/tasks/manage_lvm.yml +++ b/tasks/manage_lvm.yml @@ -2,59 +2,31 @@ - name: manage_lvm | manage physical volume group creation include: create_vg.yml -- name: manage_lvm | loop over logical volume(s) +- name: manage_lvm | loop over logical volume group(s) to create logical volumes include: create_lv.yml loop: "{{ lvm_groups }}" loop_control: loop_var: vg -- name: manage_lvm | unmounting filesystem(s) - mount: - name: "{{ item.1.mntp }}" - src: "/dev/{{ item.0.vgname }}/{{ item.1.lvname }}" - fstype: "{{ item.1.filesystem | default(omit) }}" - state: "absent" - become: true - loop: "{{ lvm_groups|subelements('lvnames') }}" - when: > - (item.1 is defined and - item.1 != 'None') and - (item.1.create is defined and - not item.1.create and - item.1.filesystem != "swap") - -- 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 - loop: "{{ lvm_groups|subelements('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 | loop over logical volume group(s) to create filesystems + include: create_fs.yml + loop: "{{ lvm_groups }}" + loop_control: + loop_var: vg - name: manage_lvm | Removing LVM logical volume(s) lvol: - vg: "{{ item.0.vgname }}" - lv: "{{ item.1.lvname }}" + vg: "{{ item.vgname }}" + lv: "{{ item.0.lvname }}" state: "absent" force: yes become: true loop: "{{ lvm_groups|subelements('lvnames') }}" when: > - (item.1 is defined and - item.1 != 'None') and - (item.1.create is defined and - not item.1.create) + (item.0 is defined and + item.0 != 'None') and + (item.0.create is defined and + not item.0.create) - name: manage_lvm | Removing LVM volume group(s) lvg: From 96fa78d6d099d0a48642d377d3e7f30a0c554bdf Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Wed, 15 Apr 2020 17:07:33 +0200 Subject: [PATCH 04/11] remove deprecated machines --- .travis.yml | 9 --------- tests/Dockerfile.debian-jessie | 14 -------------- tests/Dockerfile.fedora-24 | 26 -------------------------- tests/Dockerfile.ubuntu-trusty | 14 -------------- 4 files changed, 63 deletions(-) delete mode 100644 tests/Dockerfile.debian-jessie delete mode 100644 tests/Dockerfile.fedora-24 delete mode 100644 tests/Dockerfile.ubuntu-trusty diff --git a/.travis.yml b/.travis.yml index 291a6b5..3ba4064 100644 --- a/.travis.yml +++ b/.travis.yml @@ -18,24 +18,15 @@ env: - distribution: fedora init: /usr/lib/systemd/systemd version: 25 - - distribution: fedora - init: /usr/lib/systemd/systemd - version: 24 - distribution: ubuntu init: /lib/systemd/systemd version: bionic - distribution: ubuntu init: /lib/systemd/systemd version: xenial - - distribution: ubuntu - init: /sbin/init - version: trusty - distribution: debian init: /lib/systemd/systemd version: stretch - - distribution: debian - init: /lib/systemd/systemd - version: jessie before_install: - 'sudo pip install yamllint' diff --git a/tests/Dockerfile.debian-jessie b/tests/Dockerfile.debian-jessie deleted file mode 100644 index 2bb5bc2..0000000 --- a/tests/Dockerfile.debian-jessie +++ /dev/null @@ -1,14 +0,0 @@ -FROM debian:jessie -ENV container=docker - -RUN apt-get update && \ - apt-get install -y --no-install-recommends build-essential libffi-dev \ - libssl-dev python-dev python-minimal python-pip python-setuptools \ - python-virtualenv && \ - rm -rf /var/lib/apt/lists/* - -RUN pip install --upgrade pip setuptools && \ - pip install enum34 ipaddress wheel && \ - pip install ansible ansible-lint - -COPY .ansible-lint / diff --git a/tests/Dockerfile.fedora-24 b/tests/Dockerfile.fedora-24 deleted file mode 100644 index b2a83cc..0000000 --- a/tests/Dockerfile.fedora-24 +++ /dev/null @@ -1,26 +0,0 @@ -FROM fedora:24 -ENV container=docker - -RUN dnf -y install gmp-devel libffi-devel openssl-devel python-crypto \ - python-devel python-dnf python-pip python-setuptools python-virtualenv \ - redhat-rpm-config systemd && \ - dnf -y group install "C Development Tools and Libraries" - -# Install systemd -- See https://hub.docker.com/_/centos/ -RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == systemd-tmpfiles-setup.service ] || rm -f $i; done); \ - rm -f /lib/systemd/system/multi-user.target.wants/*;\ - rm -f /etc/systemd/system/*.wants/*;\ - rm -f /lib/systemd/system/local-fs.target.wants/*; \ - rm -f /lib/systemd/system/sockets.target.wants/*udev*; \ - rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \ - rm -f /lib/systemd/system/basic.target.wants/*;\ - rm -f /lib/systemd/system/anaconda.target.wants/*; - -RUN pip install enum34 ipaddress wheel && \ - pip install ansible ansible-lint - -COPY .ansible-lint / - -VOLUME ["/sys/fs/cgroup"] - -CMD ["/usr/sbin/init"] diff --git a/tests/Dockerfile.ubuntu-trusty b/tests/Dockerfile.ubuntu-trusty deleted file mode 100644 index b1645da..0000000 --- a/tests/Dockerfile.ubuntu-trusty +++ /dev/null @@ -1,14 +0,0 @@ -FROM ubuntu:trusty -ENV container=docker - -RUN apt-get update && \ - apt-get install -y --no-install-recommends build-essential libffi-dev \ - libssl-dev python-dev python-minimal python-pip python-setuptools \ - python-virtualenv && \ - rm -rf /var/lib/apt/lists/* - -RUN pip install --upgrade pip setuptools && \ - pip install enum34 ipaddress wheel && \ - pip install ansible ansible-lint - -COPY .ansible-lint / From 47f8dae16a096050dccbb8d161f4a18946a6ae73 Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Wed, 15 Apr 2020 17:13:38 +0200 Subject: [PATCH 05/11] github action lint --- .github/workflows/molecule.yml | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/.github/workflows/molecule.yml b/.github/workflows/molecule.yml index 4ac0ec3..8077f12 100644 --- a/.github/workflows/molecule.yml +++ b/.github/workflows/molecule.yml @@ -32,26 +32,14 @@ jobs: - name: Install molecule run: | sudo apt update - sudo apt -y install python3-setuptools python3 python3-pip docker + sudo apt -y install python3-setuptools python3 python3-pip docker vagrant sudo pip3 install wheel - sudo pip3 install docker molecule testinfra yamllint ansible-lint flake8 + sudo pip3 install docker molecule testinfra yamllint ansible-lint flake8 molecule-vagrant - 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 From 1c3818e5d06887c01dc0a4b88a39c0561a446300 Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Wed, 15 Apr 2020 17:34:53 +0200 Subject: [PATCH 06/11] mistake on remove volume --- tasks/manage_lvm.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tasks/manage_lvm.yml b/tasks/manage_lvm.yml index a8e1587..ad8aa0b 100644 --- a/tasks/manage_lvm.yml +++ b/tasks/manage_lvm.yml @@ -16,17 +16,17 @@ - name: manage_lvm | Removing LVM logical volume(s) lvol: - vg: "{{ item.vgname }}" - lv: "{{ item.0.lvname }}" + vg: "{{ item.0.vgname }}" + lv: "{{ item.1.lvname }}" state: "absent" force: yes become: true loop: "{{ lvm_groups|subelements('lvnames') }}" when: > - (item.0 is defined and - item.0 != 'None') and - (item.0.create is defined and - not item.0.create) + (item.1 is defined and + item.1 != 'None') and + (item.1.create is defined and + not item.1.create) - name: manage_lvm | Removing LVM volume group(s) lvg: From f81937e9d82bc48f2ee03f6ff462c32bca3da8f0 Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Wed, 15 Apr 2020 18:52:52 +0200 Subject: [PATCH 07/11] makes xfs mountpoint repeatable --- tasks/create_fs.yml | 62 +++++++++++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 19 deletions(-) diff --git a/tasks/create_fs.yml b/tasks/create_fs.yml index 037baa5..40d876f 100644 --- a/tasks/create_fs.yml +++ b/tasks/create_fs.yml @@ -1,4 +1,20 @@ --- +- name: manage_lvm | unmounting filesystem(s) + mount: + path: "{{ lv.mntp }}" + src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}" + fstype: "{{ lv.filesystem | default(omit) }}" + state: "absent" + become: true + loop: "{{ vg.lvnames }}" + loop_control: + loop_var: lv + when: > + (lv is defined and + lv != 'None') and + (lv.create is defined and + not lv.create and + lv.filesystem != "swap") - name: manage_lvm | creating new filesystem on new LVM logical volume(s) filesystem: @@ -25,6 +41,32 @@ ) # unable to resize xfs: looks like we've to reference the mountpoint instead of the device +- name: lvm | check already converted + # at least xfs is executed twice if the partition has changed in the meantime + # then it tries to recreate the fs on the mounted fs which indeed fails... + shell: "xfs_info /dev/{{ vg.vgname }}/{{ lv.lvname }} | grep -c 'ftype=1'" + become: yes + loop: "{{ vg.lvnames }}" + loop_control: + loop_var: lv + register: mountedxfs + ignore_errors: True + changed_when: no + when: > + ( + (lv is defined and item.1 != 'None') and + ( + lv.filesystem is defined and + lv.filesystem == "xfs" + ) + and + ( + lv.create is defined and + lv.create + ) + ) + + - name: manage_lvm | creating new xfs filesystem on new LVM logical volume(s) filesystem: fstype: "{{ lv.filesystem }}" @@ -35,6 +77,7 @@ become: true when: > ( + mountedxfs is failed and (vg.create is defined and vg.create) and (lv is defined and @@ -46,24 +89,6 @@ lv.filesystem == 'xfs' ) ) - # unable to resize xfs: looks like we've to reference the mountpoint instead of the device - -- name: manage_lvm | unmounting filesystem(s) - mount: - path: "{{ lv.mntp }}" - src: "/dev/{{ vg.vgname }}/{{ lv.lvname }}" - fstype: "{{ lv.filesystem | default(omit) }}" - state: "absent" - become: true - loop: "{{ vg.lvnames }}" - loop_control: - loop_var: lv - when: > - (lv is defined and - lv != 'None') and - (lv.create is defined and - not lv.create and - lv.filesystem != "swap") - name: "debug mount" loop: "{{ vg.lvnames }}" @@ -71,7 +96,6 @@ loop_control: loop_var: lv - - name: manage_lvm | mounting new filesystem(s) mount: path: "{{ lv.mntp }}" From b955a6f073b91773f5f90da878268e74872a99e9 Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Wed, 15 Apr 2020 18:54:17 +0200 Subject: [PATCH 08/11] remove unwanted newline --- tasks/create_fs.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/tasks/create_fs.yml b/tasks/create_fs.yml index 40d876f..c068417 100644 --- a/tasks/create_fs.yml +++ b/tasks/create_fs.yml @@ -66,7 +66,6 @@ ) ) - - name: manage_lvm | creating new xfs filesystem on new LVM logical volume(s) filesystem: fstype: "{{ lv.filesystem }}" From 050f8a56f10d81f7827be53b8c769b1aa5021c00 Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Wed, 15 Apr 2020 19:08:34 +0200 Subject: [PATCH 09/11] typo in check --- tasks/create_fs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tasks/create_fs.yml b/tasks/create_fs.yml index c068417..f37198e 100644 --- a/tasks/create_fs.yml +++ b/tasks/create_fs.yml @@ -54,7 +54,7 @@ changed_when: no when: > ( - (lv is defined and item.1 != 'None') and + (lv is defined and lv != 'None') and ( lv.filesystem is defined and lv.filesystem == "xfs" From 2f63eab727cf7b0b389d0d0cc1a1c7236b71f839 Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Fri, 17 Apr 2020 12:56:31 +0200 Subject: [PATCH 10/11] code smells --- .github/workflows/molecule.yml | 2 +- tasks/create_fs.yml | 6 ------ tasks/debian.yml | 2 +- tasks/main.yml | 6 +++--- tasks/manage_lvm.yml | 6 +++--- 5 files changed, 8 insertions(+), 14 deletions(-) diff --git a/.github/workflows/molecule.yml b/.github/workflows/molecule.yml index 8077f12..3b79bb6 100644 --- a/.github/workflows/molecule.yml +++ b/.github/workflows/molecule.yml @@ -15,7 +15,7 @@ on: # 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 diff --git a/tasks/create_fs.yml b/tasks/create_fs.yml index f37198e..dbfea2d 100644 --- a/tasks/create_fs.yml +++ b/tasks/create_fs.yml @@ -89,12 +89,6 @@ ) ) -- name: "debug mount" - loop: "{{ vg.lvnames }}" - debug: var=lv - loop_control: - loop_var: lv - - name: manage_lvm | mounting new filesystem(s) mount: path: "{{ lv.mntp }}" diff --git a/tasks/debian.yml b/tasks/debian.yml index 0ccccbf..cc489f2 100644 --- a/tasks/debian.yml +++ b/tasks/debian.yml @@ -7,7 +7,7 @@ state: "present" become: true -- name: centos | install xfs tools +- name: debian | install xfs tools package: name: "xfsprogs" state: "present" diff --git a/tasks/main.yml b/tasks/main.yml index 86d4e50..34c5d10 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -1,12 +1,12 @@ --- # tasks file for ansible-manage-lvm -- include: debian.yml +- include_tasks: debian.yml when: ansible_os_family == "Debian" -- include: centos.yml +- include_tasks: centos.yml when: ansible_os_family == "RedHat" -- include: manage_lvm.yml +- include_tasks: manage_lvm.yml when: > manage_lvm and lvm_groups is defined diff --git a/tasks/manage_lvm.yml b/tasks/manage_lvm.yml index ad8aa0b..e224bff 100644 --- a/tasks/manage_lvm.yml +++ b/tasks/manage_lvm.yml @@ -1,15 +1,15 @@ --- - name: manage_lvm | manage physical volume group creation - include: create_vg.yml + include_tasks: create_vg.yml - name: manage_lvm | loop over logical volume group(s) to create logical volumes - include: create_lv.yml + include_tasks: create_lv.yml loop: "{{ lvm_groups }}" loop_control: loop_var: vg - name: manage_lvm | loop over logical volume group(s) to create filesystems - include: create_fs.yml + include_tasks: create_fs.yml loop: "{{ lvm_groups }}" loop_control: loop_var: vg From dadb9f24f7ebc2752e6495c4c3569bdee5e0cc68 Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Fri, 17 Apr 2020 13:12:06 +0200 Subject: [PATCH 11/11] remove unwanted files --- .gitignore | 2 ++ .idea/.gitignore | 8 -------- .idea/ansible-manage-lvm.iml | 8 -------- .idea/inspectionProfiles/profiles_settings.xml | 6 ------ .idea/misc.xml | 7 ------- .idea/modules.xml | 8 -------- .idea/vcs.xml | 6 ------ .../__pycache__/conftest.cpython-27-PYTEST.pyc | Bin 1206 -> 0 bytes .../test_default.cpython-27-PYTEST.pyc | Bin 5120 -> 0 bytes 9 files changed, 2 insertions(+), 43 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/ansible-manage-lvm.iml delete mode 100644 .idea/inspectionProfiles/profiles_settings.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/modules.xml delete mode 100644 .idea/vcs.xml delete mode 100644 molecule/default/tests/__pycache__/conftest.cpython-27-PYTEST.pyc delete mode 100644 molecule/default/tests/__pycache__/test_default.cpython-27-PYTEST.pyc diff --git a/.gitignore b/.gitignore index e69de29..89b745a 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,2 @@ +.idea +**/__pycache__ \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 73f69e0..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -# 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 deleted file mode 100644 index d0876a7..0000000 --- a/.idea/ansible-manage-lvm.iml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml deleted file mode 100644 index 105ce2d..0000000 --- a/.idea/inspectionProfiles/profiles_settings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 8656114..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index 900cbad..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/molecule/default/tests/__pycache__/conftest.cpython-27-PYTEST.pyc b/molecule/default/tests/__pycache__/conftest.cpython-27-PYTEST.pyc deleted file mode 100644 index 4cd4455ea52f29cce7001157510af524ee8f81ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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 diff --git a/molecule/default/tests/__pycache__/test_default.cpython-27-PYTEST.pyc b/molecule/default/tests/__pycache__/test_default.cpython-27-PYTEST.pyc deleted file mode 100644 index 13c970951392a8d4d9761b16a878f69f765d002d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5120 zcmdUz&u<&Y702I-D^jE-OLpQPNz-EM)DeYPq$OLjjYe(?BgY8A8bJXcx>#{X)Jn@; zVrR&dC<&xZ`!BS|-g@t$hyE2k=iE#0J@nXq-%1vg0!Dr2oO^u;-yQ zzsBDe`05TyrbMSiGtADT*%D1Xnl8~-NY`kJ2_oUs)aON82qiVvOm&;_)Bl9%nbptnQgLuTW_t|+$6dNuDtd^Ta7|6FTT znoxaFrbhiDE^`>ewpl})FHjJvUk$Ugmm0l?l33b{#ZFW(j&c*8`Uq$iDcOHc|1^Bp{Dye=AgU1leo-MH7Lp?&Q144k*My=VpR5& z?tYfV=C~*a-8k3jQKq&BaUS>8HrCZ0U{Cc%nd&C$I38uD%j?o2BUjWJPD~vmWofSR z0ycyW@Fjf);U;^(J)At<(yd>+L~syrYQHK%!WHdSMM$`!hg-TcjC*I8Q)|}d_a1NQ zt=6oQ>L|^%iL*>4t(n;3q|nCHFz|5l&^@2J=dOD`cF+Cxb+p57Lu1=Jb^y`&PNhq> zfVqX52n)sPJ8U=@DKe9x(xKR#ZQzP^$Y)-<`gk~rjz(#Q1F5Zwie8*)(?SE(ac5Cn zn!DV$J}E|75|wILM*XZfinEAqh>gva@v-6>!!x$KDlPI)%Caa8@56}A7aQ44u$@7r zU?JqinQIU{6>E!~3;9PE@_QHZPh^F5QB_ZNxMyv2Od{UkR%6nM=CC~@XEM`Lg5P!ooWB^(q0)U)fu7KD85E}$00)^<6QHaqh8Ulb75SK|m@GJw9TipLK zTHj^_W6)y|%%`*_kZf`x_XPkZ>x69u20CtjEiG0Z!pnbFF9-pdo9mP?7r|O|W4Q?~ z-kxDbcPNDlka(L5nq(}KuhX>2!{PrN7;Avy@*Ik+@IxIy>QPbz<9?FrVHQt@tC)Y_;#t!;nvZDCU1-{0kX+DW49*habnig9npp2NX+l zf!$t3HY6O`9)WDyB*n-8Up#NTAkW?)arsB?xfe2HH3Q%rQ=e>USO3K7EAby;{$zx5lncV_bVDu=H(0P8!y7Dk>EYWDhO-e+mkG~$#b6khD!k40H(4;VLPlzM zhXwDNHXlXHD~1-{ffq``dq`gZ(!&e+#~1RuuLairyrl)$(<=ekhrA?4e_rI#5Y9Q( zM&%|N7ujf_qJCM7h7r6_uT=2rKm^SG9t3%HZ{4d4$QCG@(v1pc98}C<_V?Gp%wfz1 zbpV?Lb)W`LF$@jf;Cv%|W9A93K&>+z@D(9~Mctn&)Y(|CIY(WC1}ijc0d&BzEIVN9eijWhJdqp+5RC6e5gN#6uM?(9c&jtHkL>s2n4Lb z_O@0yZm}uKgU#tC@_BKh;sgqa!_bchHQp(*}@=QhUOK_KfG{Y;)| zZbCk$!nW|ooO++dPgvZCkf;-$VAmp_QF{*gI|zQO7LP6J?MiL>OSHb~k9UGwpSMy4<;Z&R`gRi;L52i+zAH|nw3LK>`t0+Cmb1b zguHMn|5!K`h5_%d7x-$v+S=F{aWY_w9|hni&X(W+m`@zR9BOv%-EmxYv-Ak}N5l=o z0((CF8eO%yE7`q#NtMI^S5ZqF_WM_&Iu1<4BRdxiZOOb90&oWs@_MX^@2(Awhc3~^ z?m`{mM`#irKwPmJI2JpnhFuOqoF3jml>n8zHgA8qHAhiW^rA?Ds;Ii?Mv;VghTo_z z%=S>>Qrao)Zy|7g71K~Eow*u`AHyG^I_$FeDU0VUeg?7F9g=#3x6T!e{t>n+ehT4h Uq7B6BwN<)FO}|-hHk$r_0gcSp9RL6T