- Day-2 Cluster Configuration Changes
- Overview
- Use Cases
- Updates to the clusterInstanceParameters field under ProvisioningRequest spec.templateParameters
- Updates to the ClusterInstance defaults ConfigMap
- Updates to an existing ACM PolicyGenerator manifest
- Adding a new manifest to an existing ACM PolicyGenerator
- Updating the ClusterTemplate schemas
- Switching to a new hardware profile
This guide provides instructions for Day‑2 configuration change use cases, to be applied after cluster provisioning. For guidance on provisioning a cluster, refer to Cluster Provisioning and Configuration.
Day 2 configuration changes are supported for both hardware configuration updates and policy parameter changes. The system supports retry scenarios even after previous configuration attempts have timed out or failed.
When a configuration operation times out or fails, the system supports retry through spec changes.
- Configuration timeouts/failures: Can be retried by updating the ProvisioningRequest spec
- Provisioning timeouts/failures: Cannot be retried; the ProvisioningRequest must be deleted and recreated
- Retry mechanism: Uses
ConfigTransactionId(set to ProvisioningRequest generation) to track configuration changes. When the ProvisioningRequest spec changes, the generation increments, creating a newConfigTransactionId. The system compares this withObservedConfigTransactionIdto detect spec changes and trigger new configuration attempts. - Terminal state override: The system allows clearing terminal states (timeout/failed) when the ProvisioningRequest is in pending state due to spec changes, except for hardware provisioning timeouts/failures which require deleting and recreating the ProvisioningRequest.
To troubleshoot:
-
Check configuration status:
oc get provisioningrequest <UUID> -o yamlLook for
HardwareConfiguredcondition withreason: TimedOut -
Check hardware manager logs:
oc logs -n oran-o2ims -l app=hardwaremanager-server -f -
Retry configuration:
- Update the ProvisioningRequest spec to trigger a new configuration attempt
- The system will clear the terminal state and start a new configuration
- Before retrying, check BareMetalHost (BMH) state:
- If BMH is in
servicingstate, wait for it to complete first before retrying - If BMH is in
servicing errorstate, retry might not work, especially for consistent power management errors - Use
oc get bmh -n <namespace>to check BMH status
- If BMH is in
A ProvisioningRequest can be edited to update:
- the cluster labels and annotations
apiVersion: clcm.openshift.io/v1alpha1
kind: ProvisioningRequest
metadata:
finalizers:
- provisioningrequest.clcm.openshift.io/finalizer
name: 123e4567-e89b-12d3-a456-426614174000
spec:
description: Provisioning request for basic SNO with sample ACM policies
name: Dev-main-SNO-Provisioning-sno-ran-du-1
templateName: sno-ran-du
templateVersion: v1
templateParameters:
clusterInstanceParameters:
clusterName: sno-ran-du-1
extraAnnotations:
ManagedCluster:
test: test <<< added as a Day 2 change
extraLabels:
ManagedCluster:
sno-ran-du-policy: v1
test: test <<< added as a Day 2 change- the node labels and annotations
apiVersion: clcm.openshift.io/v1alpha1
kind: ProvisioningRequest
metadata:
finalizers:
- provisioningrequest.clcm.openshift.io/finalizer
name: 123e4567-e89b-12d3-a456-426614174000
spec:
description: Provisioning request for basic SNO with sample ACM policies
name: Dev-main-SNO-Provisioning-sno-ran-du-1
templateName: sno-ran-du
templateVersion: v1
templateParameters:
clusterInstanceParameters:
clusterName: sno-ran-du-1
nodes:
- bmcCredentialsName:
name: sno-ran-du-1-bmc-secret
extraAnnotations:
BareMetalHost:
test: test <<< added as a Day 2 change
extraLabels:
BareMetalHost:
test: test <<< added as a Day 2 changeThe status.conditions records the success/failure of the update.
The cluster configuration goes to the ManagedCluster CR and the nodes configuration to the corresponding BMHs, as expected.
Note: ManagedCluster and node extra labels&annotations are the only fields that can be edited post installation. All the other fields are immutable and are rejected by the O-Cloud Manager.
These changes would be rejected anyway by webhooks put in place by other operators for cluster installation resources (ex: ClusterDeployment)
These types of changes can be made under the ProvisioningRequest spec.templateParameters by updating the policyTemplateParameters entry, if it's present.
apiVersion: clcm.openshift.io/v1alpha1
kind: ProvisioningRequest
metadata:
finalizers:
- provisioningrequest.clcm.openshift.io/finalizer
name: 123e4567-e89b-12d3-a456-426614174000
spec:
description: Provisioning request for basic SNO with sample ACM policies
name: Dev-main-SNO-Provisioning-sno-ran-du-1
templateName: sno-ran-du
templateVersion: v1
templateParameters:
nodeClusterName: sno-ran-du-1
oCloudSiteId: local-west-12345
policyTemplateParameters:
sriov-network-vlan-1: "111"
sriov-network-pfNames-1: '["ens2f0"]'Note: Only policy configuration values exposed in the policyTemplateParameters property within the spec.templateParameterSchema field of the associated ClusterTemplate can be updated through the ProvisioningRequest.
Once the update is made, the <cluster-name>-pg ConfigMap in the ztp-<cluster-template-namespace> namespace gets updated with the new value. This ConfigMap is used by the ACM policies in their hub templates.
$ oc get clustertemplate -A
NAMESPACE NAME AGE
sno-ran-du-v4-Y-Z sno-ran-du.v4-Y-Z-1 3d23h
$ oc get cm -n ztp-sno-ran-du-v4-Y-Z <cluster name>-pg -oyaml
apiVersion: v1
data:
cpu-isolated: 0-1,64-65
cpu-reserved: 2-10
hugepages-count: "32"
hugepages-default: 1G
hugepages-size: 1G
install-plan-approval: Automatic
sriov-network-vlan-1: "111"
sriov-network-pfNames-1: '["ens2f0"]'
kind: ConfigMap
metadata:
name: sno-ran-du-1-pg
namespace: ztp-sno-ran-du-v4-Y-ZOnce a policy matched with a ManagedCluster deployed through a ProvisioningRequest becomes NonCompliant, it's reflected in the ProvisioningRequest status.extensions.policies and the time when it becomes NonCompliant
is also recorded. The ConfigurationApplied condition reflects that the configuration is being applied.
status:
extensions:
clusterDetails:
clusterProvisionStartedAt: "2024-10-07T17:59:23Z"
name: sno-ran-du-1
nonCompliantAt: "2024-10-07T21:53:29Z" <<< non compliance timestamp recorded here
ztpStatus: ZTP Done
policies:
- compliant: Compliant
policyName: v1-perf-configuration-policy
policyNamespace: ztp-sno-ran-du-v4-Y-Z
remediationAction: enforce
- compliant: NonCompliant <<< Policy is NonCompliant
policyName: v1-sriov-configuration-policy
policyNamespace: ztp-sno-ran-du-v4-Y-Z
remediationAction: enforce
- compliant: Compliant
policyName: v1-subscriptions-policy
policyNamespace: ztp-sno-ran-du-v4-Y-Z
remediationAction: enforce
conditions:
- lastTransitionTime: "2024-10-07T21:53:29Z"
message: The configuration is still being applied
reason: InProgress
status: "False"
type: ConfigurationAppliedNotes:
- The format of the
nonCompliantAttimestamps might move to another structure in the status, but it will still be recorded. - Some changes happen so fast that the Policy doesn't even switch to
NonCompliant, so the O-Cloud Manager cannot record the event. In this case, the O-Cloud Manager still holds a correct recording since all the policies are/remain Compliant. - Once an enforce
NonCompliantPolicy becomesCompliantagain, thestatus.extensions.policiesis updated, thestatus.extensions.clusterDetails.nonCompliantAtvalue removed and theConfigurationAppliedcondition updated to show that the configuration is up to date: - When refactored, the start and end times of the configuration being NonCompliant will be recorded.
Once all the policies become Compliant, the status is updated as follows:
status:
extensions:
clusterDetails:
clusterProvisionStartedAt: "2024-10-07T17:59:23Z"
name: sno-ran-du-1
ztpStatus: ZTP Done
>>> no nonCompliantAt <<<
policies:
- compliant: Compliant
policyName: v1-perf-configuration-policy
policyNamespace: ztp-sno-ran-du-v4-Y-Z
remediationAction: enforce
- compliant: Compliant
policyName: v1-sriov-configuration-policy
policyNamespace: ztp-sno-ran-du-v4-Y-Z
remediationAction: enforce
- compliant: Compliant
policyName: v1-subscriptions-policy
policyNamespace: ztp-sno-ran-du-v4-Y-Z
remediationAction: enforce
conditions:
- lastTransitionTime: "2024-10-07T22:15:32Z"
message: The configuration is up to date
reason: Completed
status: "True"
type: ConfigurationAppliedWe assume a ManagedCluster has been installed through a ProvisioningRequest referencing the sno-ran-du.v4-Y-Z-1 ClusterTemplate CR.
In this example we are adding a new annotation to the ManagedCluster through the clusterinstance-defaults-v1 ConfigMap holding default values for the corresponding ClusterInstance.
The following steps need to be taken:
- Upversion the cluster template:
- Create a new version of the clusterinstance-defaults-v1
ConfigMap- clusterinstance-defaults-v2:- Update the name to
clusterinstance-defaults-v2(the namespace stayssno-ran-du-v4-Y-Z). - Update
data.clusterinstance-defaults.extraAnnotationswith the desired new annotation.
- Update the name to
- Create a new version of the sno-ran-du.v4-Y-Z-1
ClusterTemplateCR - sno-ran-du.v4-Y-Z-2- Update the
metadata.namefromsno-ran-du.v4-Y-Z-1tosno-ran-du.v4-Y-Z-2 - Update
spec.versionfromv4-Y-Z-1tov4-Y-Z-2 - Update
spec.templateDefaults.clusterInstanceDefaultstoclusterinstance-defaults-v2
- Update the
- Create a new version of the clusterinstance-defaults-v1
- ArgoCD sync to the hub cluster:
- Add the newly created files to their corresponding kustomization.yaml.
- All the resources from above are created on the hub cluster.
- The SMO selects the new
ClusterTemplateCR for theProvisioningRequest:spec.templateNameremainssno-ran-du,spec.templateVersionis updated fromv4-Y-Z-1tov4-Y-Z-2
- The O-Cloud Manager detects the change:
- It updates the
ClusterInstancewith the new annotation.
- It updates the
- The siteconfig operator detects the change to the
ClusterInstanceCR:- The new annotation is added to the
ManagedCluster. - Any issues are reported in the
ProvisioningRequest, understatus.conditions. - Note: Some installation manifests cannot be updated after provisioning as the underlying operators have webhooks to prevent such updates.
- The new annotation is added to the
For updating a manifest in an existing ACM PolicyGenerator, the following steps need to be taken (we'll take sno-ran-du-pg-v4-Y-Z-v1 as an example):
-
Upversion the cluster template content:
- Create a new version of the ACM PG - sno-ran-du-pg-v4-Y-Z-v2:
- The name is updated to
sno-ran-du-pg-v4-Y-Z-v2(theztp-sno-ran-du-v4-Y-Znamespace is kept). policyDefaults.placement.labelSelector.sno-ran-du-policyis updated fromv1tov2such that the policy binding is updated.- The annotation
clustertemplates.clcm.openshift.io/templatesunderpolicyAnnotationsis updated tosno-ran-du.v4-Y-Z-3, which is the name of new ClusterTemplate that will be created in the following step. - All policy names are updated from
v1tov2(example:v1-subscriptions-policy->v2-subscriptions-policy). - The desired manifest section is updated. The current sno-ran-du-pg-v4-Y-Z-v2 sample adds a
sysctlsection to theTunedPerformancePatchsection under thev2-tuned-configuration-policypolicy.
- The name is updated to
- Create a new version of the clusterinstance-defaults-v2
ConfigMap- clusterinstance-defaults-v3:- Update the name to
clusterinstance-defaults-v3(the namespace stayssno-ran-du-v4-Y-Z). - Update the
sno-ran-du-policyManagedClusterextraLabelfromv1tov2.
- Update the name to
- Create a new version of the sno-ran-du.v4-Y-Z-2
ClusterTemplateCR - sno-ran-du.v4-Y-Z-3- Update the
metadata.namefromsno-ran-du.v4-Y-Z-2tosno-ran-du.v4-Y-Z-3. - Update
spec.versionfromv4-Y-Z-2tov4-Y-Z-3. - Update
spec.templateDefaults.clusterInstanceDefaultstoclusterinstance-defaults-v3.
- Update the
- Create a new version of the ACM PG - sno-ran-du-pg-v4-Y-Z-v2:
-
ArgoCD sync to the hub cluster:
- Add the newly created files to their corresponding kustomization.yaml.
- All the resources created from above are created on the hub cluster, including the
v2policies and the new ClusterTemplate is validated. - The new policies are not yet applied to the cluster because the
ManagedClusterstill has the oldsno-ran-du-policy: "v1"label.
-
The SMO selects the new ClusterTemplate CR for the ProvisioningRequest:
spec.templateNameremainssno-ran-du,spec.templateVersionis updated fromv4-Y-Z-2tov4-Y-Z-3
-
The O-Cloud Manager detects the change:
- It updates the ClusterInstance with the new
sno-ran-du-policy: "v2"ManagedCluster label. - The siteconfig operator applies the new label to the ManagedCluster.
- It updates the ClusterInstance with the new
-
The ACM Policy Propagator detects the new binding:
- The old policies created through the sno-ran-du-pg-v4-Y-Z-v1 Policy Generator are no longer matched to the ManagedCluster.
- The new policies created through the sno-ran-du-pg-v4-Y-Z-v2 Policy Generator are matched to the ManagedCluster.
- The
ConfigurationAppliedcondition is updated in the ProvisioningRequest to show that the configuration has changed and is being applied (the policies depend on each other, so some are in aPendingstate until ACM confirms their compliance):
status: extensions: ... policies: - compliant: Pending policyName: v2-perf-configuration-policy policyNamespace: ztp-sno-ran-du-v4-Y-Z remediationAction: enforce - compliant: Pending policyName: v2-sriov-configuration-policy policyNamespace: ztp-sno-ran-du-v4-Y-Z remediationAction: enforce - compliant: Compliant policyName: v2-subscriptions-policy policyNamespace: ztp-sno-ran-du-v4-Y-Z remediationAction: enforce - compliant: Pending policyName: v2-tuned-configuration-policy policyNamespace: ztp-sno-ran-du-v4-Y-Z remediationAction: enforce conditions: ... - lastTransitionTime: "2024-10-11T19:48:06Z" message: The configuration is still being applied reason: InProgress status: "False" type: ConfigurationApplied
- The affected CRs are updated on the ManagedCluster, not deleted and recreated.
-
The O-Cloud Manager updates the ProvisioningRequest once all the policies are
Compliantstatus: extensions: ... policies: - compliant: Compliant policyName: v2-tuned-configuration-policy policyNamespace: ztp-sno-ran-du-v4-Y-Z remediationAction: enforce - compliant: Compliant policyName: v2-perf-configuration-policy policyNamespace: ztp-sno-ran-du-v4-Y-Z remediationAction: enforce - compliant: Compliant policyName: v2-sriov-configuration-policy policyNamespace: ztp-sno-ran-du-v4-Y-Z remediationAction: enforce - compliant: Compliant policyName: v2-subscriptions-policy policyNamespace: ztp-sno-ran-du-v4-Y-Z remediationAction: enforce conditions: ... - lastTransitionTime: "2024-10-11T19:48:36Z" message: The configuration is up to date reason: Completed status: "True" type: ConfigurationApplied
This usecase is identical to the previous one, with the following distinctions:
- If the new manifest does not have a corresponding
source-crfile, the CSP should add a new yaml file to thecustom-crsdirectory.
Directory structure example:
policytemplates
|
└──version_4.Y.Z
| | sno-ran-du
| | source-crs
| | custom-crs
| | kustomization.yaml
|
└─── kustomization.yaml- Depending on the dependencies, the new policy can be added to an existing policy as a new manifest or as a new policy.
Adding manifests to an existing policy - adding the LCA operator:
policies:
- name: v1-subscriptions-policy
manifests:
- path: source-crs/DefaultCatsrc.yaml
patches:
- metadata:
name: redhat-operators
spec:
displayName: redhat-operators
image: registry.redhat.io/redhat/redhat-operator-index:v4.16
# Everything below would be added for installing the LCA operator:
- path: source-crs/LcaSubscriptionNS.yaml
- path: source-crs/LcaSubscriptionOperGroup.yaml
- path: source-crs/LcaSubscription.yaml
patches:
- spec:
source: redhat-operators
installPlanApproval:
'{{hub $configMap:=(lookup "v1" "ConfigMap" "" (printf "%s-pg" .ManagedClusterName)) hub}}{{hub dig "data" "install-plan-approval" "Manual" $configMap hub}}'
- path: source-crs/LcaSubscriptionOperGroup.yamlAdding manifests to a new policy - adding the LCA operator:
policies:
# Everything below would be added for installing the LCA operator:
- name: v1-lca-operator-policy
manifests:
- path: source-crs/LcaSubscriptionNS.yaml
- path: source-crs/LcaSubscriptionOperGroup.yaml
- path: source-crs/LcaSubscription.yaml
patches:
- spec:
source: redhat-operators
installPlanApproval:
'{{hub $configMap:=(lookup "v1" "ConfigMap" "" (printf "%s-pg" .ManagedClusterName)) hub}}{{hub dig "data" "install-plan-approval" "Manual" $configMap hub}}'
- path: source-crs/LcaSubscriptionOperGroup.yamlWe assume a ManagedCluster has been installed through a ProvisioningRequest referencing the sno-ran-du.v4-Y-Z-3 ClusterTemplate CR.
In this example we are updating the policy template schema - spec.templateParameterSchema.policyTemplateParameters. This update means that the ACM PG requires extra configuration values.
We assume we are starting from the sno-ran-du-pg-v4-Y-Z-v2 ACM PG, but want to add configuration for one more SRIOV network, so 2 extra manifests (SriovNetwork and SriovNetworkNodePolicy) are needed.
The following steps need to be taken:
- Upversion the cluster template content:
-
A new ACM PG is created - sno-ran-du-pg-v4-Y-Z-v3:
metadata.nameis updated fromsno-ran-du-pg-v4-Y-Z-v2tosno-ran-du-pg-v4-Y-Z-v3(theztp-sno-ran-du-v4-Y-Znamespace is kept).policyDefaults.placement.labelSelector.sno-ran-du-policyis updated fromv2tov3such that the policy binding is updated.- The annotation
clustertemplates.clcm.openshift.io/templatesunderpolicyAnnotationsis updated tosno-ran-du.v4-Y-Z-4, which is the name of new ClusterTemplate that will be created in the following step. - All policy names are updated from
v2tov3(example:v2-subscriptions-policy->v3-subscriptions-policy). - The following manifests are added under the
v3-subscriptions-policy:
- path: source-crs/SriovNetwork.yaml patches: - metadata: name: sriov-nw-du-mh spec: resourceName: du_mh vlan: '{{hub fromConfigMap "" (printf "%s-pg" .ManagedClusterName) "sriov-network-vlan-2" | toInt hub}}' - path: source-crs/SriovNetworkNodePolicy-SetSelector.yaml patches: - metadata: name: sriov-nnp-du-mh spec: deviceType: vfio-pci isRdma: false nicSelector: pfNames: '{{hub fromConfigMap "" (printf "%s-pg" .ManagedClusterName) "sriov-network-pfNames-2" | toLiteral hub}}' nodeSelector: node-role.kubernetes.io/master: "" numVfs: 8 priority: 10 resourceName: du_mh
-
A new version of the policytemplate-defaults-v1 ConfigMap is created - policytemplate-defaults-v2:
metadata.nameis updated frompolicytemplate-defaults-v1topolicytemplate-defaults-v2.- update the defaults to reflect the new schema and thus the needed configuration values, in our case:
sriov-network-vlan-2andsriov-network-pfNames-2.
-
Create a new version of the clusterinstance-defaults-v3
ConfigMap- clusterinstance-defaults-v4:- Update the name to
clusterinstance-defaults-v4(the namespace stayssno-ran-du-v4-Y-Z). - Update the
sno-ran-du-policyManagedClusterextraLabelfromv2tov3.
- Update the name to
-
Create a new version of the sno-ran-du.v4-Y-Z-3
ClusterTemplateCR - sno-ran-du.v4-Y-Z-4- Update the
metadata.namefromsno-ran-du.v4-Y-Z-3tosno-ran-du.v4-Y-Z-4. - Update
spec.versionfromv4-Y-Z-3tov4-Y-Z-4. - Update
spec.templateDefaults.clusterInstanceDefaultstoclusterinstance-defaults-v4. - Update
spec.templateDefaults.policyTemplateDefaultstopolicytemplate-defaults-v2. - Update
spec.templateParameterSchema.properties.policyTemplateParametersto include the newly desired configuration options:
... sriov-network-vlan-2: type: string sriov-network-pfNames-2: type: string ...
- Update the
-
The remaining steps are similar to those from the Updates to an existing ACM PolicyGenerator manifest section, starting with step 2.
The only distinction is that for the current usecase, the <cluster-name>-pg ConfigMap in the ztp-<cluster-template-namespace> will be updated by the O-Cloud Manager to include the new values (sriov-network-vlan-2 and sriov-network-pfNames-2):
$ oc get cm -n ztp-sno-ran-du-v4-Y-Z <cluster name>-pg -oyaml
apiVersion: v1
data:
cpu-isolated: 0-1,64-65
cpu-reserved: 2-10
hugepages-count: "32"
hugepages-default: 1G
hugepages-size: 1G
install-plan-approval: Automatic
sriov-network-pfNames-1: '["ens2f0"]'
sriov-network-pfNames-2: '["ens2f1"]'
sriov-network-vlan-1: "111"
sriov-network-vlan-2: "222"
kind: ConfigMap
metadata:
name: sno-ran-du-1-pg
namespace: ztp-sno-ran-du-v4-Y-ZNote: The steps are similar for updating the spec.templateParameterSchema.properties.clusterInstanceParameters. Any change to the clusterInstanceParameters must match the ClusterInstance CR of the siteconfig operator.
For a detailed explanation of how firmware updates are processed, including the CR relationship, status conditions, timeouts, and failure handling, see the Firmware Update Workflow guide.
We assume a ManagedCluster has been installed through a ProvisioningRequest referencing the
sno-ran-du.v4-Y-Z-4
ClusterTemplate CR with inline hwMgmtDefaults.
In this example we are updating BIOS settings, BIOS firmware, and BMC firmware by changing
the HardwareProfile referenced via templateParameters.hwMgmtParameters in the
ProvisioningRequest. The hwMgmtDefaults and ClusterTemplate remain unchanged —
only the ProvisioningRequest and the HardwareProfile CR need to be updated.
The following steps are required:
-
Create a new
HardwareProfileCR (if one does not already exist for the target firmware versions):- Create a new version of dell-xr8620t-bios-2.3.5-bmc-7.10.70.10
HardwareProfile— dell-xr8620t-bios-2.6.3-bmc-7.20.30.50- Update the name from
dell-xr8620t-bios-2.3.5-bmc-7.10.70.10todell-xr8620t-bios-2.6.3-bmc-7.20.30.50. - Update the
spec.bios,spec.biosFirmwareandspec.bmcFirmwarewith desired settings/versions. - Add or update
spec.nicFirmwareif NIC firmware updates are also required.
- Update the name from
- Update the kustomization files to include the new
HardwareProfile. ArgoCD will automatically sync it to the hub cluster. - No changes to
hwMgmtDefaultsorClusterTemplateCRs are needed.
- Create a new version of dell-xr8620t-bios-2.3.5-bmc-7.10.70.10
-
Update the
ProvisioningRequestto reference the newHardwareProfile:- Set the
hwProfilefor the controller node group inspec.templateParameters.hwMgmtParameters.nodeGroupDatato the new profile name (dell-xr8620t-bios-2.6.3-bmc-7.20.30.50).
spec: templateParameters: hwMgmtParameters: nodeGroupData: - name: controller hwProfile: dell-xr8620t-bios-2.6.3-bmc-7.20.30.50
- Set the
-
The O-Cloud manager detects the change:
- Updates the hardware profile in the
NodeAllocationRequestCR for that cluster to the new profile.
spec: ... nodeGroup: - nodeGroupData: hwProfile: dell-xr8620t-bios-2.6.3-bmc-7.20.30.50 name: master resourceSelector: server-colour: blue server-type: XR8620t role: master ...
- Updates the status of the
ProvisioningRequest:
- lastTransitionTime: "2025-10-01T21:36:01Z" message: Hardware configuring is in progress reason: InProgress status: "False" type: HardwareConfigured ... provisioningStatus: provisionedResources: oCloudNodeClusterId: 95f4a2cf-04dc-42d5-9d1e-f6cbc693d8ea provisioningDetails: Hardware configuring is in progress provisioningPhase: progressing
- Updates the hardware profile in the
-
The O-Cloud hardware manager detects the updated
NodeAllocationRequestCR:- It lists the
AllocatedNodeCRs that reference theNodeAllocationRequestand updatesspec.hwProfilein eachAllocatedNodeCR to the new profile. - It computes BIOS/firmware changes from the new
HardwareProfileand requests the updates by updating the Metal3 resources—HostFirmwareSettingsandHostFirmwareComponents—with the changes. - The
NodeAllocationRequestandAllocatedNodeCRs status conditions are also updated to reflect the configuration change.
NodeAllocationRequestCR status:status: conditions: - lastTransitionTime: "2025-09-17T21:47:53Z" message: Created reason: Completed status: "True" type: Provisioned - lastTransitionTime: "2025-10-01T21:36:01Z" message: 'Configuration update in progress (AllocatedNode sno1-dell-xr8620t-pool-dell-xr8620t-node1)' reason: InProgress status: "False" type: Configured
AllocatedNodeCR status:conditions: - lastTransitionTime: "2025-09-17T21:47:53Z" message: Provisioned reason: Completed status: "True" type: Provisioned - lastTransitionTime: "2025-10-01T21:36:01Z" message: Update requested reason: ConfigurationUpdateRequested status: "False" type: Configured
- It lists the
-
The hardware manager waits for the Metal3 Bare Metal Operator (BMO) to detect and validate the changes on the
HostFirmwareSettingsandHostFirmwareComponentsCRs, then triggers a host reboot via thereboot.metal3.ioannotation on the BMH. BMO applies the firmware and BIOS updates during the reboot cycle. For multi-node clusters, master nodes are updated serially first, then worker nodes can be updated in parallel based on the MCPmaxUnavailablesetting. See Day-2 Workflow for details. -
The hardware manager validates the result by checking
HostFirmwareSettings/HostFirmwareComponentsstatus and confirming the Kubernetes node has rejoined the cluster and reached Ready state.-
Success scenario:
- It updates the status of the
AllocatedNodeCR to reflect the result of the operation.
status: conditions: - lastTransitionTime: "2025-09-17T21:47:53Z" message: Provisioned reason: Completed status: "True" type: Provisioned - lastTransitionTime: "2025-10-01T22:05:01Z" message: Configuration has been applied successfully reason: ConfigurationApplied status: "True" type: Configured hwProfile: dell-xr8620t-bios-2.6.3-bmc-7.20.30.50
- The
currentVersionvalues for bios and bmc inHostFirmwareComponentsstatus should match the versions declared in the new HardwareProfile.
status: components: - component: bios currentVersion: 2.6.3 initialVersion: 2.3.5 lastVersionFlashed: 2.6.3 updatedAt: "2025-10-01T22:01:50Z" - component: bmc currentVersion: 7.20.30.50 initialVersion: 7.10.70.10 lastVersionFlashed: 7.20.30.50 updatedAt: "2025-10-01T22:01:50Z" ...
- The
settingsfield in theHostFirmwareSettingsstatus shows the applied BIOS attributes as defined in the new HardwareProfile.
status: settings: AcPwrRcvryUserDelay: "120"
- Once all nodes have been updated, it will update the status of the
NodeAllocationRequestCR to reflect the result of the operation.
status: conditions: - lastTransitionTime: "2025-09-17T21:47:53Z" message: Created reason: Completed status: "True" type: Provisioned - lastTransitionTime: "2025-10-01T22:05:01Z" message: Configuration has been applied successfully reason: ConfigurationApplied status: "True" type: Configured
- It updates the status of the
-
Failure scenario:
- The operation is aborted.
- The status of the
AllocatedNodeCR is updated with the failure reason. - The O-Cloud manager does not initiate a rollback of any nodes already updated. This is left to the user to remediate.
-
-
The O-Cloud manager will update the
ProvisioningRequeststatus to reflect the result of the operation, based on the status update of theNodeAllocationRequestCR:
- lastTransitionTime: "2025-10-01T22:05:01Z"
message: Configuration has been applied successfully
reason: Completed
status: "True"
type: HardwareConfigured
...
provisioningStatus:
provisionedResources:
oCloudNodeClusterId: 95f4a2cf-04dc-42d5-9d1e-f6cbc693d8ea
provisioningDetails: Provisioning request has completed successfully
provisioningPhase: fulfilled