From 144f4d5e66940cd23e00f8832c06a693a2c9f382 Mon Sep 17 00:00:00 2001 From: Guillaume Boutry Date: Tue, 4 Feb 2025 11:52:19 +0100 Subject: [PATCH] Add storage testing Add storage testing, simulate loop device as block device. Signed-off-by: Guillaume Boutry --- .github/assets/testing/edge.yml | 2 ++ .github/workflows/build-golang.yml | 2 +- .github/workflows/build-snap.yml | 39 ++++++++++++++++++++++++------ .github/workflows/test-golang.yml | 4 +-- .github/workflows/test-python.yml | 6 ++--- .github/workflows/test-snap.yml | 4 +-- 6 files changed, 42 insertions(+), 15 deletions(-) diff --git a/.github/assets/testing/edge.yml b/.github/assets/testing/edge.yml index fe07fa83d..503f76b60 100644 --- a/.github/assets/testing/edge.yml +++ b/.github/assets/testing/edge.yml @@ -4,6 +4,8 @@ core: bootstrap_args: - --bootstrap-constraints - root-disk=5G + - --config + - caas-image-repo=ghcr.io/juju charms: cinder-ceph-k8s: channel: 2024.1/edge diff --git a/.github/workflows/build-golang.yml b/.github/workflows/build-golang.yml index 752e742eb..8c1bc5d28 100644 --- a/.github/workflows/build-golang.yml +++ b/.github/workflows/build-golang.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup GO uses: actions/setup-go@v4 with: diff --git a/.github/workflows/build-snap.yml b/.github/workflows/build-snap.yml index a00ad7b49..5ed03df6d 100644 --- a/.github/workflows/build-snap.yml +++ b/.github/workflows/build-snap.yml @@ -15,14 +15,14 @@ jobs: snap: ${{ steps.snapcraft.outputs.snap }} steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Build snap locally uses: canonical/action-build@v1.3.0 id: snapcraft - name: Upload locally built snap artifact - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: local-${{ steps.snapcraft.outputs.snap }} path: ${{ steps.snapcraft.outputs.snap }} @@ -31,12 +31,16 @@ jobs: needs: build name: Functional test runs-on: [self-hosted, large, noble, x64] + strategy: + fail-fast: false + matrix: + flavor: [storage, no-storage] steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Download snap artifact id: download - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: local-${{ needs.build.outputs.snap }} - name: test @@ -48,6 +52,27 @@ jobs: sudo apt remove --purge docker.io containerd runc -y sudo rm -rf /run/containerd + roles="control,compute" + if [ "${{ matrix.flavor }}" == "storage" ]; then + roles="$roles,storage" + sudo mkdir -p /dev/disk/by-id/ || true + function loop_device() { + local free_device + local id_path="/dev/disk/by-id/$(basename $1)" + local ld_path="$1.img" + sudo dd if=/dev/zero of="$ld_path" bs=4096 count=305175 + sync + free_device=$(sudo losetup --show --find "$ld_path") + wipefs --all "$free_device" 1>&2 + sgdisk --zap-all "$free_device" 1>&2 + sudo ln -s "$free_device" "$id_path" + echo $id_path + } + sudo snap install yq + lds="$(loop_device /ld1),$(loop_device /ld2),$(loop_device /ld3)" + yq e -i ".core.config.microceph_config.\"$(hostname -f)\".osd_devices = \"$lds\"" .github/assets/testing/edge.yml + fi + # Allow lxd controller to reach to k8s controller on loadbalancer ip # sudo nft insert rule ip filter FORWARD tcp dport 17070 accept # sudo nft insert rule ip filter FORWARD tcp sport 17070 accept @@ -74,7 +99,7 @@ jobs: # have more than 32 GiB of memory where Sunbeam selects the multi mysql # mode instead. So we have to override the Sunbeam's decision to be # closer to the tutorial scenario. - sg snap_daemon "openstack.sunbeam cluster bootstrap --manifest .github/assets/testing/edge.yml --accept-defaults --topology single --database single" + sg snap_daemon "openstack.sunbeam cluster bootstrap --role "$roles" --manifest .github/assets/testing/edge.yml --accept-defaults --topology single --database single" sg snap_daemon "openstack.sunbeam cluster list" # Note: Moving configure before enabling caas just to ensure caas images are not downloaded # To download caas image, require ports to open on firewall to access fedora images. @@ -154,9 +179,9 @@ jobs: # if test -f tempest_validation.log; then cp tempest_validation.log logs/; fi - name: Upload logs if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: sunbeam_logs + name: sunbeam_logs-${{ matrix.flavor}} path: logs retention-days: 30 - name: Setup tmate session diff --git a/.github/workflows/test-golang.yml b/.github/workflows/test-golang.yml index d0b8a8965..28eaf7532 100644 --- a/.github/workflows/test-golang.yml +++ b/.github/workflows/test-golang.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup GO uses: actions/setup-go@v4 with: @@ -27,7 +27,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup GO uses: actions/setup-go@v4 with: diff --git a/.github/workflows/test-python.yml b/.github/workflows/test-python.yml index 5fd78cb6e..5414aa960 100644 --- a/.github/workflows/test-python.yml +++ b/.github/workflows/test-python.yml @@ -9,7 +9,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install dependencies run: python3 -m pip install tox - name: Run linters @@ -21,7 +21,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install dependencies run: python3 -m pip install tox - name: Run linters @@ -33,7 +33,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Install dependencies run: python -m pip install tox - name: Run tests diff --git a/.github/workflows/test-snap.yml b/.github/workflows/test-snap.yml index 644a9d13b..63de122ad 100644 --- a/.github/workflows/test-snap.yml +++ b/.github/workflows/test-snap.yml @@ -58,7 +58,7 @@ jobs: runs-on: [self-hosted, large, noble, x64] steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: test run: | export COLUMNS=256 @@ -146,7 +146,7 @@ jobs: # if test -f tempest_validation.log; then cp tempest_validation.log logs/; fi - name: Upload logs if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: sunbeam_logs path: logs