Repository: Azure/ARO-RP
Pull request #2232 (2022-07-07 16:19:51)

Hive: cluster adoption & resource reconciliation on update
### Which issue this PR addresses:

Fixes [WI 14895480](https://msazure.visualstudio.com/AzureRedHatOpenShift/_workitems/edit/14895480).

### What this PR does / why we need it:

Modifies Update and AdminUpdate

Adds steps to reconcile hive resources which covers two things:
* Initial cluster adoption
* Hive resources reconciliation on updates (admin and customer initiated) to make sure that the hive has the latest configuration and secrets

### Test plan for issue:

This new code is still disabled at the moment. Green e2e will confirm that we did not break anything.

### Is there any documentation that needs to be updated for this PR?

No, it is refactoring. Code is a no-op at the moment.


Patch:
diff --git a/.pipelines/templates/template-job-deploy-azure-env-tag.yml b/.pipelines/templates/template-job-deploy-azure-env-tag.yml
index a3a709f6f..ac3b5876e 100644
--- a/.pipelines/templates/template-job-deploy-azure-env-tag.yml
+++ b/.pipelines/templates/template-job-deploy-azure-env-tag.yml
@@ -87,17 +87,7 @@ jobs:
     - script: |
         # Pass variables between tasks: https://medium.com/microsoftazure/how-to-pass-variables-in-azure-pipelines-yaml-tasks-5c81c5d31763
         echo "##vso[task.setvariable variable=REGION]${{ location }}"
-        # TODO: Remove this hack after AvailabilitySet name too long bug is fixed.
-        LOCATION=${{ location }}
-        NONZONAL_REGIONS="australiacentral australiacentral2 australiasoutheast brazilsoutheast canadaeast japanwest northcentralus norwaywest southindia switzerlandwest uaenorth ukwest westcentralus westus"
-        if echo $NONZONAL_REGIONS | grep -wq $LOCATION
-        then
-            CLUSTER=$(head -c 19 <<< "v4-e2e-V$BUILD_BUILDID-$LOCATION")
-        else
-            CLUSTER="v4-e2e-V$BUILD_BUILDID-$LOCATION"
-        fi
-        # TODO: Uncomment next line after above hack is removed.
-        # CLUSTER="v4-e2e-V$BUILD_BUILDID-${{ location }}"
+        CLUSTER="v4-e2e-V$BUILD_BUILDID-${{ location }}"
         echo "##vso[task.setvariable variable=CLUSTER]$CLUSTER"
         CLUSTER_RESOURCEGROUP="v4-e2e-V$BUILD_BUILDID-${{ location }}"
         echo "##vso[task.setvariable variable=CLUSTER_RESOURCEGROUP]$CLUSTER_RESOURCEGROUP"
diff --git a/.pipelines/templates/template-job-deploy-azure-env.yml b/.pipelines/templates/template-job-deploy-azure-env.yml
index 56289d4ed..d380c45b3 100644
--- a/.pipelines/templates/template-job-deploy-azure-env.yml
+++ b/.pipelines/templates/template-job-deploy-azure-env.yml
@@ -83,17 +83,7 @@ jobs:
     - script: |
         # Pass variables between tasks: https://medium.com/microsoftazure/how-to-pass-variables-in-azure-pipelines-yaml-tasks-5c81c5d31763
         echo "##vso[task.setvariable variable=REGION]${{ location }}"
-        # TODO: Remove this hack after AvailabilitySet name too long bug is fixed.
-        LOCATION=${{ location }}
-        NONZONAL_REGIONS="australiacentral australiacentral2 australiasoutheast brazilsoutheast canadaeast japanwest northcentralus norwaywest southindia switzerlandwest uaenorth ukwest westcentralus westus"
-        if echo $NONZONAL_REGIONS | grep -wq $LOCATION
-        then
-            CLUSTER=$(head -c 19 <<< "v4-e2e-V$BUILD_BUILDID-$LOCATION")
-        else
-            CLUSTER="v4-e2e-V$BUILD_BUILDID-$LOCATION"
-        fi
-        # TODO: Uncomment next line after above hack is removed.
-        # CLUSTER="v4-e2e-V$BUILD_BUILDID-${{ location }}"
+        CLUSTER="v4-e2e-V$BUILD_BUILDID-${{ location }}"
         echo "##vso[task.setvariable variable=CLUSTER]$CLUSTER"
         CLUSTER_RESOURCEGROUP="v4-e2e-V$BUILD_BUILDID-${{ location }}"
         echo "##vso[task.setvariable variable=CLUSTER_RESOURCEGROUP]$CLUSTER_RESOURCEGROUP"
diff --git a/hack/validate-imports/allowed-import-names.yaml b/hack/validate-imports/allowed-import-names.yaml
index 87a5a7a54..9704c5aab 100644
--- a/hack/validate-imports/allowed-import-names.yaml
+++ b/hack/validate-imports/allowed-import-names.yaml
@@ -1,7 +1,4 @@
 allowedImportNames:
-  github.com/Azure/ARO-RP/pkg/api/validate:
-    - ""
-    - apiValidate
   github.com/Azure/ARO-RP/pkg/frontend/middleware:
     - ""
     - frontendmiddleware
diff --git a/pkg/api/validate/openshiftcluster.go b/pkg/api/validate/openshiftcluster.go
deleted file mode 100644
index efc934026..000000000
--- a/pkg/api/validate/openshiftcluster.go
+++ /dev/null
@@ -1,53 +0,0 @@
-package validate
-
-// Copyright (c) Microsoft Corporation.
-// Licensed under the Apache License 2.0.
-
-import (
-	"strings"
-)
-
-// TODO: remove the VM name validation after https://bugzilla.redhat.com/show_bug.cgi?id=2093044 is resolved
-
-// Max length of a ARO cluster name is determined by the length of the generated availability set
-// in the machine-api provider.  It varies per region, but to remain consistent across non-zonal regions
-// we hardcode this to 19, which is the max for all non-zonal regions.
-//
-// the generated availability set must be <= 80 characters and can be calculated below
-// <cluster-name>-XXXXX_<cluster-name>-XXXXX-worker-<region>-as
-//   XXXXX:          represents the 5 digit cluster infraID
-//   <cluster-name>: the name of the cluster
-//   <region>:       the short-name of the region
-const MaxClusterNameLength = 19
-
-// nonZonalRegions are defined by the Compute List SKUs API not returning zones within the VM objects
-//
-// This can be queried for a location by running `az vm list-skus -l <region> --all --zone`
-// If the object is empty that means the location does not support VMs deployed into
-// availability zones
-var nonZonalRegions = map[string]bool{
-	"australiacentral":   true,
-	"australiacentral2":  true,
-	"australiasoutheast": true,
-	"brazilsoutheast":    true,
-	"canadaeast":         true,
-	"japanwest":          true,
-	"northcentralus":     true,
-	"norwaywest":         true,
-	"southindia":         true,
-	"switzerlandwest":    true,
-	"uaenorth":           true,
-	"ukwest":             true,
-	"westcentralus":      true,
-	"westus":             true,
-}
-
-// OpenShiftClusterNameLength validates that the name does not exceed the maximumLength
-// which is in place for non-zonal regions due to https://bugzilla.redhat.com/show_bug.cgi?id=2093044
-func OpenShiftClusterNameLength(name, location string) bool {
-	if nonZonalRegions[strings.ToLower(location)] && len(name) > MaxClusterNameLength {
-		return false
-	}
-
-	return true
-}
diff --git a/pkg/cluster/install.go b/pkg/cluster/install.go
index 962c2a71f..828f26cf0 100644
--- a/pkg/cluster/install.go
+++ b/pkg/cluster/install.go
@@ -92,6 +92,14 @@ func (m *manager) adminUpdate() []steps.Step {
 		)
 	}
 
