in backend/operations_scanner.go [699:747]
func (s *OperationsScanner) convertClusterStatus(ctx context.Context, logger *slog.Logger,
clusterStatus *arohcpv1alpha1.ClusterStatus, current arm.ProvisioningState,
internalId ocm.InternalID) (arm.ProvisioningState, *arm.CloudErrorBody, error) {
var opStatus = current
var opError *arm.CloudErrorBody
var err error
switch state := clusterStatus.State(); state {
case arohcpv1alpha1.ClusterStateError:
opStatus = arm.ProvisioningStateFailed
// Provision error codes are defined in the CS repo:
// https://gitlab.cee.redhat.com/service/uhc-clusters-service/-/blob/master/pkg/api/cluster_errors.go
code := clusterStatus.ProvisionErrorCode()
if code == "" {
code = arm.CloudErrorCodeInternalServerError
}
message := clusterStatus.ProvisionErrorMessage()
if message == "" {
message = clusterStatus.Description()
}
// Construct the cloud error code depending on the provision error code.
switch code {
case InflightChecksFailedProvisionErrorCode:
opError, err = s.convertInflightChecks(ctx, logger, internalId)
if err != nil {
return opStatus, opError, err
}
default:
opError = &arm.CloudErrorBody{Code: code, Message: message}
}
case arohcpv1alpha1.ClusterStateInstalling:
opStatus = arm.ProvisioningStateProvisioning
case arohcpv1alpha1.ClusterStateReady:
opStatus = arm.ProvisioningStateSucceeded
case arohcpv1alpha1.ClusterStateUninstalling:
opStatus = arm.ProvisioningStateDeleting
case arohcpv1alpha1.ClusterStatePending, arohcpv1alpha1.ClusterStateValidating:
// These are valid cluster states for ARO-HCP but there are
// no unique ProvisioningState values for them. They should
// only occur when ProvisioningState is Accepted.
if current != arm.ProvisioningStateAccepted {
err = fmt.Errorf("got ClusterState '%s' while ProvisioningState was '%s' instead of '%s'", state, current, arm.ProvisioningStateAccepted)
}
default:
err = fmt.Errorf("unhandled ClusterState '%s'", state)
}
return opStatus, opError, err
}