From 063feca48059b87b28237f85b3bd9f31f8599f76 Mon Sep 17 00:00:00 2001 From: simontesar Date: Mon, 5 Oct 2026 12:23:03 +0300 Subject: [PATCH 1/5] feat: 11: add BMCUser test --- tests/11-bmcuser/bmcuser.yaml | 11 +++ tests/11-bmcuser/chainsaw-test.yaml | 126 ++++++++++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 tests/11-bmcuser/bmcuser.yaml create mode 100644 tests/11-bmcuser/chainsaw-test.yaml diff --git a/tests/11-bmcuser/bmcuser.yaml b/tests/11-bmcuser/bmcuser.yaml new file mode 100644 index 0000000..39f01f0 --- /dev/null +++ b/tests/11-bmcuser/bmcuser.yaml @@ -0,0 +1,11 @@ +apiVersion: baseboard.metal.ironcore.dev/v1alpha1 +kind: BMCUser +metadata: + name: (join('-', ['compatibility', $namespace, 'user'])) + labels: + metal-operator-test-framework/namespace: ($namespace) +spec: + userName: ($userName) + roleID: ($roleID) + bmcRef: + name: (join('-', ['compatibility', $namespace])) diff --git a/tests/11-bmcuser/chainsaw-test.yaml b/tests/11-bmcuser/chainsaw-test.yaml new file mode 100644 index 0000000..b1e3e53 --- /dev/null +++ b/tests/11-bmcuser/chainsaw-test.yaml @@ -0,0 +1,126 @@ +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + name: 11-bmcuser +spec: + concurrent: false + bindings: + - name: userName + value: mtfuser + - name: roleID + value: ReadOnly + steps: + - name: register-bmc + try: + - apply: + file: ../shared/bmcsecret.yaml + - apply: + file: ../shared/bmc.yaml + cleanup: + - sleep: + duration: 10s + - delete: + timeout: 2m + ref: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: Server + labels: + metal-operator-test-framework/namespace: ($namespace) + - name: assert-bmc-enabled + try: + - assert: + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: BMC + metadata: + name: (join('-', ['compatibility', $namespace])) + status: + state: Enabled + - name: create-user + try: + - apply: + file: bmcuser.yaml + - assert: + resource: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCUser + metadata: + name: (join('-', ['compatibility', $namespace, 'user'])) + spec: + (bmcSecretRef.name != null): true + status: + (id != null): true + - name: assert-effective-secret + try: + - assert: + resource: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCUser + metadata: + name: (join('-', ['compatibility', $namespace, 'user'])) + (status.effectiveBMCSecretRef.name == spec.bmcSecretRef.name): true + - name: assert-generated-secret + bindings: + - name: secretName + value: (x_k8s_get($client, 'baseboard.metal.ironcore.dev/v1alpha1', 'BMCUser', '', join('-', ['compatibility', $namespace, 'user'])).spec.bmcSecretRef.name) + try: + - assert: + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: BMCSecret + metadata: + name: ($secretName) + ownerReferences: + - kind: BMCUser + name: (join('-', ['compatibility', $namespace, 'user'])) + - name: rotate-credentials + bindings: + - name: user + value: (x_k8s_get($client, 'baseboard.metal.ironcore.dev/v1alpha1', 'BMCUser', '', join('-', ['compatibility', $namespace, 'user']))) + - name: previousSecret + value: ($user.spec.bmcSecretRef.name) + - name: accountID + value: ($user.status.id) + try: + - patch: + resource: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCUser + metadata: + name: (join('-', ['compatibility', $namespace, 'user'])) + annotations: + metal.ironcore.dev/operation: rotate-credentials + - assert: + resource: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCUser + metadata: + name: (join('-', ['compatibility', $namespace, 'user'])) + (annotations."metal.ironcore.dev/operation" || 'absent'): 'absent' + spec: + (bmcSecretRef.name != $previousSecret): true + status: + id: ($accountID) + - assert: + resource: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCUser + metadata: + name: (join('-', ['compatibility', $namespace, 'user'])) + (status.effectiveBMCSecretRef.name == spec.bmcSecretRef.name): true + status: + id: ($accountID) + - name: delete-user + try: + - delete: + timeout: 2m + ref: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCUser + name: (join('-', ['compatibility', $namespace, 'user'])) + - error: + resource: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCUser + metadata: + name: (join('-', ['compatibility', $namespace, 'user'])) From 2b7156808cbc8608a82b5db9fd2108c1312f3e33 Mon Sep 17 00:00:00 2001 From: simontesar Date: Mon, 5 Oct 2026 12:23:28 +0300 Subject: [PATCH 2/5] feat: add 11 to Makefile --- Makefile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9118f59..ebd2b03 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,8 @@ TESTS := \ 07-biossettings-reboot \ 08-bmcsettings \ 09-persistent-boot-order \ - 10-bmcversion + 10-bmcversion \ + 11-bmcuser .PHONY: help help: ## Show available targets @@ -39,6 +40,7 @@ help: ## Show available targets @echo " test/08-bmcsettings (BMCSettings, Manager attribute; needs a Dell BMC)" @echo " test/09-persistent-boot-order (persistent boot order)" @echo " test/10-bmcversion (BMCVersion, version read without upgrade)" + @echo " test/11-bmcuser (BMCUser, BMC account create/rotate/delete; needs metal-maintenance-operator)" @echo "" .PHONY: require-values From 17058f559f4c79e4078748c41191af4b65129eb1 Mon Sep 17 00:00:00 2001 From: simontesar Date: Tue, 6 Oct 2026 11:15:01 +0300 Subject: [PATCH 3/5] refactor: 11: change default user --- tests/11-bmcuser/chainsaw-test.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/11-bmcuser/chainsaw-test.yaml b/tests/11-bmcuser/chainsaw-test.yaml index b1e3e53..bd9f597 100644 --- a/tests/11-bmcuser/chainsaw-test.yaml +++ b/tests/11-bmcuser/chainsaw-test.yaml @@ -6,7 +6,7 @@ spec: concurrent: false bindings: - name: userName - value: mtfuser + value: foobar - name: roleID value: ReadOnly steps: From 93a2b339f1343de8e87c4120bc0e5780d4b8be81 Mon Sep 17 00:00:00 2001 From: simontesar Date: Tue, 6 Oct 2026 11:15:33 +0300 Subject: [PATCH 4/5] feat: 11: update coverage --- coverage.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/coverage.md b/coverage.md index 2f2e143..e6d53c5 100644 --- a/coverage.md +++ b/coverage.md @@ -31,6 +31,7 @@ These rows/capabilities include the following placeholders in their `test` field | `tests/08-bmcsettings` | `BMC Registration`, `Discovery`, `bmc-settings.attr-get`, `bmc-settings.attr-pending`, `bmc-settings.set-immediate`, `bmc-settings.attr-check` | | `tests/09-persistent-boot-order` | `BMC Registration`, `Discovery`, `boot.order-get`, `boot.order-set`, `power.on`, `power.off-graceful` | | `tests/10-bmcversion` | `BMC Registration`, `Discovery`, `bmc.version` | +| `tests/11-bmcuser` | `BMC Registration`, `account.service`, `account.list`, `account.create-update`, `account.delete` | | `tests/12-force-power-off` | `BMC Registration`, `Discovery`, `power.off-graceful`, `power.off-force`, `power.wait-state` | ## Coverage by capability @@ -67,10 +68,10 @@ These rows/capabilities include the following placeholders in their `test` field | `manager.get` | `BMC Registration` | yes | | `manager.discover` | uncovered | - | | `manager.reset` | `tests/04-bmc-reset` | no | -| `account.create-update` | uncovered | - | -| `account.delete` | uncovered | - | -| `account.list` | uncovered | - | -| `account.service` | uncovered | - | +| `account.create-update` | `tests/11-bmcuser` | yes | +| `account.delete` | `tests/11-bmcuser` | yes | +| `account.list` | `tests/11-bmcuser` | yes | +| `account.service` | `tests/11-bmcuser` | yes | | `indicator.set-led` | `tests/05-indicator-led` | yes | | `events.subscribe` | uncovered | - | | `events.unsubscribe` | uncovered | - | From cfaf6bf6387b6b98c4fddf6b60ba6be419817930 Mon Sep 17 00:00:00 2001 From: simontesar Date: Tue, 6 Oct 2026 11:16:52 +0300 Subject: [PATCH 5/5] doc: correct Makefile help --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index ebd2b03..72d32e7 100644 --- a/Makefile +++ b/Makefile @@ -37,10 +37,10 @@ help: ## Show available targets @echo " test/05-indicator-led (indicator LED)" @echo " test/06-biossettings-noreboot (BIOSSettings, non-reboot setting)" @echo " test/07-biossettings-reboot (BIOSSettings, reboot-required setting)" - @echo " test/08-bmcsettings (BMCSettings, Manager attribute; needs a Dell BMC)" + @echo " test/08-bmcsettings (BMCSettings, Manager attribute)" @echo " test/09-persistent-boot-order (persistent boot order)" @echo " test/10-bmcversion (BMCVersion, version read without upgrade)" - @echo " test/11-bmcuser (BMCUser, BMC account create/rotate/delete; needs metal-maintenance-operator)" + @echo " test/11-bmcuser (BMCUser, BMC account create/rotate/delete)" @echo "" .PHONY: require-values