+	// Hive cluster adoption and reconciliation
+	if isEverything {
+		toRun = append(toRun,
+			steps.Action(m.hiveCreateNamespace),
+			steps.Action(m.hiveEnsureResources),
+		)
+	}
+
 	// We don't run this on an operator-only deploy as PUCM scripts then cannot
 	// determine if the cluster has been fully admin-updated
 	if isEverything {
@@ -115,6 +123,10 @@ func (m *manager) Update(ctx context.Context) error {
 		steps.Action(m.createOrUpdateDenyAssignment),
 		steps.Action(m.updateOpenShiftSecret),
 		steps.Action(m.updateAROSecret),
+		// Hive reconciliation: we mostly need it to make sure that
+		// hive has the latest credentials after rotation.
+		steps.Action(m.hiveCreateNamespace),
+		steps.Action(m.hiveEnsureResources),
 	}
 
 	return m.runSteps(ctx, steps)
diff --git a/pkg/frontend/asyncoperationresult_get.go b/pkg/frontend/asyncoperationresult_get.go
index d61f14265..84d3484d3 100644
--- a/pkg/frontend/asyncoperationresult_get.go
+++ b/pkg/frontend/asyncoperationresult_get.go
@@ -8,6 +8,7 @@ import (
 	"encoding/json"
 	"net/http"
 
+	"github.com/Azure/go-autorest/autorest/azure"
 	"github.com/gorilla/mux"
 	"github.com/sirupsen/logrus"
 
@@ -38,6 +39,14 @@ func (f *frontend) _getAsyncOperationResult(ctx context.Context, r *http.Request
 		return nil, err
 	}
 
+	resource, err := azure.ParseResourceID(asyncdoc.OpenShiftClusterKey)
+	switch {
+	case err != nil:
+		return nil, err
+	case resource.SubscriptionID != vars["subscriptionId"]:
+		return nil, api.NewCloudError(http.StatusNotFound, api.CloudErrorCodeNotFound, "", "The entity was not found.")
+	}
+
 	doc, err := f.dbOpenShiftClusters.Get(ctx, asyncdoc.OpenShiftClusterKey)
 	if err != nil && !cosmosdb.IsErrorStatusCode(err, http.StatusNotFound) {
 		return nil, err
diff --git a/pkg/frontend/asyncoperationsstatus_get.go b/pkg/frontend/asyncoperationsstatus_get.go
index 55296ccc7..e6b10a4ec 100644
--- a/pkg/frontend/asyncoperationsstatus_get.go
+++ b/pkg/frontend/asyncoperationsstatus_get.go
@@ -7,6 +7,7 @@ import (
 	"context"
 	"net/http"
 
+	"github.com/Azure/go-autorest/autorest/azure"
 	"github.com/gorilla/mux"
 	"github.com/sirupsen/logrus"
 	"github.com/ugorji/go/codec"
@@ -36,6 +37,14 @@ func (f *frontend) _getAsyncOperationsStatus(ctx context.Context, r *http.Reques
 		return nil, err
 	}
 
+	resource, err := azure.ParseResourceID(asyncdoc.OpenShiftClusterKey)
+	switch {
+	case err != nil:
+		return nil, err
+	case resource.SubscriptionID != vars["subscriptionId"]:
+		return nil, api.NewCloudError(http.StatusNotFound, api.CloudErrorCodeNotFound, "", "The entity was not found.")
+	}
+
 	doc, err := f.dbOpenShiftClusters.Get(ctx, asyncdoc.OpenShiftClusterKey)
 	if err != nil && !cosmosdb.IsErrorStatusCode(err, http.StatusNotFound) {
 		return nil, err
diff --git a/pkg/hive/resources.go b/pkg/hive/resources.go
index 7dc5e3167..054eebdf0 100644
--- a/pkg/hive/resources.go
+++ b/pkg/hive/resources.go
@@ -44,7 +44,6 @@ func servicePrincipalSecret(namespace string, secret []byte) *corev1.Secret {
 
 func clusterDeployment(namespace string, clusterName string, clusterID string, infraID string, location string) *hivev1.ClusterDeployment {
 	return &hivev1.ClusterDeployment{
-
 		ObjectMeta: metav1.ObjectMeta{
 			Name:      clusterDeploymentName,
 			Namespace: namespace,
diff --git a/pkg/util/dynamichelper/discovery/bindata.go b/pkg/util/dynamichelper/discovery/bindata.go
index 77956ff5d..dc01fa02d 100644
--- a/pkg/util/dynamichelper/discovery/bindata.go
+++ b/pkg/util/dynamichelper/discovery/bindata.go
@@ -297,7 +297,7 @@ func aroOpenshiftIoV1alpha1ServerresourcesJson() (*asset, error) {
 	return a, nil
 }
 
-var _assets_version = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd1\x33\x34\xd0\x33\x34\xe5\x02\x04\x00\x00\xff\xff\xa3\xd0\x80\xb2\x08\x00\x00\x00")
+var _assets_version = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x32\xd1\x33\x34\xd0\x33\x32\xe0\x02\x04\x00\x00\xff\xff\xbf\x9a\xb1\xcd\x08\x00\x00\x00")
 
 func assets_versionBytes() ([]byte, error) {
 	return bindataRead(
diff --git a/pkg/util/dynamichelper/discovery/cache/assets_version b/pkg/util/dynamichelper/discovery/cache/assets_version
index 25406511b..c367105d7 100644
--- a/pkg/util/dynamichelper/discovery/cache/assets_version
+++ b/pkg/util/dynamichelper/discovery/cache/assets_version
@@ -1,1 +1,1 @@
-4.10.15
+4.10.20
diff --git a/pkg/util/scheme/scheme.go b/pkg/util/scheme/scheme.go
index f296b9258..cf6ba1a8b 100644
--- a/pkg/util/scheme/scheme.go
+++ b/pkg/util/scheme/scheme.go
@@ -8,6 +8,7 @@ import (
 	consolev1 "github.com/openshift/api/console/v1"
 	machinev1beta1 "github.com/openshift/api/machine/v1beta1"
 	securityv1 "github.com/openshift/api/security/v1"
+	hivev1 "github.com/openshift/hive/apis/hive/v1"
 	mcv1 "github.com/openshift/machine-config-operator/pkg/apis/machineconfiguration.openshift.io/v1"
 	monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
 	appsv1 "k8s.io/api/apps/v1"
@@ -49,4 +50,5 @@ func init() {
 	// In order to guarantee backward compatibility, we need to add this type to the scheme
 	// under both API Groups
 	scheme.Scheme.AddKnownTypes(azureproviderv1beta1.SchemeGroupVersion, &machinev1beta1.AzureMachineProviderSpec{})
+	utilruntime.Must(hivev1.AddToScheme(scheme.Scheme))
 }
diff --git a/pkg/util/version/const.go b/pkg/util/version/const.go
index bded534d4..2933ae0a4 100644
--- a/pkg/util/version/const.go
+++ b/pkg/util/version/const.go
@@ -27,8 +27,8 @@ var GitCommit = "unknown"
 
 // InstallStream describes stream we are defaulting to for all new clusters
 var InstallStream = &Stream{
-	Version:  NewVersion(4, 10, 15),
-	PullSpec: "quay.io/openshift-release-dev/ocp-release@sha256:ddcb70ce04a01ce487c0f4ad769e9e36a10c8c832a34307c1b1eb8e03a5b7ddb",
+	Version:  NewVersion(4, 10, 20),
+	PullSpec: "quay.io/openshift-release-dev/ocp-release@sha256:b89ada9261a1b257012469e90d7d4839d0d2f99654f5ce76394fa3f06522b600",
 }
 
 // UpgradeStreams describes list of streams we support for upgrades


Test patch:
diff --git a/.pipelines/e2e-with-billing.yml b/.pipelines/e2e-with-billing.yml
index 0a18c3e87..45257cf42 100644
--- a/.pipelines/e2e-with-billing.yml
+++ b/.pipelines/e2e-with-billing.yml
@@ -48,16 +48,7 @@ stages:
     - script: |
         # Pass variables between tasks: https://medium.com/microsoftazure/how-to-pass-variables-in-azure-pipelines-yaml-tasks-5c81c5d31763
         echo "##vso[task.setvariable variable=REGION]$LOCATION"
-        # TODO: Remove this hack after AvailabilitySet name too long bug is fixed.
-        NONZONAL_REGIONS="australiacentral australiacentral2 australiasoutheast brazilsoutheast canadaeast japanwest northcentralus norwaywest southindia switzerlandwest uaenorth ukwest westcentralus westus"
-        if echo $NONZONAL_REGIONS | grep -wq $LOCATION
-        then
-            CLUSTER=$(head -c 19 <<< "v4-e2e-V$BUILD_BUILDID-$LOCATION")
-        else
-            CLUSTER="v4-e2e-V$BUILD_BUILDID-$LOCATION"
-        fi
-        # TODO: Uncomment next line after above hack is removed.
-        # CLUSTER="v4-e2e-V$BUILD_BUILDID-$LOCATION"
+        CLUSTER="v4-e2e-V$BUILD_BUILDID-$LOCATION"
         echo "##vso[task.setvariable variable=CLUSTER]$CLUSTER"
         CLUSTER_RESOURCEGROUP="v4-e2e-V$BUILD_BUILDID-$LOCATION"
         echo "##vso[task.setvariable variable=CLUSTER_RESOURCEGROUP]$CLUSTER_RESOURCEGROUP"
diff --git a/.pipelines/templates/template-prod-e2e-steps.yml b/.pipelines/templates/template-prod-e2e-steps.yml
index bfded5d06..a4483bf28 100644
--- a/.pipelines/templates/template-prod-e2e-steps.yml
+++ b/.pipelines/templates/template-prod-e2e-steps.yml
@@ -35,14 +35,6 @@ steps:
       export AZURE_FP_CLIENT_ID=f1dd0a37-89c6-4e07-bcd1-ffd3d43d8875
       export AZURE_FP_SERVICE_PRINCIPAL_ID=50c17c64-bc11-4fdd-a339-0ecd396bf911
     fi
-    # TODO: Remove this after AvailabilitySet name too long bug is fixed.
-    NONZONAL_REGIONS="australiacentral australiacentral2 australiasoutheast brazilsoutheast canadaeast japanwest northcentralus norwaywest southindia switzerlandwest uaenorth ukwest westcentralus westus"
-    if echo $NONZONAL_REGIONS | grep -wq $LOCATION
-    then
-        CLUSTER=$(head -c 19 <<< "v4-e2e-V$BUILD_BUILDID-$LOCATION")
-    else
-        CLUSTER="v4-e2e-V$BUILD_BUILDID-$LOCATION"
-    fi
     # TODO: remove --env RESOURCEGROUP after next RP deployment.
 
     # TODO: e2e.test arguments need to move inside the container somehow.  Maybe
@@ -58,7 +50,7 @@ steps:
       --env AZURE_SUBSCRIPTION_ID \
       --env LOCATION \
       --env RESOURCEGROUP="v4-e2e-V$BUILD_BUILDID-$LOCATION" \
-      --env CLUSTER="$CLUSTER" \
+      --env CLUSTER="v4-e2e-V$BUILD_BUILDID-$LOCATION" \
       --entrypoint e2e.test \
       "$IMAGE:$VERSION" \
       -test.timeout 180m -test.v -ginkgo.v
diff --git a/.pipelines/templates/template-rp-and-billing-e2e.yml b/.pipelines/templates/template-rp-and-billing-e2e.yml
index 7a89ff6f8..27c729bcf 100644
--- a/.pipelines/templates/template-rp-and-billing-e2e.yml
+++ b/.pipelines/templates/template-rp-and-billing-e2e.yml
@@ -43,18 +43,7 @@ stages:
     - script: |
         # Pass variables between tasks: https://medium.com/microsoftazure/how-to-pass-variables-in-azure-pipelines-yaml-tasks-5c81c5d31763
         echo "##vso[task.setvariable variable=REGION]${{ parameters.location }}"
-
-        # TODO: Remove this hack after AvailabilitySet name too long bug is fixed.
-        LOCATION=${{ parameters.location }}
-        NONZONAL_REGIONS="australiacentral australiacentral2 australiasoutheast brazilsoutheast canadaeast japanwest northcentralus norwaywest southindia switzerlandwest uaenorth ukwest westcentralus westus"
-        if echo $NONZONAL_REGIONS | grep -wq $LOCATION
-        then
-            CLUSTER=$(head -c 19 <<< "v4-e2e-V$BUILD_BUILDID-$LOCATION")
-        else
-            CLUSTER="v4-e2e-V$BUILD_BUILDID-$LOCATION"
-        fi
-        # TODO: Uncomment next line after above hack is removed.
-        # CLUSTER="v4-e2e-V$BUILD_BUILDID-${{ parameters.location }}"
+        CLUSTER="v4-e2e-V$BUILD_BUILDID-${{ parameters.location }}"
         echo "##vso[task.setvariable variable=CLUSTER]$CLUSTER"
         CLUSTER_RESOURCEGROUP="v4-e2e-V$BUILD_BUILDID-${{ parameters.location }}"
         echo "##vso[task.setvariable variable=CLUSTER_RESOURCEGROUP]$CLUSTER_RESOURCEGROUP"
diff --git a/hack/e2e/run-rp-and-e2e.sh b/hack/e2e/run-rp-and-e2e.sh
index 7fd4f10d7..e44e6829f 100755
--- a/hack/e2e/run-rp-and-e2e.sh
+++ b/hack/e2e/run-rp-and-e2e.sh
@@ -72,19 +72,9 @@ clean_e2e_db(){
 
 
 # if LOCAL_E2E is set, set the value with the local test names
-# If it it not set, it defaults to the build ID
-if [ -z "${LOCAL_E2E}" ] ; then
-    # TODO: Remove this hack after AvailabilitySet name too long bug is fixed.
-    NONZONAL_REGIONS="australiacentral australiacentral2 australiasoutheast brazilsoutheast canadaeast japanwest northcentralus norwaywest southindia switzerlandwest uaenorth ukwest westcentralus westus"
-
-    if echo $NONZONAL_REGIONS | grep -wq $LOCATION
-    then
-        export CLUSTER=$(head -c 19 <<< "v4-e2e-V$BUILD_BUILDID-$LOCATION")
-    else
-        export CLUSTER="v4-e2e-V$BUILD_BUILDID-$LOCATION"
-    fi
-    # TODO: uncomment after above hack is removed.
-    # export CLUSTER="v4-e2e-V$BUILD_BUILDID-$LOCATION"
+# If it it not set, it defaults to the build ID 
+if [ -z "${LOCAL_E2E}" ] ; then 
+    export CLUSTER="v4-e2e-V$BUILD_BUILDID-$LOCATION"
     export DATABASE_NAME="v4-e2e-V$BUILD_BUILDID-$LOCATION"
 fi
 
diff --git a/pkg/api/v20191231preview/openshiftcluster_validatestatic.go b/pkg/api/v20191231preview/openshiftcluster_validatestatic.go
index 7ec17f8ee..1bde17ad1 100644
--- a/pkg/api/v20191231preview/openshiftcluster_validatestatic.go
+++ b/pkg/api/v20191231preview/openshiftcluster_validatestatic.go
@@ -71,13 +71,6 @@ func (sv *openShiftClusterStaticValidator) validate(oc *OpenShiftCluster, isCrea
 		return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "location", "The provided location '%s' is invalid.", oc.Location)
 	}
 
-	// TODO: remove the VM name validation after https://bugzilla.redhat.com/show_bug.cgi?id=2093044 is resolved
-	if isCreate {
-		if !validate.OpenShiftClusterNameLength(oc.Name, oc.Location) {
-			return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "name", "The provided cluster name '%s' exceeds the maximum cluster name length of '%d'.", oc.Name, validate.MaxClusterNameLength)
-		}
-	}
-
 	return sv.validateProperties("properties", &oc.Properties, isCreate)
 }
 
diff --git a/pkg/api/v20191231preview/openshiftcluster_validatestatic_test.go b/pkg/api/v20191231preview/openshiftcluster_validatestatic_test.go
index a095d7d6a..71a948652 100644
--- a/pkg/api/v20191231preview/openshiftcluster_validatestatic_test.go
+++ b/pkg/api/v20191231preview/openshiftcluster_validatestatic_test.go
@@ -10,19 +10,15 @@ import (
 	"testing"
 
 	"github.com/Azure/go-autorest/autorest/azure"
-	"github.com/Azure/go-autorest/autorest/to"
 	"github.com/gofrs/uuid"
 
 	"github.com/Azure/ARO-RP/pkg/api"
-	apiValidate "github.com/Azure/ARO-RP/pkg/api/validate"
 	"github.com/Azure/ARO-RP/pkg/util/version"
 	"github.com/Azure/ARO-RP/test/validate"
 )
 
 type validateTest struct {
 	name                string
-	clusterName         *string
-	location            *string
 	current             func(oc *OpenShiftCluster)
 	modify              func(oc *OpenShiftCluster)
 	requireD2sV3Workers bool
@@ -38,18 +34,15 @@ const (
 
 var (
 	subscriptionID = "00000000-0000-0000-0000-000000000000"
+	id             = fmt.Sprintf("/subscriptions/%s/resourcegroups/resourceGroup/providers/microsoft.redhatopenshift/openshiftclusters/resourceName", subscriptionID)
 )
 
-func getResourceID(clusterName string) string {
-	return fmt.Sprintf("/subscriptions/%s/resourcegroups/resourceGroup/providers/microsoft.redhatopenshift/openshiftclusters/%s", subscriptionID, clusterName)
-}
-
-func validOpenShiftCluster(name, location string) *OpenShiftCluster {
+func validOpenShiftCluster() *OpenShiftCluster {
 	oc := &OpenShiftCluster{
-		ID:       getResourceID(name),
-		Name:     name,
+		ID:       id,
+		Name:     "resourceName",
 		Type:     "Microsoft.RedHatOpenShift/OpenShiftClusters",
-		Location: location,
+		Location: "location",
 		Tags: Tags{
 			"key": "value",
 		},
@@ -107,31 +100,22 @@ func runTests(t *testing.T, mode testMode, tests []*validateTest) {
 	t.Run(string(mode), func(t *testing.T) {
 		for _, tt := range tests {
 			t.Run(tt.name, func(t *testing.T) {
-				// default values if not set
-				if tt.location == nil {
-					tt.location = to.StringPtr("location")
-				}
-
-				if tt.clusterName == nil {
-					tt.clusterName = to.StringPtr("resourceName")
-				}
-
 				v := &openShiftClusterStaticValidator{
-					location:            *tt.location,
+					location:            "location",
 					domain:              "location.aroapp.io",
 					requireD2sV3Workers: tt.requireD2sV3Workers,
-					resourceID:          getResourceID(*tt.clusterName),
+					resourceID:          id,
 					r: azure.Resource{
 						SubscriptionID: subscriptionID,
 						ResourceGroup:  "resourceGroup",
 						Provider:       "Microsoft.RedHatOpenShift",
 						ResourceType:   "openshiftClusters",
-						ResourceName:   *tt.clusterName,
+						ResourceName:   "resourceName",
 					},
 				}
 
 				validOCForTest := func() *OpenShiftCluster {
-					oc := validOpenShiftCluster(*tt.clusterName, *tt.location)
+					oc := validOpenShiftCluster()
 					if tt.current != nil {
 						tt.current(oc)
 					}
@@ -176,11 +160,7 @@ func runTests(t *testing.T, mode testMode, tests []*validateTest) {
 }
 
 func TestOpenShiftClusterStaticValidate(t *testing.T) {
-	clusterName19 := "19characters-aaaaaa"
-	clusterName30 := "thisis30characterslong-aaaaaa"
-	nonZonalRegion := "australiasoutheast"
-
-	commonTests := []*validateTest{
+	tests := []*validateTest{
 		{
 			name: "valid",
 		},
@@ -212,38 +192,10 @@ func TestOpenShiftClusterStaticValidate(t *testing.T) {
 			},
 			wantErr: "400: InvalidParameter: location: The provided location 'invalid' is invalid.",
 		},
-		{
-			name:        "valid - zonal regions can exceed max cluster name length",
-			clusterName: &clusterName30,
-		},
 	}
 
-	createTests := []*validateTest{
-		{
-			name:        "invalid - non-zonal regions cannot exceed max cluster name length on cluster create",
-			clusterName: &clusterName30,
-			location:    &nonZonalRegion,
-			wantErr:     fmt.Sprintf("400: InvalidParameter: name: The provided cluster name '%s' exceeds the maximum cluster name length of '%d'.", clusterName30, apiValidate.MaxClusterNameLength),
-		},
-		{
-			name:        "valid - non-zonal region less than max cluster name length",
-			clusterName: &clusterName19,
-			location:    &nonZonalRegion,
-		},
-	}
-
-	updateTests := []*validateTest{
-		{
-			name:        "valid - existing cluster names > max cluster name length still work on cluster update",
-			clusterName: &clusterName30,
-			location:    &nonZonalRegion,
-		},
-	}
-
-	runTests(t, testModeCreate, commonTests)
-	runTests(t, testModeUpdate, commonTests)
-	runTests(t, testModeCreate, createTests)
-	runTests(t, testModeUpdate, updateTests)
+	runTests(t, testModeCreate, tests)
+	runTests(t, testModeUpdate, tests)
 }
 
 func TestOpenShiftClusterStaticValidateProperties(t *testing.T) {
diff --git a/pkg/api/v20200430/openshiftcluster_validatestatic.go b/pkg/api/v20200430/openshiftcluster_validatestatic.go
index 8349aac9f..c38b26902 100644
--- a/pkg/api/v20200430/openshiftcluster_validatestatic.go
+++ b/pkg/api/v20200430/openshiftcluster_validatestatic.go
@@ -71,13 +71,6 @@ func (sv *openShiftClusterStaticValidator) validate(oc *OpenShiftCluster, isCrea
 		return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "location", "The provided location '%s' is invalid.", oc.Location)
 	}
 
-	// TODO: remove the VM name validation after https://bugzilla.redhat.com/show_bug.cgi?id=2093044 is resolved
-	if isCreate {
-		if !validate.OpenShiftClusterNameLength(oc.Name, oc.Location) {
-			return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "name", "The provided cluster name '%s' exceeds the maximum cluster name length of '%d'.", oc.Name, validate.MaxClusterNameLength)
-		}
-	}
-
 	return sv.validateProperties("properties", &oc.Properties, isCreate)
 }
 
diff --git a/pkg/api/v20200430/openshiftcluster_validatestatic_test.go b/pkg/api/v20200430/openshiftcluster_validatestatic_test.go
index 372af5b9c..bdd6c077e 100644
--- a/pkg/api/v20200430/openshiftcluster_validatestatic_test.go
+++ b/pkg/api/v20200430/openshiftcluster_validatestatic_test.go
@@ -10,19 +10,15 @@ import (
 	"testing"
 
 	"github.com/Azure/go-autorest/autorest/azure"
-	"github.com/Azure/go-autorest/autorest/to"
 	"github.com/gofrs/uuid"
 
 	"github.com/Azure/ARO-RP/pkg/api"
-	apiValidate "github.com/Azure/ARO-RP/pkg/api/validate"
 	"github.com/Azure/ARO-RP/pkg/util/version"
 	"github.com/Azure/ARO-RP/test/validate"
 )
 
 type validateTest struct {
 	name                string
-	clusterName         *string
-	location            *string
 	current             func(oc *OpenShiftCluster)
 	modify              func(oc *OpenShiftCluster)
 	requireD2sV3Workers bool
@@ -38,18 +34,15 @@ const (
 
 var (
 	subscriptionID = "00000000-0000-0000-0000-000000000000"
+	id             = fmt.Sprintf("/subscriptions/%s/resourcegroups/resourceGroup/providers/microsoft.redhatopenshift/openshiftclusters/resourceName", subscriptionID)
 )
 
-func getResourceID(clusterName string) string {
-	return fmt.Sprintf("/subscriptions/%s/resourcegroups/resourceGroup/providers/microsoft.redhatopenshift/openshiftclusters/%s", subscriptionID, clusterName)
-}
-
-func validOpenShiftCluster(name, location string) *OpenShiftCluster {
+func validOpenShiftCluster() *OpenShiftCluster {
 	oc := &OpenShiftCluster{
-		ID:       getResourceID(name),
-		Name:     name,
+		ID:       id,
+		Name:     "resourceName",
 		Type:     "Microsoft.RedHatOpenShift/OpenShiftClusters",
-		Location: location,
+		Location: "location",
 		Tags: Tags{
 			"key": "value",
 		},
@@ -107,31 +100,22 @@ func runTests(t *testing.T, mode testMode, tests []*validateTest) {
 	t.Run(string(mode), func(t *testing.T) {
 		for _, tt := range tests {
 			t.Run(tt.name, func(t *testing.T) {
-				// default values if not set
-				if tt.location == nil {
-					tt.location = to.StringPtr("location")
-				}
-
-				if tt.clusterName == nil {
-					tt.clusterName = to.StringPtr("resourceName")
-				}
-
 				v := &openShiftClusterStaticValidator{
-					location:            *tt.location,
+					location:            "location",
 					domain:              "location.aroapp.io",
 					requireD2sV3Workers: tt.requireD2sV3Workers,
-					resourceID:          getResourceID(*tt.clusterName),
+					resourceID:          id,
 					r: azure.Resource{
 						SubscriptionID: subscriptionID,
 						ResourceGroup:  "resourceGroup",
 						Provider:       "Microsoft.RedHatOpenShift",
 						ResourceType:   "openshiftClusters",
-						ResourceName:   *tt.clusterName,
+						ResourceName:   "resourceName",
 					},
 				}
 
 				validOCForTest := func() *OpenShiftCluster {
-					oc := validOpenShiftCluster(*tt.clusterName, *tt.location)
+					oc := validOpenShiftCluster()
 					if tt.current != nil {
 						tt.current(oc)
 					}
@@ -176,11 +160,7 @@ func runTests(t *testing.T, mode testMode, tests []*validateTest) {
 }
 
 func TestOpenShiftClusterStaticValidate(t *testing.T) {
-	clusterName19 := "19characters-aaaaaa"
-	clusterName30 := "thisis30characterslong-aaaaaa"
-	nonZonalRegion := "australiasoutheast"
-
-	commonTests := []*validateTest{
+	tests := []*validateTest{
 		{
 			name: "valid",
 		},
@@ -212,38 +192,10 @@ func TestOpenShiftClusterStaticValidate(t *testing.T) {
 			},
 			wantErr: "400: InvalidParameter: location: The provided location 'invalid' is invalid.",
 		},
-		{
-			name:        "valid - zonal regions can exceed max cluster name length",
-			clusterName: &clusterName30,
-		},
 	}
 
-	createTests := []*validateTest{
-		{
-			name:        "invalid - non-zonal regions cannot exceed max cluster name length on cluster create",
-			clusterName: &clusterName30,
-			location:    &nonZonalRegion,
-			wantErr:     fmt.Sprintf("400: InvalidParameter: name: The provided cluster name '%s' exceeds the maximum cluster name length of '%d'.", clusterName30, apiValidate.MaxClusterNameLength),
-		},
-		{
-			name:        "valid - non-zonal region less than max cluster name length",
-			clusterName: &clusterName19,
-			location:    &nonZonalRegion,
-		},
-	}
-
-	updateTests := []*validateTest{
-		{
-			name:        "valid - existing cluster names > max cluster name length still work on cluster update",
-			clusterName: &clusterName30,
-			location:    &nonZonalRegion,
-		},
-	}
-
-	runTests(t, testModeCreate, commonTests)
-	runTests(t, testModeUpdate, commonTests)
-	runTests(t, testModeCreate, createTests)
-	runTests(t, testModeUpdate, updateTests)
+	runTests(t, testModeCreate, tests)
+	runTests(t, testModeUpdate, tests)
 }
 
 func TestOpenShiftClusterStaticValidateProperties(t *testing.T) {
diff --git a/pkg/api/v20210901preview/openshiftcluster_validatestatic.go b/pkg/api/v20210901preview/openshiftcluster_validatestatic.go
index 324dc97ce..b73c6837e 100644
--- a/pkg/api/v20210901preview/openshiftcluster_validatestatic.go
+++ b/pkg/api/v20210901preview/openshiftcluster_validatestatic.go
@@ -71,13 +71,6 @@ func (sv *openShiftClusterStaticValidator) validate(oc *OpenShiftCluster, isCrea
 		return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "location", "The provided location '%s' is invalid.", oc.Location)
 	}
 
-	// TODO: remove the VM name validation after https://bugzilla.redhat.com/show_bug.cgi?id=2093044 is resolved
-	if isCreate {
-		if !validate.OpenShiftClusterNameLength(oc.Name, oc.Location) {
-			return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "name", "The provided cluster name '%s' exceeds the maximum cluster name length of '%d'.", oc.Name, validate.MaxClusterNameLength)
-		}
-	}
-
 	return sv.validateProperties("properties", &oc.Properties, isCreate)
 }
 
diff --git a/pkg/api/v20210901preview/openshiftcluster_validatestatic_test.go b/pkg/api/v20210901preview/openshiftcluster_validatestatic_test.go
index 4c497086c..5788b4d5f 100644
--- a/pkg/api/v20210901preview/openshiftcluster_validatestatic_test.go
+++ b/pkg/api/v20210901preview/openshiftcluster_validatestatic_test.go
@@ -11,19 +11,15 @@ import (
 	"time"
 
 	"github.com/Azure/go-autorest/autorest/azure"
-	"github.com/Azure/go-autorest/autorest/to"
 	"github.com/gofrs/uuid"
 
 	"github.com/Azure/ARO-RP/pkg/api"
-	apiValidate "github.com/Azure/ARO-RP/pkg/api/validate"
 	"github.com/Azure/ARO-RP/pkg/util/version"
 	"github.com/Azure/ARO-RP/test/validate"
 )
 
 type validateTest struct {
 	name                string
-	clusterName         *string
-	location            *string
 	current             func(oc *OpenShiftCluster)
 	modify              func(oc *OpenShiftCluster)
 	requireD2sV3Workers bool
@@ -39,23 +35,20 @@ const (
 
 var (
 	subscriptionID = "00000000-0000-0000-0000-000000000000"
+	id             = fmt.Sprintf("/subscriptions/%s/resourcegroups/resourceGroup/providers/microsoft.redhatopenshift/openshiftclusters/resourceName", subscriptionID)
 )
 
-func getResourceID(clusterName string) string {
-	return fmt.Sprintf("/subscriptions/%s/resourcegroups/resourceGroup/providers/microsoft.redhatopenshift/openshiftclusters/%s", subscriptionID, clusterName)
-}
-
-func validOpenShiftCluster(name, location string) *OpenShiftCluster {
+func validOpenShiftCluster() *OpenShiftCluster {
 	timestamp, err := time.Parse(time.RFC3339, "2021-01-23T12:34:54.0000000Z")
 	if err != nil {
 		panic(err)
 	}
 
 	oc := &OpenShiftCluster{
-		ID:       getResourceID(name),
-		Name:     name,
+		ID:       id,
+		Name:     "resourceName",
 		Type:     "Microsoft.RedHatOpenShift/OpenShiftClusters",
-		Location: location,
+		Location: "location",
 		Tags: Tags{
 			"key": "value",
 		},
@@ -124,31 +117,22 @@ func runTests(t *testing.T, mode testMode, tests []*validateTest) {
 	t.Run(string(mode), func(t *testing.T) {
 		for _, tt := range tests {
 			t.Run(tt.name, func(t *testing.T) {
-				// default values if not set
-				if tt.location == nil {
-					tt.location = to.StringPtr("location")
-				}
-
-				if tt.clusterName == nil {
-					tt.clusterName = to.StringPtr("resourceName")
-				}
-
 				v := &openShiftClusterStaticValidator{
-					location:            *tt.location,
+					location:            "location",
 					domain:              "location.aroapp.io",
 					requireD2sV3Workers: tt.requireD2sV3Workers,
-					resourceID:          getResourceID(*tt.clusterName),
+					resourceID:          id,
 					r: azure.Resource{
 						SubscriptionID: subscriptionID,
 						ResourceGroup:  "resourceGroup",
 						Provider:       "Microsoft.RedHatOpenShift",
 						ResourceType:   "openshiftClusters",
-						ResourceName:   *tt.clusterName,
+						ResourceName:   "resourceName",
 					},
 				}
 
 				validOCForTest := func() *OpenShiftCluster {
-					oc := validOpenShiftCluster(*tt.clusterName, *tt.location)
+					oc := validOpenShiftCluster()
 					if tt.current != nil {
 						tt.current(oc)
 					}
@@ -193,11 +177,7 @@ func runTests(t *testing.T, mode testMode, tests []*validateTest) {
 }
 
 func TestOpenShiftClusterStaticValidate(t *testing.T) {
-	clusterName19 := "19characters-aaaaaa"
-	clusterName30 := "thisis30characterslong-aaaaaa"
-	nonZonalRegion := "australiasoutheast"
-
-	commonTests := []*validateTest{
+	tests := []*validateTest{
 		{
 			name: "valid",
 		},
@@ -229,38 +209,10 @@ func TestOpenShiftClusterStaticValidate(t *testing.T) {
 			},
 			wantErr: "400: InvalidParameter: location: The provided location 'invalid' is invalid.",
 		},
-		{
-			name:        "valid - zonal regions can exceed max cluster name length",
-			clusterName: &clusterName30,
-		},
 	}
 
-	createTests := []*validateTest{
-		{
-			name:        "invalid - non-zonal regions cannot exceed max cluster name length on cluster create",
-			clusterName: &clusterName30,
-			location:    &nonZonalRegion,
-			wantErr:     fmt.Sprintf("400: InvalidParameter: name: The provided cluster name '%s' exceeds the maximum cluster name length of '%d'.", clusterName30, apiValidate.MaxClusterNameLength),
-		},
-		{
-			name:        "valid - non-zonal region less than max cluster name length",
-			clusterName: &clusterName19,
-			location:    &nonZonalRegion,
-		},
-	}
-
-	updateTests := []*validateTest{
-		{
-			name:        "valid - existing cluster names > max cluster name length still work on cluster update",
-			clusterName: &clusterName30,
-			location:    &nonZonalRegion,
-		},
-	}
-
-	runTests(t, testModeCreate, commonTests)
-	runTests(t, testModeUpdate, commonTests)
-	runTests(t, testModeCreate, createTests)
-	runTests(t, testModeUpdate, updateTests)
+	runTests(t, testModeCreate, tests)
+	runTests(t, testModeUpdate, tests)
 }
 
 func TestOpenShiftClusterStaticValidateProperties(t *testing.T) {
diff --git a/pkg/api/v20220401/openshiftcluster_validatestatic.go b/pkg/api/v20220401/openshiftcluster_validatestatic.go
index db0b44832..6e10a5cf4 100644
--- a/pkg/api/v20220401/openshiftcluster_validatestatic.go
+++ b/pkg/api/v20220401/openshiftcluster_validatestatic.go
@@ -71,13 +71,6 @@ func (sv *openShiftClusterStaticValidator) validate(oc *OpenShiftCluster, isCrea
 		return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "location", "The provided location '%s' is invalid.", oc.Location)
 	}
 
-	// TODO: remove the VM name validation after https://bugzilla.redhat.com/show_bug.cgi?id=2093044 is resolved
-	if isCreate {
-		if !validate.OpenShiftClusterNameLength(oc.Name, oc.Location) {
-			return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "name", "The provided cluster name '%s' exceeds the maximum cluster name length of '%d'.", oc.Name, validate.MaxClusterNameLength)
-		}
-	}
-
 	return sv.validateProperties("properties", &oc.Properties, isCreate)
 }
 
diff --git a/pkg/api/v20220401/openshiftcluster_validatestatic_test.go b/pkg/api/v20220401/openshiftcluster_validatestatic_test.go
index 3f2741bf5..f8dbe9c91 100644
--- a/pkg/api/v20220401/openshiftcluster_validatestatic_test.go
+++ b/pkg/api/v20220401/openshiftcluster_validatestatic_test.go
@@ -11,19 +11,15 @@ import (
 	"time"
 
 	"github.com/Azure/go-autorest/autorest/azure"
-	"github.com/Azure/go-autorest/autorest/to"
 	"github.com/gofrs/uuid"
 
 	"github.com/Azure/ARO-RP/pkg/api"
-	apiValidate "github.com/Azure/ARO-RP/pkg/api/validate"
 	"github.com/Azure/ARO-RP/pkg/util/version"
 	"github.com/Azure/ARO-RP/test/validate"
 )
 
 type validateTest struct {
 	name                string
-	clusterName         *string
-	location            *string
 	current             func(oc *OpenShiftCluster)
 	modify              func(oc *OpenShiftCluster)
 	requireD2sV3Workers bool
@@ -39,23 +35,20 @@ const (
 
 var (
 	subscriptionID = "00000000-0000-0000-0000-000000000000"
+	id             = fmt.Sprintf("/subscriptions/%s/resourcegroups/resourceGroup/providers/microsoft.redhatopenshift/openshiftclusters/resourceName", subscriptionID)
 )
 
-func getResourceID(clusterName string) string {
-	return fmt.Sprintf("/subscriptions/%s/resourcegroups/resourceGroup/providers/microsoft.redhatopenshift/openshiftclusters/%s", subscriptionID, clusterName)
-}
-
-func validOpenShiftCluster(name, location string) *OpenShiftCluster {
+func validOpenShiftCluster() *OpenShiftCluster {
 	timestamp, err := time.Parse(time.RFC3339, "2021-01-23T12:34:54.0000000Z")
 	if err != nil {
 		panic(err)
 	}
 
 	oc := &OpenShiftCluster{
-		ID:       getResourceID(name),
-		Name:     name,
+		ID:       id,
+		Name:     "resourceName",
 		Type:     "Microsoft.RedHatOpenShift/OpenShiftClusters",
-		Location: location,
+		Location: "location",
 		Tags: Tags{
 			"key": "value",
 		},
@@ -124,31 +117,22 @@ func runTests(t *testing.T, mode testMode, tests []*validateTest) {
 	t.Run(string(mode), func(t *testing.T) {
 		for _, tt := range tests {
 			t.Run(tt.name, func(t *testing.T) {
-				// default values if not set
-				if tt.location == nil {
-					tt.location = to.StringPtr("location")
-				}
-
-				if tt.clusterName == nil {
-					tt.clusterName = to.StringPtr("resourceName")
-				}
-
 				v := &openShiftClusterStaticValidator{
-					location:            *tt.location,
+					location:            "location",
 					domain:              "location.aroapp.io",
 					requireD2sV3Workers: tt.requireD2sV3Workers,
-					resourceID:          getResourceID(*tt.clusterName),
+					resourceID:          id,
 					r: azure.Resource{
 						SubscriptionID: subscriptionID,
 						ResourceGroup:  "resourceGroup",
 						Provider:       "Microsoft.RedHatOpenShift",
 						ResourceType:   "openshiftClusters",
-						ResourceName:   *tt.clusterName,
+						ResourceName:   "resourceName",
 					},
 				}
 
 				validOCForTest := func() *OpenShiftCluster {
-					oc := validOpenShiftCluster(*tt.clusterName, *tt.location)
+					oc := validOpenShiftCluster()
 					if tt.current != nil {
 						tt.current(oc)
 					}
@@ -193,11 +177,7 @@ func runTests(t *testing.T, mode testMode, tests []*validateTest) {
 }
 
 func TestOpenShiftClusterStaticValidate(t *testing.T) {
-	clusterName19 := "19characters-aaaaaa"
-	clusterName30 := "thisis30characterslong-aaaaaa"
-	nonZonalRegion := "australiasoutheast"
-
-	commonTests := []*validateTest{
+	tests := []*validateTest{
 		{
 			name: "valid",
 		},
@@ -229,38 +209,10 @@ func TestOpenShiftClusterStaticValidate(t *testing.T) {
 			},
 			wantErr: "400: InvalidParameter: location: The provided location 'invalid' is invalid.",
 		},
-		{
-			name:        "valid - zonal regions can exceed max cluster name length",
-			clusterName: &clusterName30,
-		},
 	}
 
-	createTests := []*validateTest{
-		{
-			name:        "invalid - non-zonal regions cannot exceed max cluster name length on cluster create",
-			clusterName: &clusterName30,
-			location:    &nonZonalRegion,
-			wantErr:     fmt.Sprintf("400: InvalidParameter: name: The provided cluster name '%s' exceeds the maximum cluster name length of '%d'.", clusterName30, apiValidate.MaxClusterNameLength),
-		},
-		{
-			name:        "valid - non-zonal region less than max cluster name length",
-			clusterName: &clusterName19,
-			location:    &nonZonalRegion,
-		},
-	}
-
-	updateTests := []*validateTest{
-		{
-			name:        "valid - existing cluster names > max cluster name length still work on cluster update",
-			clusterName: &clusterName30,
-			location:    &nonZonalRegion,
-		},
-	}
-
-	runTests(t, testModeCreate, commonTests)
-	runTests(t, testModeUpdate, commonTests)
-	runTests(t, testModeCreate, createTests)
-	runTests(t, testModeUpdate, updateTests)
+	runTests(t, testModeCreate, tests)
+	runTests(t, testModeUpdate, tests)
 }
 
 func TestOpenShiftClusterStaticValidateProperties(t *testing.T) {
diff --git a/pkg/api/v20220904/openshiftcluster_validatestatic.go b/pkg/api/v20220904/openshiftcluster_validatestatic.go
index 14ff66d6b..61ebd526b 100644
--- a/pkg/api/v20220904/openshiftcluster_validatestatic.go
+++ b/pkg/api/v20220904/openshiftcluster_validatestatic.go
@@ -71,13 +71,6 @@ func (sv *openShiftClusterStaticValidator) validate(oc *OpenShiftCluster, isCrea
 		return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "location", "The provided location '%s' is invalid.", oc.Location)
 	}
 
-	// TODO: remove the VM name validation after https://bugzilla.redhat.com/show_bug.cgi?id=2093044 is resolved
-	if isCreate {
-		if !validate.OpenShiftClusterNameLength(oc.Name, oc.Location) {
-			return api.NewCloudError(http.StatusBadRequest, api.CloudErrorCodeInvalidParameter, "name", "The provided cluster name '%s' exceeds the maximum cluster name length of '%d'.", oc.Name, validate.MaxClusterNameLength)
-		}
-	}
-
 	return sv.validateProperties("properties", &oc.Properties, isCreate)
 }
 
diff --git a/pkg/api/v20220904/openshiftcluster_validatestatic_test.go b/pkg/api/v20220904/openshiftcluster_validatestatic_test.go
index 4edd8443f..9141b183b 100644
--- a/pkg/api/v20220904/openshiftcluster_validatestatic_test.go
+++ b/pkg/api/v20220904/openshiftcluster_validatestatic_test.go
@@ -15,7 +15,6 @@ import (
 	"github.com/gofrs/uuid"
 
 	"github.com/Azure/ARO-RP/pkg/api"
-	apiValidate "github.com/Azure/ARO-RP/pkg/api/validate"
 	"github.com/Azure/ARO-RP/pkg/util/version"
 	"github.com/Azure/ARO-RP/test/validate"
 )
@@ -193,10 +192,6 @@ func runTests(t *testing.T, mode testMode, tests []*validateTest) {
 }
 
 func TestOpenShiftClusterStaticValidate(t *testing.T) {
-	clusterName19 := "19characters-aaaaaa"
-	clusterName30 := "thisis30characterslong-aaaaaa"
-	nonZonalRegion := "australiasoutheast"
-
 	commonTests := []*validateTest{
 		{
 			name: "valid",
@@ -229,38 +224,10 @@ func TestOpenShiftClusterStaticValidate(t *testing.T) {
 			},
 			wantErr: "400: InvalidParameter: location: The provided location 'invalid' is invalid.",
 		},
-		{
-			name:        "valid - zonal regions can exceed max cluster name length",
-			clusterName: &clusterName30,
-		},
-	}
-
-	createTests := []*validateTest{
-		{
-			name:        "invalid - non-zonal regions cannot exceed max cluster name length on cluster create",
-			clusterName: &clusterName30,
-			location:    &nonZonalRegion,
-			wantErr:     fmt.Sprintf("400: InvalidParameter: name: The provided cluster name '%s' exceeds the maximum cluster name length of '%d'.", clusterName30, apiValidate.MaxClusterNameLength),
-		},
-		{
-			name:        "valid - non-zonal region less than max cluster name length",
-			clusterName: &clusterName19,
-			location:    &nonZonalRegion,
-		},
-	}
-
-	updateTests := []*validateTest{
-		{
-			name:        "valid - existing cluster names > max cluster name length still work on cluster update",
-			clusterName: &clusterName30,
-			location:    &nonZonalRegion,
-		},
 	}
 
 	runTests(t, testModeCreate, commonTests)
 	runTests(t, testModeUpdate, commonTests)
-	runTests(t, testModeCreate, createTests)
-	runTests(t, testModeUpdate, updateTests)
 }
 
 func TestOpenShiftClusterStaticValidateProperties(t *testing.T) {
diff --git a/pkg/api/validate/openshiftcluster_test.go b/pkg/api/validate/openshiftcluster_test.go
deleted file mode 100644
index 6095782dc..000000000
--- a/pkg/api/validate/openshiftcluster_test.go
+++ /dev/null
@@ -1,56 +0,0 @@
-package validate
-
-import (
-	"testing"
-)
-
-// Copyright (c) Microsoft Corporation.
-// Licensed under the Apache License 2.0.
-
-func TestOpenShiftClusterName(t *testing.T) {
-	clusterName19 := "19characters-aaaaaa"
-	clusterName30 := "thisis30characterslong-aaaaaa"
-
-	for _, tt := range []struct {
-		name          string
-		clusterName   string
-		location      string
-		desiredResult bool
-	}{
-		{
-			name:          "valid - zoned region > maxLength",
-			clusterName:   clusterName30,
-			location:      "eastus",
-			desiredResult: true,
-		},
-		{
-			name:          "valid - zoned region <= maxLength",
-			clusterName:   clusterName19,
-			location:      "eastus",
-			desiredResult: true,
-		},
-		{
-			name:          "valid - non-zoned region <= maxLength",
-			clusterName:   clusterName19,
-			location:      "australiasoutheast",
-			desiredResult: true,
-		},
-		{
-			name:        "invalid - non-zoned region > maxLength",
-			clusterName: clusterName30,
-			location:    "australiasoutheast",
-		},
-		{
-			name:        "invalid - non-zoned region > maxLength",
-			clusterName: clusterName30,
-			location:    "WESTCENTRALUS",
-		},
-	} {
-		t.Run(tt.name, func(t *testing.T) {
-			isValid := OpenShiftClusterNameLength(tt.clusterName, tt.location)
-			if isValid != tt.desiredResult {
-				t.Errorf("Got %v, wanted %v, for cluster name '%s' in region '%s'", isValid, tt.desiredResult, tt.clusterName, tt.location)
-			}
-		})
-	}
-}
diff --git a/pkg/cluster/adminupdate_test.go b/pkg/cluster/adminupdate_test.go
index cc32a86f0..dde8d272e 100644
--- a/pkg/cluster/adminupdate_test.go
+++ b/pkg/cluster/adminupdate_test.go
@@ -88,6 +88,8 @@ func TestAdminUpdateSteps(t *testing.T) {
 				"[Action initializeOperatorDeployer-fm]",
 				"[Action ensureAROOperator-fm]",
 				"[Condition aroDeploymentReady-fm, timeout 20m0s]",
+				"[Action hiveCreateNamespace-fm]",
+				"[Action hiveEnsureResources-fm]",
 				"[Action updateProvisionedBy-fm]",
 			},
 		},
@@ -127,6 +129,8 @@ func TestAdminUpdateSteps(t *testing.T) {
 				"[Action initializeOperatorDeployer-fm]",
 				"[Action ensureAROOperator-fm]",
 				"[Condition aroDeploymentReady-fm, timeout 20m0s]",
+				"[Action hiveCreateNamespace-fm]",
+				"[Action hiveEnsureResources-fm]",
 				"[Action updateProvisionedBy-fm]",
 			},
 		},
diff --git a/pkg/frontend/asyncoperationresult_get_test.go b/pkg/frontend/asyncoperationresult_get_test.go
index 378d749bb..8b468b30e 100644
--- a/pkg/frontend/asyncoperationresult_get_test.go
+++ b/pkg/frontend/asyncoperationresult_get_test.go
@@ -96,6 +96,17 @@ func TestGetAsyncOperationResult(t *testing.T) {
 			wantAsync:      true,
 			wantStatusCode: http.StatusAccepted,
 		},
+		{
+			name: "operation exists in db, but no subscription match",
+			fixture: func(f *testdatabase.Fixture) {
+				f.AddAsyncOperationDocuments(&api.AsyncOperationDocument{
+					ID:                  mockOpID,
+					OpenShiftClusterKey: strings.ToLower(testdatabase.GetResourcePath("33333333-3333-3333-3333-333333333333", "fakeClusterID")),
+				})
+			},
+			wantStatusCode: http.StatusNotFound,
+			wantError:      `404: NotFound: : The entity was not found.`,
+		},
 		{
 			name:           "operation not found in db",
 			wantStatusCode: http.StatusNotFound,
diff --git a/pkg/frontend/asyncoperationsstatus_get_test.go b/pkg/frontend/asyncoperationsstatus_get_test.go
index d5cee0efc..64516011b 100644
--- a/pkg/frontend/asyncoperationsstatus_get_test.go
+++ b/pkg/frontend/asyncoperationsstatus_get_test.go
@@ -139,6 +139,29 @@ func TestGetAsyncOperationsStatus(t *testing.T) {
 				},
 			},
 		},
+		{
+			name: "operation exists in db, but no subscription match",
+			fixture: func(f *testdatabase.Fixture) {
+				f.AddAsyncOperationDocuments(&api.AsyncOperationDocument{
+					ID:                  mockOpID,
+					OpenShiftClusterKey: strings.ToLower(testdatabase.GetResourcePath("33333333-3333-3333-3333-333333333333", "resource1")),
+					AsyncOperation: &api.AsyncOperation{
+						ID:                       "fakeoppath",
+						Name:                     mockOpID,
+						InitialProvisioningState: api.ProvisioningStateCreating,
+						ProvisioningState:        api.ProvisioningStateFailed,
+						StartTime:                mockOpStartTime,
+						EndTime:                  &mockOpEndTime,
+						Error: &api.CloudErrorBody{
+							Code:    api.CloudErrorCodeInternalServerError,
+							Message: "Some error.",
+						},
+					},
+				})
+			},
+			wantStatusCode: http.StatusNotFound,
+			wantError:      `404: NotFound: : The entity was not found.`,
+		},
 		{
 			name:           "internal error",
 			dbError:        &cosmosdb.Error{Code: "500", Message: "blorb"},