From 69fa5f7f7d8a119cb7ef8346d649c213a8b2ea85 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Sun, 15 Mar 2026 13:02:33 -0700 Subject: [PATCH] nixos/tests/ceph-single-node: add ceph rgw dashboard test coverage --- nixos/tests/ceph-single-node.nix | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/nixos/tests/ceph-single-node.nix b/nixos/tests/ceph-single-node.nix index caec05c6ad71..c7d822230fde 100644 --- a/nixos/tests/ceph-single-node.nix +++ b/nixos/tests/ceph-single-node.nix @@ -43,6 +43,7 @@ let { pkgs, ... }: { virtualisation = { + memorySize = 2048; emptyDiskImages = [ 20480 20480 @@ -92,6 +93,10 @@ let cfg.osd2.name ]; }; + rgw = { + enable = true; + daemons = [ cfg.monA.name ]; + }; }; }; @@ -196,6 +201,16 @@ let "ceph osd pool delete single-node-other-test single-node-other-test --yes-i-really-really-mean-it", ) + # Bootstrap RGW + monA.succeed( + "sudo -u ceph mkdir -p /var/lib/ceph/radosgw/ceph-${cfg.monA.name}", + "ceph auth get-or-create client.${cfg.monA.name} osd 'allow rwx' mon 'allow rw' > /var/lib/ceph/radosgw/ceph-${cfg.monA.name}/keyring", + "chown ceph:ceph /var/lib/ceph/radosgw/ceph-${cfg.monA.name}/keyring", + "systemctl start ceph-rgw-${cfg.monA.name}", + ) + monA.wait_for_unit("ceph-rgw-${cfg.monA.name}") + monA.wait_for_open_port(7480) + # Shut down ceph by stopping ceph.target. monA.succeed("systemctl stop ceph.target") @@ -206,6 +221,7 @@ let monA.wait_for_unit("ceph-osd-${cfg.osd0.name}") monA.wait_for_unit("ceph-osd-${cfg.osd1.name}") monA.wait_for_unit("ceph-osd-${cfg.osd2.name}") + monA.wait_for_unit("ceph-rgw-${cfg.monA.name}") # Ensure the cluster comes back up again monA.succeed("ceph -s | grep 'mon: 1 daemons'") @@ -229,6 +245,7 @@ let monA.succeed( "echo 'foo bar baz qux' > /tmp/dashboard_pw", "ceph dashboard ac-user-create admin -i /tmp/dashboard_pw administrator", + "ceph dashboard set-rgw-credentials", ) # Get dashboard auth token @@ -243,6 +260,12 @@ let f"curl --fail -s -H 'Accept: application/vnd.ceph.api.v1.0+json' -H 'Authorization: Bearer {token}' http://localhost:8080/api/health/minimal", )) assert health["health"]["status"] == "HEALTH_OK" + + # List daemons via REST API + rgw_daemons = json.loads(monA.succeed( + f"curl --fail -s -H 'Accept: application/vnd.ceph.api.v1.0+json' -H 'Authorization: Bearer {token}' http://localhost:8080/api/rgw/daemon", + )) + assert rgw_daemons[0]["id"] == "a" ''; in {