From bceb5e6eb9d3f0c7a48bdd1d845c90704beb60a6 Mon Sep 17 00:00:00 2001 From: Marian Csontos Date: Thu, 15 Aug 2024 21:19:02 +0200 Subject: [PATCH] Remove dependency on dlm Also update license tags to SPDX compatible identifiers Resolves: RHEL-54266 --- gating.yaml | 9 + lvm2.spec | 45 ++--- tests/collect_output.sh | 63 +++++++ tests/get_lvm2_tarball.sh | 30 +++ tests/mock_build_and_test.sh | 85 +++++++++ tests/provision.fmf | 6 + tests/refresh.sh | 16 ++ tests/run_tests.yml | 77 ++++++++ tests/tests.yml | 348 +++++++++++++++++++++++++++++++++++ 9 files changed, 652 insertions(+), 27 deletions(-) create mode 100644 gating.yaml create mode 100644 tests/collect_output.sh create mode 100644 tests/get_lvm2_tarball.sh create mode 100644 tests/mock_build_and_test.sh create mode 100644 tests/provision.fmf create mode 100644 tests/refresh.sh create mode 100644 tests/run_tests.yml create mode 100644 tests/tests.yml diff --git a/gating.yaml b/gating.yaml new file mode 100644 index 0000000..f54ce12 --- /dev/null +++ b/gating.yaml @@ -0,0 +1,9 @@ +--- !Policy +product_versions: + - rhel-10 +decision_context: osci_compose_gate +rules: + - !PassingTestCaseRule {test_case_name: osci.brew-build.tier0.functional} + # TODO: This is not automated yet and it's not easy to run, so we agreed + # with QE we will not run these for 8.1 + #- !PassingTestCaseRule {test_case_name: manual.sst_platform_storage.lvm2.manual-sts-tier1} diff --git a/lvm2.spec b/lvm2.spec index 1a40431..1e5d392 100644 --- a/lvm2.spec +++ b/lvm2.spec @@ -12,25 +12,19 @@ %global enable_integrity 1 %global system_release_version 23 -%global systemd_version 247-1 +%global systemd_version 256 %global dracut_version 002-18 %global util_linux_version 2.24 %global bash_version 4.0 %global corosync_version 1.99.9-1 %global resource_agents_version 3.9.5-12 -%global dlm_version 4.0.6-1 %global libselinux_version 1.30.19-4 %global persistent_data_version 0.7.0-0.1.rc6 %global sanlock_version 3.3.0-2 %global enable_lockd_sanlock %{enable_lvmlockd} -%global enable_lockd_dlm %{enable_lvmlockd} %if 0%{?rhel} && 0%{?rhel} <= 8 - %ifnarch i686 x86_64 ppc64le s390x - %global enable_lockd_dlm 0 - %endif - %ifnarch x86_64 ppc64 aarch64 %global enable_lockd_sanlock 0 %endif @@ -49,7 +43,7 @@ Epoch: %{rhel} %endif Version: 2.03.24 Release: %autorelease -License: GPLv2 +License: GPL-2.0-only URL: https://sourceware.org/lvm2 Source0: https://sourceware.org/pub/lvm2/releases/LVM2.%{version}.tgz Patch1: 0001-RHEL9.patch @@ -72,9 +66,6 @@ BuildRequires: libblkid-devel >= %{util_linux_version} BuildRequires: ncurses-devel BuildRequires: libedit-devel BuildRequires: libaio-devel -%if %{enable_lockd_dlm} -BuildRequires: dlm-devel >= %{dlm_version} -%endif BuildRequires: module-init-tools BuildRequires: pkgconfig BuildRequires: systemd-devel @@ -150,9 +141,6 @@ or more physical volumes and creating one or more logical volumes %if %{enable_lvmpolld} --enable-lvmpolld \ %endif -%if %{enable_lockd_dlm} - --enable-lvmlockd-dlm --enable-lvmlockd-dlmcontrol \ -%endif %if %{enable_lockd_sanlock} --enable-lvmlockd-sanlock \ %endif @@ -392,7 +380,7 @@ systemctl start lvm2-lvmpolld.socket >/dev/null 2>&1 || : ############################################################################## %package devel Summary: Development libraries and headers -License: LGPLv2 +License: LGPL-2.1-only Requires: %{name} = %{?epoch}:%{version}-%{release} Requires: device-mapper-devel = %{?epoch}:%{device_mapper_version}-%{release} Requires: device-mapper-event-devel = %{?epoch}:%{device_mapper_version}-%{release} @@ -409,7 +397,7 @@ the lvm2 libraries. %package libs Summary: Shared libraries for lvm2 -License: LGPLv2 +License: LGPL-2.1-only Requires: device-mapper-event = %{?epoch}:%{device_mapper_version}-%{release} %description libs @@ -440,16 +428,13 @@ This package contains shared lvm2 libraries for applications. ############################################################################## # LVM locking daemon ############################################################################## -%if %{enable_lockd_dlm} || %{enable_lockd_sanlock} +%if %{enable_lockd_sanlock} %package lockd Summary: LVM locking daemon Requires: lvm2 = %{?epoch}:%{version}-%{release} %if %{enable_lockd_sanlock} Requires: sanlock-lib >= %{sanlock_version} %endif -%if %{enable_lockd_dlm} -Requires: dlm-lib >= %{dlm_version} -%endif Requires(post): systemd-units >= %{systemd_version} Requires(preun): systemd-units >= %{systemd_version} Requires(postun): systemd-units >= %{systemd_version} @@ -484,7 +469,7 @@ LVM commands use lvmlockd to coordinate access to shared storage. %package dbusd Summary: LVM2 D-Bus daemon -License: GPLv2 +License: GPL-2.0-only BuildArch: noarch Requires: lvm2 >= %{?epoch}:%{version}-%{release} Requires: dbus @@ -524,7 +509,7 @@ Daemon for access to LVM2 functionality through a D-Bus interface. %package -n device-mapper Summary: Device mapper utility Version: %{device_mapper_version} -License: GPLv2 +License: GPL-2.0-only URL: https://www.sourceware.org/dm/ Requires: device-mapper-libs = %{?epoch}:%{device_mapper_version}-%{release} Requires: util-linux-core >= %{util_linux_version} @@ -558,7 +543,7 @@ for the kernel device-mapper. %package -n device-mapper-devel Summary: Development libraries and headers for device-mapper Version: %{device_mapper_version} -License: LGPLv2 +License: LGPL-2.1-only Requires: device-mapper = %{?epoch}:%{device_mapper_version}-%{release} Requires: pkgconfig @@ -574,7 +559,7 @@ the device-mapper libraries. %package -n device-mapper-libs Summary: Device-mapper shared library Version: %{device_mapper_version} -License: LGPLv2 +License: LGPL-2.1-only Requires: device-mapper = %{?epoch}:%{device_mapper_version}-%{release} %description -n device-mapper-libs @@ -622,7 +607,7 @@ fi %package -n device-mapper-event-libs Summary: Device-mapper event daemon shared library Version: %{device_mapper_version} -License: LGPLv2 +License: LGPL-2.1-only %description -n device-mapper-event-libs This package contains the device-mapper event daemon shared library, @@ -637,7 +622,7 @@ libdevmapper-event. %package -n device-mapper-event-devel Summary: Development libraries and headers for the device-mapper event daemon Version: %{device_mapper_version} -License: LGPLv2 +License: LGPL-2.1-only Requires: device-mapper-event = %{?epoch}:%{device_mapper_version}-%{release} Requires: pkgconfig @@ -657,7 +642,7 @@ the device-mapper event library. %package testsuite Summary: LVM2 Testsuite # Most of the code is GPLv2, the harness in test/lib/{brick-shelltest.h,runner.cpp} is BSD, and C files in test/api are LGPLv2... -License: LGPLv2 and GPLv2 and BSD-2-Clause +License: GPL-2.0-only AND LGPL-2.1-only AND BSD-2-Clause %description testsuite An extensive functional testsuite for LVM2. @@ -670,6 +655,12 @@ An extensive functional testsuite for LVM2. %endif %changelog +* Wed Aug 21 2024 Marian Csontos - 2.03.24-3 +- Remove dlm. + +* Thu Aug 15 2024 Marian Csontos - 2.03.24-2 +- Update License tags to SPDX compliant identifiers. + * Thu Aug 15 2024 Marian Csontos - 2.03.24-1 - Update to upstream version 2.03.24. - See WHATS_NEW and WHATS_NEW_DM for more information. diff --git a/tests/collect_output.sh b/tests/collect_output.sh new file mode 100644 index 0000000..a9a2a67 --- /dev/null +++ b/tests/collect_output.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +set -xv + +DIR="$1" +LIST="$2" + +[[ -n "$DIR" ]] || { + echo "ERROR: Missing DIR" >&2 + exit 1 +} + +cd "$DIR" + +# TODO: use find and xargs (?) + +passed_logs() { + grep '\(passed\|skipped\|warnings\)$' list | sed 's|/|_|' | sed 's| .*|.txt|' +} + +# Remove log file if the test succeeded (we are generating tons of logs) +echo "Removing output of passed tests..." +#passed_logs + +for f in $(passed_logs); do + #echo " $f" + rm -f "$f" +done + +# rm -f $(passed_logs) + +if [[ -n "$LIST" ]]; then + cat list >> "$LIST" +fi + +# Remove empty files and compress the rest: +for f in *.txt; do + if [[ -s "$f" ]]; then + echo "Compressing file '$f'..." + ls -l "$f" + gzip "$f" + ls -l "$f.gz" + else + echo "Removing empty file '$f'" + ls -l "$f" + rm -f "$f" + fi +done + +for f in *.gz; do +if [[ -f "$f" ]]; then + + # Use tar so we do not transfer dozens of small files: + tar cvf "logfiles.tar" *.gz + + # Clean up: + rm -f *.gz + +exit 1 + +fi +done + diff --git a/tests/get_lvm2_tarball.sh b/tests/get_lvm2_tarball.sh new file mode 100644 index 0000000..bcd14bc --- /dev/null +++ b/tests/get_lvm2_tarball.sh @@ -0,0 +1,30 @@ +#!/usr/bin/sh + +set -e + +PKG=$1 + +[[ "$PKG" == lvm2 ]] + +CHECK=false + +cat sources | \ + while read SHA512_HEADER TARBALL EQUAL HASH; do + if [[ "$SHA512_HEADER" == SHA512 ]]; then + TARBALL=$(echo $TARBALL |sed 's/.\(.*\)./\1/') + CHECK="sha512sum" + else + HASH="$SHA512_HEADER" + CHECK="md5sum" + fi + if [[ -f "$TARBALL" ]] && "$CHECK" -c sources; then + echo "File already downloaded and verified" + else + URL="https://sourceware.org/pub/$PKG/releases/$TARBALL" + echo "Fetching '$URL'..." + curl -k -o "$TARBALL" "$URL" + echo "Checking hash of '$TARBALL'..." + "$CHECK" -c sources + fi + done + diff --git a/tests/mock_build_and_test.sh b/tests/mock_build_and_test.sh new file mode 100644 index 0000000..30eb7ab --- /dev/null +++ b/tests/mock_build_and_test.sh @@ -0,0 +1,85 @@ +#!/bin/bash + +set -e +set -xv + +# TODO: Use the role! +dnf install -y mock + +# lsblk and blkid: +dnf install -y util-linux + +# rpmbuild and rpmdev-setuptree +dnf install -y rpmdevtools rpm-build + +# mock: +dnf install -y mock + +# gather info about the system and environment: +set + +pwd +ls -al + +uname -a + +rpm -qa | grep -F lvm2 | : +rpm -qa | grep -F device-mapper | : + +which lsblk | : +lsblk | : +which blkid | : +blkid | : + +find / -name lvm2.spec + +# NOTE: The following does not work - it will download src.rpm from default repo, not the one under test... +################################################################################# +## compile the test suite - using rpmbuild and mock +################################################################################# +#rpmdev-setuptree +# +#dnf download --source lvm2 +#rpm -ivh lvm2*.src.rpm +# +#find / -name '*.patch' +#exit 0 +##rpmbuild -bs + +################################################################################ +# compile the test suite - using mock +################################################################################ +if [[ -f lvm2.spec ]]; then + +mock_profile() { +( + ID= + VERSION_ID= + source /etc/os-release "" + [[ -n "$ID" && -n "$VERSION_ID" ]] || exit 1 + echo "${ID}-${VERSION_ID}-$(arch)" +) +} + +MOCK_PROFILE="$(mock_profile)" + +rm -rf "/var/lib/mock/$MOCK_PROFILE/result/" + +#mock -r "$MOCK_PROFILE" --init +#mock -r "$MOCK_PROFILE" --installdeps lvm2.spec +# FIXME: /var/str is controlled by tenv_workdir ansible variable - need an env.variable! +#mock -r "$MOCK_PROFILE" --buildsrpm --no-clean --spec lvm2.spec --sources "/var/str/source" --short-circuit=build +#ls -l + +find / -name 'lvm2*.src.rpm' +mock -r "$MOCK_PROFILE" --rebuild --no-clean ~/rpmbuild/SRPMS/lvm2*.src.rpm + +find / -name 'lvm2-2*.rpm' + +[[ -n $(find / -name 'lvm2-testsuite-2*.rpm') ]] + +ls -l +#dnf install -y ~/rpmbuild/RPMS/lvm2-testsuite-*.rpm +dnf install -y /var/lib/mock/"$MOCK_PROFILE"/result/lvm2-testsuite-2*.rpm +fi + diff --git a/tests/provision.fmf b/tests/provision.fmf new file mode 100644 index 0000000..c1b5de8 --- /dev/null +++ b/tests/provision.fmf @@ -0,0 +1,6 @@ +--- +# lvm2 testsuite requires at least 2G of RAM to run smoothly in /dev/shm +standard-inventory-qcow2: + qemu: + m: 3G + diff --git a/tests/refresh.sh b/tests/refresh.sh new file mode 100644 index 0000000..4358618 --- /dev/null +++ b/tests/refresh.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +refresh_dirs() { + local dir= + while [[ -n "$*" ]]; do + if [[ -d "$1" ]]; then + rm -rf "$1" + fi + mkdir -p "$(dirname "$1")" + mkdir "$1" + shift + done +} + +refresh_dirs ~/rpmbuild/SRPMS ~/rpmbuild/RPMS +refresh_dirs /tmp/source diff --git a/tests/run_tests.yml b/tests/run_tests.yml new file mode 100644 index 0000000..c3af9b6 --- /dev/null +++ b/tests/run_tests.yml @@ -0,0 +1,77 @@ +--- +- name: Echo test header + shell: | + MSG="Running test case {{ test_case }}" + echo "*** $MSG ***" >/dev/console + logger -p user.notify "$MSG" + true + +- name: Create artifacts directory + file: + state: directory + path: "{{ remote_artifacts }}/{{ test_case }}" + +- name: Run the testsuite + # lvm2-testsuite --batch --flavours "{{ flavours.stdout_lines|join(',')}}" --only "{{ run_tests|default([])|join(',') }}" --skip "{{ skip_tests|default([])|join(',') }}" 2>&1 | tee "lvm2-testsuite.out" + shell: | + # Run testsuite in RAM disk: + mkdir -p /dev/shm/lvm2-slave + export LVM_TEST_DIR=/dev/shm/lvm2-slave + mount -o remount,dev /dev/shm + # Protection against some of our non-deterministic tests + # TODO: Add diff for each test run, so it is easier to tell whether test is broken, or there is an issue + RESULT=1 + ITERATION=0 + while [[ "$RESULT" -ne 0 && "$ITERATION" -lt {{ iterations|default(3) }} ]]; do + let ITERATION++ + mkdir "$ITERATION" + cd "$ITERATION" + echo "Running iteration $ITERATION..." + lvm2-testsuite --batch --flavours "{{ flavours.stdout_lines|join(',')}}" --only "{{ test_case }}" 2>&1 | tee "lvm2-testsuite.out" + RESULT="${PIPESTATUS[0]}" + cd ".." + done + cp -R "$ITERATION"/* "." + exit "$RESULT" + args: + chdir: "{{ remote_artifacts }}/{{ test_case }}" + register: lvm2_testsuite_run + ignore_errors: yes + +- name: Collect artifacts + shell: | + "{{ workdir }}/collect_output.sh" "{{ remote_artifacts }}/{{ test_case }}" "{{ remote_artifacts }}/list" + ignore_errors: yes + register: lvm2_testsuite_results + +#- name: Find artifacts +# find: +# path: "{{ remote_artifacts }}" +# patterns: "*.txt" +# register: artifacts_files + +- name: Fetch output + fetch: + dest: "{{ artifacts }}/{{ test_case }}/" + src: "{{ remote_artifacts }}/{{ test_case }}/{{ logfile }}" + flat: yes + with_items: + - lvm2-testsuite.out + - journal + - list + - logfiles.tar + loop_control: + loop_var: logfile + when: lvm2_testsuite_results.failed + +- name: Fetch list + fetch: + dest: "{{ artifacts }}/" + src: "{{ remote_artifacts }}/list" + flat: yes + +- name: Summary + shell: | + cut -d" " -f2 "{{ remote_artifacts }}/list" | sort | uniq -c + grep "failed$" "{{ remote_artifacts }}/list" || : + diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..a459a8c --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,348 @@ +- hosts: localhost + vars: + workdir: /tmp/testwd + remote_artifacts: /tmp/testwd/artifacts + srcdir: /tmp/source + package: lvm2 + fetch_all: true + #fetch_gzip: true + #fetch_tar: true + install_packages: true + #filter_flavours: '| grep -v "lockd\|polld"' # Ignore lockd and polld + filter_flavours: '| grep "vanilla"' # Run vanilla only + #run_tests: + # - vg + ignore_failures: + # tests need updating - remove after verified: + - lvconvert-thin.sh + - lvcreate-cache.sh + - lvcreate-thin-big.sh + # unstable results - should be warnings only + - lvconvert-cache-abort.sh + - lvconvert-mirror.sh + - dmeventd-restart.sh # TODO: could be an issue! + - nomda-restoremissing.sh # Unstable test, investigate + - api/dbus # New experimental VDO code not working yet + - open-file-limit.sh # Unstable test + # these are known issues with md not cleaning up after itself: + #- shell/duplicate-pvs-md0.sh + #- shell/duplicate-pvs-md1.sh + - shell/integrity # An unknown issue, likely in kernel + - writecache-blocksize # A new test not working properly + - system_id.sh + # issue with new kernel metadata format - need better way how to make thin meta corrupted: + - shell/lvconvert-repair-policy.sh + - shell/lvconvert-repair-thin.sh + - shell/thin-foreign-dmeventd.sh + - shell/lvresize-fs-crypt.sh + skip_tests: + - read-ahead.sh # tuned is interfering with tests + - shell/inconsistent-metadata.sh # Requires more space in /dev/mapper + + # VDO is not supported yet: + #- vdo # no vdo in el9 yet + #- lvconvert-cache-vdo.sh # TODO: likely an issue! + #- lvcreate-vdo-cache.sh # TODO: likely an issue! + - lvconvert-cache-abort.sh # TODO: likely an issue! + + # TODO: Check and update list of known issues and unstable tests + - shell/000-basic.sh # this fails if there is different version of installed lvm2 and lvm2-testsuite (and we do not want this to fail gating) + - shell/fsadm-crypt.sh # broken on RHEL-8 - requires input on stdin + - lvconvert-raid-reshape.sh # blocking forever today, worked fine on Monday. kernel issue? + # these are known issues with md not cleaning up after itself: + #- shell/duplicate-pvs-md0.sh + #- shell/duplicate-pvs-md1.sh + + - shell/lvconvert-raid-takeover.sh # did this ever work? + - shell/lvm-on-md.sh # check the test! + - shell/thin-flags.sh # check the test! + - shell/inconsistent-metadata.sh # In CI ends with "No space left on device" + + # these may take considerable amount of time and consume lot of RAM - we are running these on our infrastructure: + # vgchange-many does not work in CI - it is timing out writing large amounts of data + - shell/vgchange-many.sh + #- shell/vgcreate-many-pvs.sh + #- shell/thin-many-dmeventd.sh + + # NOTE: Uncomment the following to quickly check the test itself is working + #- vg + #- lv + #- pv + #- raid + #- mirror + #- python + #- poll + #- thin + #- scan + #- dbus + # + tags: + - classic + + tasks: + + - name: Set variables + set_fact: + artifacts: "{{ artifacts|default(lookup('env', 'TEST_ARTIFACTS') or './artifacts') }}" + + - name: str-common-init + include_role: + name: str-common-init + + - name: Install basic tools + dnf: + name: + - python3-libselinux + - sed + - tar + - util-linux + - psmisc # killall is required by testsuite + - nmap-ncat # nc required by lvmpolld tests (or socat) + - binutils # strings is required by some tests + - strace + - vim-common # xxd required by some tests + - mdadm + # No vdo package in EL9 yet + # - https://issues.redhat.com/browse/RHELPLAN-77194 + - vdo + - kmod-kvdo + state: present + + - name: See RAM and disks + shell: | + set -xv + free + mount + df + lsblk + true + + - name: Install rsync on localhost + dnf: + name: rsync + state: present + delegate_to: 127.0.0.1 + ignore_errors: yes + register: has_rsync + + - name: Install rsync on remote + dnf: + name: rsync + state: present + + - name: Create workdir + file: + state: directory + path: "{{ workdir }}" + mode: 0755 + + - name: Copy scripts to remote machine + copy: + src: "{{ playbook_dir }}/{{ item }}" + dest: "{{ workdir }}/" + mode: 0755 + with_items: + - get_lvm2_tarball.sh + - refresh.sh + - collect_output.sh + #- mock_build_and_test.sh + + - name: Check lvm2-testsuite is present + dnf: + name: lvm2-testsuite + state: present + ignore_errors: yes + register: lvm2_testsuite + + - name: Build and install lvm2-testsuite if not available + when: lvm2_testsuite.failed + block: + + - name: Make sure dependencies for retrieving the sources are installed + dnf: + name: + - curl + - wget + - rpm-build + - xz + #- mock + - rpmdevtools + - make + + - name: Copy spec file to remote machine + copy: + src: "{{ playbook_dir }}/../{{package}}.spec" + dest: "{{ workdir }}/" + +# - name: Display path to patches +# debug: +# msg: "{{ playbook_dir + '/../*.patch' }}" +# +# - name: Display patches +# debug: +# msg: "{{ lookup('fileglob', playbook_dir + '/../*.patch') }}" + + - name: Copy patches to remote machine + copy: + src: "{{ item }}" + dest: "{{ workdir }}/" + with_fileglob: "{{ playbook_dir }}/../*.patch" + + - name: Copy sources file to remote machine + copy: + src: "{{ playbook_dir }}/../sources" + dest: "{{ workdir }}/" + + - name: Enable testsuite in the spec file + shell: | + sed -i 's/enable_testsuite .*/enable_testsuite 1/' lvm2.spec + args: + chdir: "{{ workdir }}" + + # This would be handled by mock if available. And is not needed at all on Fedora + # TODO: Use conditional for the Fedora part! + - name: Enable buildroot repo + shell: dnf -y config-manager --set-enabled rhel-buildroot + ignore_errors: yes + + - name: Install build deps + shell: dnf -y build-dep {{ workdir }}/{{ package }}.spec + + - name: Run the refresh script + shell: | + ./refresh.sh + args: + chdir: "{{ workdir }}" + + - name: Run the source-retrieval script + shell: | + ./get_lvm2_tarball.sh {{ package }} + args: + chdir: "{{ workdir }}" + + - name: Build RPMs + shell: | + #rpmbuild -bp lvm2.spec --define "_sourcedir $PWD" --define "_specdir $PWD" --define "_builddir {{ srcdir }}" + #rpmbuild -bs lvm2.spec --define "_sourcedir $PWD" --define "_specdir $PWD" --define "_builddir {{ srcdir }}" + rpmbuild -ba lvm2.spec --define "_sourcedir $PWD" --define "_specdir $PWD" --define "_builddir {{ srcdir }}" + args: + chdir: "{{ workdir }}" + + - name: Install lvm2-testsuite + shell: | + dnf install -y /root/rpmbuild/RPMS/$(uname -m)/lvm2-testsuite-2.*.rpm + + args: + chdir: '{{ workdir }}' + +# - name: Build and install lvm2-testsuite +# shell: | +# ./mock_build_and_test.sh +# args: +# chdir: "{{ workdir }}" + + - name: Install lvm2 packages if requested + dnf: + state: present + name: + - lvm2 + - lvm2-lockd + - lvm2-dbusd + - device-mapper-event + when: install_packages|default(false) + + - name: Disable services interfering with tests + systemd: + name: "{{item}}" + masked: yes + enabled: no + state: stopped + ignore_errors: yes + with_items: + - lvm2-lvmpolld.service + - lvm2-lvmpolld.socket + - lvm2-monitor.service + - dm-event.socket + - dm-event.service + - lvm2-pvscan@.service + + # The above systemd module does not like templates... + - name: Disable pvscan service + shell: | + systemctl mask lvm2-pvscan@.service + ignore_errors: yes + + - name: Disable monitoring + shell: | + sed -i 's/monitoring *= *.*/monitoring = 0/' /etc/lvm/lvm.conf + + - name: Check environment + shell: | + lvmconfig --typeconfig diff + systemctl -a + + - name: Create artifacts directory + file: + state: directory + path: "{{ remote_artifacts }}" + + - name: Gather flavours + shell: | + ls -1 flavour-udev-* | grep -v "lvmlockd-dlm\|lvmlockd-sanlock" {{ filter_flavours|default('') }} | sed 's/^flavour-//' + args: + chdir: /usr/share/lvm2-testsuite/lib + register: flavours + +# - name: Find flavours +# find: +# contains: '^flavour-' +# paths: /usr/share/lvm2-testsuite/lib +# register: flavours +# # TODO: should use flavours.files when using find module, must drop flavour- prefix + +# - name: Debug flavours +# debug: +# var: flavours +# +# - name: Debug skip +# debug: +# msg: | +# '\({{ skip_tests|join("\|") }}\)' + + - name: Gather tests + shell: | + find . -name "*.sh" | sed 's/^\.\///' | grep -v '\({{ skip_tests|default(["qwqwasdf"])|join("\|") }}\)' | grep '\({{ run_tests|default(["."])|join("\|") }}\)' | sort + args: + chdir: /usr/share/lvm2-testsuite + register: lvm2_tests + +# - name: Debug lvm2_tests +# debug: +# var: lvm2_tests + + - name: Run tests + include_tasks: run_tests.yml + with_items: "{{ lvm2_tests.stdout_lines }}" + loop_control: + loop_var: test_case + + # NOTE: test.log is required by CI - shall we append to it? + - name: Fetch list with results as test.log + fetch: + dest: "{{ artifacts }}/test.log" + src: "{{ remote_artifacts }}/list" + flat: yes + +# - name: Check artifacts size on remote +# shell: | +# du -s "{{ remote_artifacts }}/" +# +# - name: Check artifacts size on local +# shell: | +# du -s "{{ artifacts }}/" +# delegate_to: 127.0.0.1 + + - name: Report failures + shell: | + ! grep -v '\(passed\|skipped\|warnings\)' "{{ remote_artifacts }}/list" | grep -v '\({{ ignore_failures|default(["qwqwasdf"])|join("\|") }}\)' +