diff --git a/Makefile b/Makefile index b72bb19..6dac2ce 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,8 @@ TESTS := \ 06-biossettings-noreboot \ 07-biossettings-reboot \ 08-bmcsettings \ - 09-persistent-boot-order + 09-persistent-boot-order \ + 10-bmcversion .PHONY: help help: ## Show available targets @@ -37,6 +38,7 @@ help: ## Show available targets @echo " test/07-biossettings-reboot (BIOSSettings, reboot-required setting)" @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 "" .PHONY: require-values diff --git a/coverage.md b/coverage.md index ceeae60..a6ffc4d 100644 --- a/coverage.md +++ b/coverage.md @@ -30,6 +30,7 @@ These rows/capabilities include the following placeholders in their `test` field | `tests/07-biossettings-reboot` | `BMC Registration`, `Discovery`, `bios.attr-get`, `bios.attr-pending`, `bios.attr-set-on-reset`, `bios.attr-check` | | `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.reset` | +| `tests/10-bmcversion` | `BMC Registration`, `Discovery`, `bmc.version` | ## Coverage by capability @@ -52,7 +53,7 @@ These rows/capabilities include the following placeholders in their `test` field | `bios.attr-pending` | `tests/06-biossettings-noreboot`, `tests/07-biossettings-reboot` | yes | | `bios.attr-set-on-reset` | `tests/06-biossettings-noreboot`, `tests/07-biossettings-reboot` | yes | | `bios.attr-check` | `tests/06-biossettings-noreboot`, `tests/07-biossettings-reboot` | yes | -| `bmc.version` | uncovered | - | +| `bmc.version` | `tests/10-bmcversion` | yes | | `bmc-settings.attr-get` | `tests/08-bmcsettings` | yes | | `bmc-settings.attr-pending` | `tests/08-bmcsettings` | no | | `bmc-settings.set-immediate` | `tests/08-bmcsettings` | yes | diff --git a/tests/10-bmcversion/chainsaw-test.yaml b/tests/10-bmcversion/chainsaw-test.yaml new file mode 100644 index 0000000..0ecfd70 --- /dev/null +++ b/tests/10-bmcversion/chainsaw-test.yaml @@ -0,0 +1,95 @@ +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + name: 10-bmcversion +spec: + concurrent: false + bindings: + - name: bmcName + value: (join('-', ['compatibility', $namespace])) + steps: + - name: register-bmc + try: + - apply: + file: ../shared/bmcsecret.yaml + - apply: + file: ../shared/bmc.yaml + - name: assert-bmc-enabled + try: + - assert: + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: BMC + metadata: + name: ($bmcName) + status: + state: Enabled + (firmwareVersion != ''): true + - name: assert-server-available + try: + - assert: + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: Server + metadata: + name: (join('-', [$bmcName, 'system-0'])) + status: + state: Available + - name: apply-bmcversion + # Fetches the current BMC version to use as wanted version, so that + # `BMCVersion`-reconciliation does not result in an upgrade. + bindings: + - name: bmcFirmwareVersion + value: (x_k8s_get($client, 'metal.ironcore.dev/v1alpha1', 'BMC', '', $bmcName).status.firmwareVersion) + try: + - apply: + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: BMCVersion + metadata: + name: (join('-', [$bmcName, 'bmc'])) + spec: + bmcRef: + name: ($bmcName) + version: ($bmcFirmwareVersion) + image: + URI: unused-no-upgrade-expected + - assert: + timeout: 2m + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: BMCVersion + metadata: + name: (join('-', [$bmcName, 'bmc'])) + status: + state: Completed + - name: assert-no-upgrade-triggered + try: + - assert: + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: BMCVersion + metadata: + name: (join('-', [$bmcName, 'bmc'])) + spec: + (serverMaintenanceRefs || 'absent'): 'absent' + status: + (upgradeTask || 'absent'): 'absent' + (conditions || 'absent'): 'absent' + - assert: + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: Server + metadata: + name: (join('-', [$bmcName, 'system-0'])) + spec: + (serverMaintenanceRef || 'absent'): 'absent' + status: + state: Available + - assert: + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: BMC + metadata: + name: ($bmcName) + (annotations."metal.ironcore.dev/operation" || 'absent'): 'absent'