From c40f9b7d031f8a7b9eab16aaeb26e54c93425baf Mon Sep 17 00:00:00 2001 From: Charlie Mordant Date: Mon, 11 May 2020 16:35:00 +0200 Subject: [PATCH] testing singl lv and only vg --- .travis.yml | 2 ++ molecule/default/converge.yml | 2 +- molecule/default/tests/test_default.py | 7 ++++++ molecule/kvm/converge.yml | 2 +- molecule/kvmonlyvg/converge.yml | 14 +++++++++++ molecule/kvmonlyvg/molecule.yml | 29 ++++++++++++++++++++++ molecule/kvmonlyvg/tests/conftest.py | 21 ++++++++++++++++ molecule/kvmonlyvg/tests/test_default.py | 11 ++++++++ molecule/kvmsinglelv/converge.yml | 22 ++++++++++++++++ molecule/kvmsinglelv/molecule.yml | 29 ++++++++++++++++++++++ molecule/kvmsinglelv/tests/conftest.py | 21 ++++++++++++++++ molecule/kvmsinglelv/tests/test_default.py | 26 +++++++++++++++++++ tasks/create_fs.yml | 2 +- 13 files changed, 185 insertions(+), 3 deletions(-) create mode 100644 molecule/kvmonlyvg/converge.yml create mode 100644 molecule/kvmonlyvg/molecule.yml create mode 100644 molecule/kvmonlyvg/tests/conftest.py create mode 100644 molecule/kvmonlyvg/tests/test_default.py create mode 100644 molecule/kvmsinglelv/converge.yml create mode 100644 molecule/kvmsinglelv/molecule.yml create mode 100644 molecule/kvmsinglelv/tests/conftest.py create mode 100644 molecule/kvmsinglelv/tests/test_default.py diff --git a/.travis.yml b/.travis.yml index f5114c3..c8e05ae 100644 --- a/.travis.yml +++ b/.travis.yml @@ -26,5 +26,7 @@ before_install: script: - | sudo molecule test --scenario-name kvm + sudo molecule test --scenario-name kvmsinglelv + sudo molecule test --scenario-name kvmonlyvg notifications: webhooks: https://galaxy.ansible.com/api/v1/notifications/ diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml index 3937a13..119de5d 100644 --- a/molecule/default/converge.yml +++ b/molecule/default/converge.yml @@ -15,7 +15,7 @@ filesystem: ext4 mount: true mntp: "/var/lib/mountpoint" - - lvname: my_lv2 + - lvname: my_lw size: 20%VG opts: "--wipesignatures y" mount: true diff --git a/molecule/default/tests/test_default.py b/molecule/default/tests/test_default.py index a97b145..7e75106 100644 --- a/molecule/default/tests/test_default.py +++ b/molecule/default/tests/test_default.py @@ -18,6 +18,13 @@ def test_mylv_logical_volume_is_created(host): assert int(cmd.stdout.rstrip()) >= 1 +def test_mylv_logical_volume_is_created(host): + command = """sudo lvs -o lv_name my_vg --separator='|' --noheadings \ + | grep -c 'my_lw'""" + cmd = host.run(command) + assert int(cmd.stdout.rstrip()) >= 1 + + def test_volume_is_mounted(host): host.file("/var/lib/mountpoint").mode == 0o731 diff --git a/molecule/kvm/converge.yml b/molecule/kvm/converge.yml index ab5315f..ab055c7 100644 --- a/molecule/kvm/converge.yml +++ b/molecule/kvm/converge.yml @@ -15,7 +15,7 @@ filesystem: ext4 mount: true mntp: "/var/lib/mountpoint" - - lvname: my_lv2 + - lvname: my_lw size: 20%VG opts: "--wipesignatures y" mount: true diff --git a/molecule/kvmonlyvg/converge.yml b/molecule/kvmonlyvg/converge.yml new file mode 100644 index 0000000..be123c4 --- /dev/null +++ b/molecule/kvmonlyvg/converge.yml @@ -0,0 +1,14 @@ +--- +- name: Converge + hosts: all + vars: + lvm_groups: + - vgname: my_vg + disks: + - /dev/vdb + create: true + manage_lvm: true + tasks: + - name: "Include lvm" + include_role: + name: "ansible-manage-lvm" diff --git a/molecule/kvmonlyvg/molecule.yml b/molecule/kvmonlyvg/molecule.yml new file mode 100644 index 0000000..225c751 --- /dev/null +++ b/molecule/kvmonlyvg/molecule.yml @@ -0,0 +1,29 @@ +--- +driver: + name: vagrant + provider: + name: libvirt +lint: yamllint . && flake8 && ansible-lint +platforms: + - name: Fedora-Molecule-Volumes-KVM + box: fedora/31-cloud-base + cpu: 2 + memory: 2048 + provider_raw_config_args: + - "storage :file, :size => '1G', :device => 'vdb'" +provisioner: + name: ansible + config_options: + defaults: + forks: 20 + ssh_connection: + pipelining: true + ssh_args: -o ControlMaster=auto -o ControlPersist=600s +verifier: + name: testinfra + env: + PYTHONWARNINGS: "ignore:.*U.*mode is deprecated:DeprecationWarning" + options: + v: 1 +scenario: + name: kvm diff --git a/molecule/kvmonlyvg/tests/conftest.py b/molecule/kvmonlyvg/tests/conftest.py new file mode 100644 index 0000000..7bd2743 --- /dev/null +++ b/molecule/kvmonlyvg/tests/conftest.py @@ -0,0 +1,21 @@ +"""PyTest Fixtures.""" +from __future__ import absolute_import +import os +import pytest + + +def pytest_runtest_setup(item): + """Run tests only when under molecule with testinfra installed.""" + try: + import testinfra + except ImportError: + pytest.skip("Test requires testinfra", allow_module_level=True) + if "MOLECULE_INVENTORY_FILE" in os.environ: + pytest.testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( + os.environ["MOLECULE_INVENTORY_FILE"] + ).get_hosts("all") + else: + pytest.skip( + "Test should run only from inside molecule.", + allow_module_level=True + ) diff --git a/molecule/kvmonlyvg/tests/test_default.py b/molecule/kvmonlyvg/tests/test_default.py new file mode 100644 index 0000000..b03947a --- /dev/null +++ b/molecule/kvmonlyvg/tests/test_default.py @@ -0,0 +1,11 @@ +"""Role testing files using testinfra.""" + + +def test_lvm_package_shall_be_installed(host): + assert host.package("lvm2").is_installed + + +def test_non_persistent_volume_group_is_created(host): + command = """sudo vgdisplay | grep -c 'my_vg'""" + cmd = host.run(command) + assert '1' in cmd.stdout diff --git a/molecule/kvmsinglelv/converge.yml b/molecule/kvmsinglelv/converge.yml new file mode 100644 index 0000000..09d88bd --- /dev/null +++ b/molecule/kvmsinglelv/converge.yml @@ -0,0 +1,22 @@ +--- +- name: Converge + hosts: all + vars: + lvm_groups: + - vgname: my_vg + disks: + - /dev/vdb + create: true + lvnames: + - lvname: my_lv + size: 40%VG + opts: "--wipesignatures y" + create: true + filesystem: ext4 + mount: true + mntp: "/var/lib/mountpoint" + manage_lvm: true + tasks: + - name: "Include lvm" + include_role: + name: "ansible-manage-lvm" diff --git a/molecule/kvmsinglelv/molecule.yml b/molecule/kvmsinglelv/molecule.yml new file mode 100644 index 0000000..225c751 --- /dev/null +++ b/molecule/kvmsinglelv/molecule.yml @@ -0,0 +1,29 @@ +--- +driver: + name: vagrant + provider: + name: libvirt +lint: yamllint . && flake8 && ansible-lint +platforms: + - name: Fedora-Molecule-Volumes-KVM + box: fedora/31-cloud-base + cpu: 2 + memory: 2048 + provider_raw_config_args: + - "storage :file, :size => '1G', :device => 'vdb'" +provisioner: + name: ansible + config_options: + defaults: + forks: 20 + ssh_connection: + pipelining: true + ssh_args: -o ControlMaster=auto -o ControlPersist=600s +verifier: + name: testinfra + env: + PYTHONWARNINGS: "ignore:.*U.*mode is deprecated:DeprecationWarning" + options: + v: 1 +scenario: + name: kvm diff --git a/molecule/kvmsinglelv/tests/conftest.py b/molecule/kvmsinglelv/tests/conftest.py new file mode 100644 index 0000000..7bd2743 --- /dev/null +++ b/molecule/kvmsinglelv/tests/conftest.py @@ -0,0 +1,21 @@ +"""PyTest Fixtures.""" +from __future__ import absolute_import +import os +import pytest + + +def pytest_runtest_setup(item): + """Run tests only when under molecule with testinfra installed.""" + try: + import testinfra + except ImportError: + pytest.skip("Test requires testinfra", allow_module_level=True) + if "MOLECULE_INVENTORY_FILE" in os.environ: + pytest.testinfra_hosts = testinfra.utils.ansible_runner.AnsibleRunner( + os.environ["MOLECULE_INVENTORY_FILE"] + ).get_hosts("all") + else: + pytest.skip( + "Test should run only from inside molecule.", + allow_module_level=True + ) diff --git a/molecule/kvmsinglelv/tests/test_default.py b/molecule/kvmsinglelv/tests/test_default.py new file mode 100644 index 0000000..a97b145 --- /dev/null +++ b/molecule/kvmsinglelv/tests/test_default.py @@ -0,0 +1,26 @@ +"""Role testing files using testinfra.""" + + +def test_lvm_package_shall_be_installed(host): + assert host.package("lvm2").is_installed + + +def test_non_persistent_volume_group_is_created(host): + command = """sudo vgdisplay | grep -c 'my_vg'""" + cmd = host.run(command) + assert '1' in cmd.stdout + + +def test_mylv_logical_volume_is_created(host): + command = """sudo lvs -o lv_name my_vg --separator='|' --noheadings \ + | grep -c 'my_lv'""" + cmd = host.run(command) + assert int(cmd.stdout.rstrip()) >= 1 + + +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_fs.yml b/tasks/create_fs.yml index abf3770..b905a27 100644 --- a/tasks/create_fs.yml +++ b/tasks/create_fs.yml @@ -41,7 +41,7 @@ ) # unable to resize xfs: looks like we've to reference the mountpoint instead of the device -- name: lvm | check already converted +- name: manage_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 {{ lv.mntp }} | grep -c 'ftype=1'"