diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index fa2d0d5..d0ed108 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -44,7 +44,7 @@ jobs: chmod +x ./kind sudo mv ./kind /usr/local/bin/kind - name: Install containerlab - run: bash -c "$(curl -sL https://get.containerlab.dev)" -- -v 0.78.2 + run: bash -c "$(curl -sL https://get.containerlab.dev)" -- -v 0.81.1 - name: Install chainsaw uses: kyverno/action-install-chainsaw@v0.2.12 diff --git a/Makefile b/Makefile index 1c1aa13..5525f61 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,9 @@ TESTS := \ 10-bmcversion \ 12-force-power-off \ 11-bmcuser \ - 13-event-subscriptions + 13-event-subscriptions \ + 14-biosversion-upgrade \ + 15-bmcversion-upgrade .PHONY: help help: ## Show available targets @@ -45,6 +47,8 @@ help: ## Show available targets @echo " test/12-force-power-off (forced power off after a graceful shutdown is ignored)" @echo " test/11-bmcuser (BMCUser, BMC account create/rotate/delete)" @echo " test/13-event-subscriptions (Redfish event subscriptions via metal-maintenance-operator telemetry)" + @echo " test/14-biosversion-upgrade (BIOSVersion, BIOS firmware upgrade and downgrade)" + @echo " test/15-bmcversion-upgrade (BMCVersion, BMC firmware upgrade and downgrade)" @echo "" .PHONY: require-values diff --git a/README.md b/README.md index dbd1bb0..9c72b0c 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,16 @@ biosVersion: "1.0.0" testMessageId: "TestEventId" # a MessageId your BMC accepts in SubmitTestEvent, e.g. "SYS1000" on Dell iDRAC testSeverity: "OK" testOriginOfCondition: "/redfish/v1/Managers/1" +14-biosversion-upgrade: + transferProtocol: HTTP + baselineImageURI: "http://repo.example.com/bios-1.0.0.bin" # The URL to the current BIOS image. Will be flashed at least once during the test + version: "1.1.0" + imageURI: "http://repo.example.com/bios-1.1.0.bin" # The URL to the new BIOS version that will be flashed during the test +15-bmcversion-upgrade: + transferProtocol: HTTP + baselineImageURI: "http://repo.example.com/bmc-1.0.0.bin" # The URL to the current BMC firmware image. Will be flashed at least once during the test + version: "1.1.0" + imageURI: "http://repo.example.com/bmc-1.1.0.bin" # The URL to the new BMC firmware image ``` Adjust the credentials and expectations to your respective values and point the tests to it: diff --git a/capability-matrix.md b/capability-matrix.md index b80c7af..9578e07 100644 --- a/capability-matrix.md +++ b/capability-matrix.md @@ -76,9 +76,9 @@ Which Chainsaw tests cover each capability is tracked in the [coverage document] | Capability id | `BMC` method | Level | Redfish API | Redfish request body | |--------------------------|-----------------------------------|:--------:|-----------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------| -| `firmware.bios.upgrade` | `UpgradeBiosVersion` | OPTIONAL | `POST` `#UpdateService.SimpleUpdate` | `{"ImageURI": "", "TransferProtocol": "", "Targets": [""], "@Redfish.OperationApplyTime": "Immediate"}` | +| `firmware.bios.upgrade` | `UpgradeBiosVersion` | OPTIONAL | `POST` `#UpdateService.SimpleUpdate` | `{"ImageURI": "", "TransferProtocol": ""}` - see below | | `firmware.bios.task` | `GetBiosUpgradeTask` | OPTIONAL | `GET` task monitor / `TaskService` `Task` (`TaskState`, `TaskStatus`) | - | -| `firmware.bmc.upgrade` | `UpgradeBMCVersion` | OPTIONAL | `POST` `#UpdateService.SimpleUpdate` | `{"ImageURI": "", "TransferProtocol": "", "Targets": [""], "@Redfish.OperationApplyTime": "Immediate"}` | +| `firmware.bmc.upgrade` | `UpgradeBMCVersion` | OPTIONAL | `POST` `#UpdateService.SimpleUpdate` | `{"ImageURI": "", "TransferProtocol": ""}` - see below | | `firmware.bmc.task` | `GetBMCUpgradeTask` | OPTIONAL | `GET` task monitor / `Task` | - | | `firmware.pending-check` | `CheckBMCPendingComponentUpgrade` | OPTIONAL | `GET` `UpdateService/FirmwareInventory` | - | diff --git a/coverage.md b/coverage.md index 6c676da..0631d8e 100644 --- a/coverage.md +++ b/coverage.md @@ -34,51 +34,53 @@ These rows/capabilities include the following placeholders in their `test` field | `tests/11-bmcuser` | `BMC Registration`, `account.service`, `account.list`, `account.create-update`, `account.delete` | | `tests/12-force-power-off` | `BMC Registration`, `Discovery`, `power.on`, `power.off-graceful`, `power.off-force`, `power.wait-state`, `boot.override-pxe` | | `tests/13-event-subscriptions` | `BMC Registration`, `events.subscribe`, `events.unsubscribe`, `events.list`, `events.test-event`, `events.delivery` | +| `tests/14-biosversion-upgrade` | `BMC Registration`, `Discovery`, `bios.version`, `manager.reset`, `firmware.pending-check`, `firmware.bios.upgrade`, `firmware.bios.task` | +| `tests/15-bmcversion-upgrade` | `BMC Registration`, `Discovery`, `bmc.version`, `manager.reset`, `firmware.pending-check`, `firmware.bmc.upgrade`, `firmware.bmc.task` | ## Coverage by capability -| Capability ID | Covered by | Verified | -|------------------------------|-------------------------------------------------------------------------------|:--------:| -| `power.on` | `Discovery` | yes | -| `power.off-graceful` | `Discovery` | yes | -| `power.off-force` | `tests/12-force-power-off`, `tests/03-power-annotation` See **[0]** | yes | -| `power.reset` | `tests/03-power-annotation` | no | -| `power.wait-state` | `Discovery` | yes | -| `boot.override-pxe` | `Discovery` | yes | -| `boot.order-get` | `tests/09-persistent-boot-order` | yes | -| `boot.order-set` | `tests/09-persistent-boot-order` | yes | -| `inventory.systems` | `BMC Registration` | yes | -| `inventory.system-info` | `BMC Registration` | yes | -| `inventory.processors` | `Discovery` | yes | -| `inventory.storages` | `Discovery` | no | -| `bios.version` | `Discovery`, `tests/06-biossettings-noreboot`, `tests/07-biossettings-reboot` | yes | -| `bios.attr-get` | `tests/06-biossettings-noreboot`, `tests/07-biossettings-reboot` | yes | -| `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` | `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 | -| `bmc-settings.attr-check` | `tests/08-bmcsettings` | no | -| `firmware.bios.upgrade` | uncovered | - | -| `firmware.bios.task` | uncovered | - | -| `firmware.bmc.upgrade` | uncovered | - | -| `firmware.bmc.task` | uncovered | - | -| `firmware.pending-check` | uncovered | - | -| `manager.get` | `BMC Registration` | yes | -| `manager.discover` | uncovered | - | -| `manager.reset` | `tests/04-bmc-reset` | no | -| `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` | `tests/13-event-subscriptions` | yes | -| `events.unsubscribe` | `tests/13-event-subscriptions` | yes | -| `events.list` | `tests/13-event-subscriptions` | yes | -| `events.test-event` | `tests/13-event-subscriptions` | yes | -| `events.delivery` | `tests/13-event-subscriptions` | yes | +| Capability ID | Covered by | Verified | +|------------------------------|---------------------------------------------------------------------------------------------------------------|:--------:| +| `power.on` | `Discovery` | yes | +| `power.off-graceful` | `Discovery` | yes | +| `power.off-force` | `tests/12-force-power-off`, `tests/03-power-annotation` See **[0]** | yes | +| `power.reset` | `tests/03-power-annotation` | no | +| `power.wait-state` | `Discovery` | yes | +| `boot.override-pxe` | `Discovery` | yes | +| `boot.order-get` | `tests/09-persistent-boot-order` | yes | +| `boot.order-set` | `tests/09-persistent-boot-order` | yes | +| `inventory.systems` | `BMC Registration` | yes | +| `inventory.system-info` | `BMC Registration` | yes | +| `inventory.processors` | `Discovery` | yes | +| `inventory.storages` | `Discovery` | no | +| `bios.version` | `Discovery`, `tests/06-biossettings-noreboot`, `tests/07-biossettings-reboot`, `tests/14-biosversion-upgrade` | yes | +| `bios.attr-get` | `tests/06-biossettings-noreboot`, `tests/07-biossettings-reboot` | yes | +| `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` | `tests/10-bmcversion`, `tests/15-bmcversion-upgrade` | 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 | +| `bmc-settings.attr-check` | `tests/08-bmcsettings` | no | +| `firmware.bios.upgrade` | `tests/14-biosversion-upgrade` | yes | +| `firmware.bios.task` | `tests/14-biosversion-upgrade` | no | +| `firmware.bmc.upgrade` | `tests/15-bmcversion-upgrade` | yes | +| `firmware.bmc.task` | `tests/15-bmcversion-upgrade` | no | +| `firmware.pending-check` | `tests/14-biosversion-upgrade`, `tests/15-bmcversion-upgrade` | no | +| `manager.get` | `BMC Registration` | yes | +| `manager.discover` | uncovered | - | +| `manager.reset` | `tests/04-bmc-reset`, `tests/14-biosversion-upgrade`, `tests/15-bmcversion-upgrade` | no | +| `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` | `tests/13-event-subscriptions` | yes | +| `events.unsubscribe` | `tests/13-event-subscriptions` | yes | +| `events.list` | `tests/13-event-subscriptions` | yes | +| `events.test-event` | `tests/13-event-subscriptions` | yes | +| `events.delivery` | `tests/13-event-subscriptions` | yes | #### Footnotes **[0]**: The test is using the `Reset`-method of the `BMC` interface, but the result is the same capability being tested as using the `ForcePowerOff`-method. diff --git a/tests/14-biosversion-upgrade/biosversion.yaml b/tests/14-biosversion-upgrade/biosversion.yaml new file mode 100644 index 0000000..4d5524e --- /dev/null +++ b/tests/14-biosversion-upgrade/biosversion.yaml @@ -0,0 +1,18 @@ +apiVersion: system.metal.ironcore.dev/v1alpha1 +kind: BIOSVersion +metadata: + name: (join('-', [$bmcName, $role])) + annotations: + # Set so chainsaw can delete the resoruce when a ServerMaintenance is still + # active, after a potential failed upgrade. + metal.ironcore.dev/operation: allow-in-progress-delete +spec: + serverRef: + name: ($serverName) + version: ($version) + image: + URI: ($imageURI) + transferProtocol: ($values."14-biosversion-upgrade".transferProtocol) + serverMaintenancePolicy: Enforced + retryPolicy: + maxAttempts: 0 diff --git a/tests/14-biosversion-upgrade/chainsaw-test.yaml b/tests/14-biosversion-upgrade/chainsaw-test.yaml new file mode 100644 index 0000000..5729a3d --- /dev/null +++ b/tests/14-biosversion-upgrade/chainsaw-test.yaml @@ -0,0 +1,233 @@ +# The test runs through three BIOSVersion resources: +# 1. Ensuring the baseline version as configured in biosVersion is installed. `14-biosversion-upgrade.baselineImageURI` must provide this version. +# 2. Installing 14-biosversion-upgrade.version +# 3. Restoring the baseline version +# This is necessary so that the server is kept in a clean state but also potentially deals with an earlier, interrupted test. +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + name: 14-biosversion-upgrade +spec: + concurrent: false + bindings: + - name: bmcName + value: (join('-', ['compatibility', $namespace])) + - name: serverName + value: (join('-', [$bmcName, 'system-0'])) + 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: ($bmcName) + status: + state: Enabled + - name: assert-server-available + try: + - assert: + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: Server + metadata: + name: ($serverName) + status: + state: Available + # Ensure the version expected as baseline, potentially a no-op. + - name: prepare-baseline + try: + - apply: + bindings: + - name: role + value: baseline + - name: version + value: ($values.biosVersion) + - name: imageURI + value: ($values."14-biosversion-upgrade".baselineImageURI) + file: biosversion.yaml + # Fail fast on Failed instead of waiting for the assert timeout + - assert: + timeout: 20m + resource: + apiVersion: system.metal.ironcore.dev/v1alpha1 + kind: BIOSVersion + metadata: + name: (join('-', [$bmcName, 'baseline'])) + status: + (state == 'Completed' || state == 'Failed'): true + - assert: + timeout: 5s + resource: + apiVersion: system.metal.ironcore.dev/v1alpha1 + kind: BIOSVersion + metadata: + name: (join('-', [$bmcName, 'baseline'])) + status: + state: Completed + - assert: + timeout: 15m + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: Server + metadata: + name: ($serverName) + (annotations."metal.ironcore.dev/operation" == null): true + status: + state: Available + biosVersion: ($values.biosVersion) + - delete: + timeout: 2m + ref: + apiVersion: system.metal.ironcore.dev/v1alpha1 + kind: BIOSVersion + name: (join('-', [$bmcName, 'baseline'])) + catch: + - describe: + apiVersion: system.metal.ironcore.dev/v1alpha1 + kind: BIOSVersion + - podLogs: + namespace: metal-maintenance-operator-system + selector: control-plane=controller-manager + tail: 200 + - name: upgrade + try: + - apply: + bindings: + - name: role + value: upgrade + - name: version + value: ($values."14-biosversion-upgrade".version) + - name: imageURI + value: ($values."14-biosversion-upgrade".imageURI) + file: biosversion.yaml + - assert: + timeout: 20m + resource: + apiVersion: system.metal.ironcore.dev/v1alpha1 + kind: BIOSVersion + metadata: + name: (join('-', [$bmcName, 'upgrade'])) + status: + (state == 'Completed' || state == 'Failed'): true + - assert: + timeout: 5s + resource: + apiVersion: system.metal.ironcore.dev/v1alpha1 + kind: BIOSVersion + metadata: + name: (join('-', [$bmcName, 'upgrade'])) + status: + state: Completed + (conditions[?type == 'VersionUpgradeIssued'] | [0].status): "True" + (conditions[?type == 'VersionUpgradeCompleted'] | [0].status): "True" + (conditions[?type == 'VersionUpgradeCompleted'] | [0].reason): UpgradeTaskCompleted + (conditions[?type == 'VersionUpgradeRebootIssued'] | [0].status): "True" + (conditions[?type == 'VersionUpgradePowerOn'] | [0].status): "True" + (conditions[?type == 'VersionUpgradeVerification'] | [0].status): "True" + upgradeTask: + (URI != ''): true + catch: + - describe: + apiVersion: system.metal.ironcore.dev/v1alpha1 + kind: BIOSVersion + - describe: + apiVersion: maintenance.metal.ironcore.dev/v1alpha1 + kind: ServerMaintenance + namespace: metal-maintenance-operator-system + - podLogs: + namespace: metal-maintenance-operator-system + selector: control-plane=controller-manager + tail: 200 + - name: assert-upgraded + try: + - assert: + timeout: 15m + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: Server + metadata: + name: ($serverName) + (annotations."metal.ironcore.dev/operation" == null): true + status: + state: Available + biosVersion: ($values."14-biosversion-upgrade".version) + - name: restore-baseline + try: + - delete: + timeout: 2m + ref: + apiVersion: system.metal.ironcore.dev/v1alpha1 + kind: BIOSVersion + name: (join('-', [$bmcName, 'upgrade'])) + - apply: + bindings: + - name: role + value: baseline + - name: version + value: ($values.biosVersion) + - name: imageURI + value: ($values."14-biosversion-upgrade".baselineImageURI) + file: biosversion.yaml + - assert: + timeout: 20m + resource: + apiVersion: system.metal.ironcore.dev/v1alpha1 + kind: BIOSVersion + metadata: + name: (join('-', [$bmcName, 'baseline'])) + status: + (state == 'Completed' || state == 'Failed'): true + - assert: + timeout: 5s + resource: + apiVersion: system.metal.ironcore.dev/v1alpha1 + kind: BIOSVersion + metadata: + name: (join('-', [$bmcName, 'baseline'])) + status: + state: Completed + (conditions[?type == 'VersionUpgradeIssued'] | [0].status): "True" + (conditions[?type == 'VersionUpgradeVerification'] | [0].status): "True" + - assert: + timeout: 15m + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: Server + metadata: + name: ($serverName) + (annotations."metal.ironcore.dev/operation" == null): true + status: + state: Available + biosVersion: ($values.biosVersion) + - delete: + timeout: 2m + ref: + apiVersion: system.metal.ironcore.dev/v1alpha1 + kind: BIOSVersion + name: (join('-', [$bmcName, 'baseline'])) + catch: + - describe: + apiVersion: system.metal.ironcore.dev/v1alpha1 + kind: BIOSVersion + - podLogs: + namespace: metal-maintenance-operator-system + selector: control-plane=controller-manager + tail: 200 diff --git a/tests/15-bmcversion-upgrade/bmcversion.yaml b/tests/15-bmcversion-upgrade/bmcversion.yaml new file mode 100644 index 0000000..2e16fc7 --- /dev/null +++ b/tests/15-bmcversion-upgrade/bmcversion.yaml @@ -0,0 +1,18 @@ +apiVersion: baseboard.metal.ironcore.dev/v1alpha1 +kind: BMCVersion +metadata: + name: (join('-', [$bmcName, $role])) + annotations: + # Set so chainsaw can delete the resoruce when a ServerMaintenance is still + # active, after a potential failed upgrade. + metal.ironcore.dev/operation: allow-in-progress-delete +spec: + bmcRef: + name: ($bmcName) + version: ($version) + image: + URI: ($imageURI) + transferProtocol: ($values."15-bmcversion-upgrade".transferProtocol) + serverMaintenancePolicy: Enforced + retryPolicy: + maxAttempts: 0 diff --git a/tests/15-bmcversion-upgrade/chainsaw-test.yaml b/tests/15-bmcversion-upgrade/chainsaw-test.yaml new file mode 100644 index 0000000..79a2c83 --- /dev/null +++ b/tests/15-bmcversion-upgrade/chainsaw-test.yaml @@ -0,0 +1,258 @@ +# The test runs through three BMCVersion resources: +# 1. Ensuring the baseline version as configured in bmcVersion is installed. `15-bmcversion-upgrade.baselineImageURI` must provide this version. +# 2. Installing 15-bmcversion-upgrade.version +# 3. Restoring the baseline version +# This is necessary so that the server is kept in a clean state but also potentially deals with an earlier, interrupted test. +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + name: 15-bmcversion-upgrade +spec: + concurrent: false + bindings: + - name: bmcName + value: (join('-', ['compatibility', $namespace])) + - name: serverName + value: (join('-', [$bmcName, 'system-0'])) + 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: ($bmcName) + status: + state: Enabled + - name: assert-server-available + try: + - assert: + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: Server + metadata: + name: ($serverName) + status: + state: Available + # Ensure the version expected as baseline, potentially a no-op. + - name: prepare-baseline + try: + - apply: + bindings: + - name: role + value: baseline + - name: version + value: ($values.firmwareVersion) + - name: imageURI + value: ($values."15-bmcversion-upgrade".baselineImageURI) + file: bmcversion.yaml + # Fail fast on Failed instead of waiting for the assert timeout + - assert: + timeout: 20m + resource: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCVersion + metadata: + name: (join('-', [$bmcName, 'baseline'])) + status: + (state == 'Completed' || state == 'Failed'): true + - assert: + timeout: 5s + resource: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCVersion + metadata: + name: (join('-', [$bmcName, 'baseline'])) + status: + state: Completed + - assert: + timeout: 5m + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: BMC + metadata: + name: ($bmcName) + status: + state: Enabled + firmwareVersion: ($values.firmwareVersion) + - assert: + timeout: 15m + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: Server + metadata: + name: ($serverName) + (annotations."metal.ironcore.dev/operation" == null): true + status: + state: Available + - delete: + timeout: 2m + ref: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCVersion + name: (join('-', [$bmcName, 'baseline'])) + catch: + - describe: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCVersion + - podLogs: + namespace: metal-maintenance-operator-system + selector: control-plane=controller-manager + tail: 200 + - name: upgrade + try: + - apply: + bindings: + - name: role + value: upgrade + - name: version + value: ($values."15-bmcversion-upgrade".version) + - name: imageURI + value: ($values."15-bmcversion-upgrade".imageURI) + file: bmcversion.yaml + - assert: + timeout: 20m + resource: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCVersion + metadata: + name: (join('-', [$bmcName, 'upgrade'])) + status: + (state == 'Completed' || state == 'Failed'): true + - assert: + timeout: 5s + resource: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCVersion + metadata: + name: (join('-', [$bmcName, 'upgrade'])) + status: + state: Completed + (conditions[?type == 'ResetIssued'] | [0].status): "True" + (conditions[?type == 'VersionUpgradeIssued'] | [0].status): "True" + (conditions[?type == 'VersionUpgradeCompleted'] | [0].status): "True" + (conditions[?type == 'VersionUpgradeCompleted'] | [0].reason): UpgradeTaskCompleted + (conditions[?type == 'VersionUpgradeReboot'] | [0].status): "True" + (conditions[?type == 'VersionUpgradeVerification'] | [0].status): "True" + catch: + - describe: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCVersion + - describe: + apiVersion: maintenance.metal.ironcore.dev/v1alpha1 + kind: ServerMaintenance + namespace: metal-maintenance-operator-system + - podLogs: + namespace: metal-maintenance-operator-system + selector: control-plane=controller-manager + tail: 200 + - name: assert-upgraded + try: + - assert: + timeout: 5m + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: BMC + metadata: + name: ($bmcName) + status: + state: Enabled + firmwareVersion: ($values."15-bmcversion-upgrade".version) + - assert: + timeout: 15m + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: Server + metadata: + name: ($serverName) + (annotations."metal.ironcore.dev/operation" == null): true + status: + state: Available + - name: restore-baseline + try: + - delete: + timeout: 2m + ref: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCVersion + name: (join('-', [$bmcName, 'upgrade'])) + - apply: + bindings: + - name: role + value: baseline + - name: version + value: ($values.firmwareVersion) + - name: imageURI + value: ($values."15-bmcversion-upgrade".baselineImageURI) + file: bmcversion.yaml + - assert: + timeout: 20m + resource: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCVersion + metadata: + name: (join('-', [$bmcName, 'baseline'])) + status: + (state == 'Completed' || state == 'Failed'): true + - assert: + timeout: 5s + resource: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCVersion + metadata: + name: (join('-', [$bmcName, 'baseline'])) + status: + state: Completed + (conditions[?type == 'VersionUpgradeIssued'] | [0].status): "True" + (conditions[?type == 'VersionUpgradeVerification'] | [0].status): "True" + - assert: + timeout: 5m + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: BMC + metadata: + name: ($bmcName) + status: + state: Enabled + firmwareVersion: ($values.firmwareVersion) + - assert: + timeout: 15m + resource: + apiVersion: metal.ironcore.dev/v1alpha1 + kind: Server + metadata: + name: ($serverName) + (annotations."metal.ironcore.dev/operation" == null): true + status: + state: Available + - delete: + timeout: 2m + ref: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCVersion + name: (join('-', [$bmcName, 'baseline'])) + catch: + - describe: + apiVersion: baseboard.metal.ironcore.dev/v1alpha1 + kind: BMCVersion + - podLogs: + namespace: metal-maintenance-operator-system + selector: control-plane=controller-manager + tail: 200