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..9df90df 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_volume2_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..c70fec0 --- /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: kvmonlyvg diff --git a/molecule/kvmonlyvg/tests/conftest.py b/molecule/kvmonlyvg/tests/conftest.py new file mode 120000 index 0000000..add822b --- /dev/null +++ b/molecule/kvmonlyvg/tests/conftest.py @@ -0,0 +1 @@ +../../default/tests/conftest.py \ No newline at end of file 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..0e94bc0 --- /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: kvmsinglelv diff --git a/molecule/kvmsinglelv/tests/conftest.py b/molecule/kvmsinglelv/tests/conftest.py new file mode 120000 index 0000000..add822b --- /dev/null +++ b/molecule/kvmsinglelv/tests/conftest.py @@ -0,0 +1 @@ +../../default/tests/conftest.py \ No newline at end of file diff --git a/molecule/kvmsinglelv/tests/test_default.py b/molecule/kvmsinglelv/tests/test_default.py new file mode 100644 index 0000000..ad9e53a --- /dev/null +++ b/molecule/kvmsinglelv/tests/test_default.py @@ -0,0 +1,22 @@ +"""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 diff --git a/tasks/create_fs.yml b/tasks/create_fs.yml index 44bde9b..7d95b60 100644 --- a/tasks/create_fs.yml +++ b/tasks/create_fs.yml @@ -88,6 +88,7 @@ when: - vg.create is defined - vg.create|bool + - lv is defined - lv != 'None' - lv.create is defined - lv.create|bool diff --git a/tasks/create_lv.yml b/tasks/create_lv.yml index b267adf..ec5a518 100644 --- a/tasks/create_lv.yml +++ b/tasks/create_lv.yml @@ -5,7 +5,7 @@ verbosity: 2 - name: create_lv | debug lvm - loop: "{{ vg.lvnames }}" + loop: "{{ vg.lvnames | default([]) }}" debug: var: lv verbosity: 1 @@ -20,7 +20,7 @@ shrink: false opts: "{{ lv.opts | default('') }}" state: present - loop: "{{ vg.lvnames }}" + loop: "{{ vg.lvnames | default([]) }}" loop_control: loop_var: lv become: true diff --git a/tasks/manage_lvm.yml b/tasks/manage_lvm.yml index c408d28..3fa82dc 100644 --- a/tasks/manage_lvm.yml +++ b/tasks/manage_lvm.yml @@ -21,7 +21,7 @@ state: absent force: true become: true - loop: "{{ lvm_groups|subelements('lvnames') }}" + loop: "{{ lvm_groups|subelements('lvnames', {'skip_missing': true}) }}" when: - item.1 is defined - item.1 != 'None'