Repository: openshift/hypershift
Pull request #5965: OCPBUGS-54439: Change KASGoMemLimit to a string pointer type
Author: login: bryan-cox
Labels: name: approved
description: Indicates a PR has been approved by an approver from all required OWNERS files.
name: lgtm
description: Indicates that a PR is ready to be merged.
name: jira/valid-bug
description: Indicates that a referenced Jira bug is valid for the branch this PR is targeting.
name: jira/valid-reference
description: Indicates that this PR references a valid Jira ticket of any type.
name: area/control-plane-operator
description: Indicates the PR includes changes for the control plane operator - in an OCP release
name: area/hypershift-operator
description: Indicates the PR includes changes for the hypershift operator and API - outside an OCP release
name: area/cli
description: Indicates the PR includes changes for CLI
name: area/api
description: Indicates the PR includes changes for the API
Created: 2025-04-02T17:36:48Z | Merged: 2025-04-03T21:31:12Z

**What this PR does / why we need it**:
This PR changes the KASGoMemLimit to a string pointer type instead of a k8s api/resource Quantity pointer type and updates related unit tests.

**Which issue(s) this PR fixes** *(optional, use `fixes #<issue_number>(, fixes #<issue_number>, ...)` format, where issue_number might be a GitHub issue, or a Jira story*:
Fixes #

**Checklist**
- [ ] Subject and description added to both, commit and PR.
- [ ] Relevant issues have been referenced.
- [ ] This change includes docs. 
- [ ] This change includes unit tests.


Diff:
diff --git a/api/scheduling/v1alpha1/clustersizingconfiguration_types.go b/api/scheduling/v1alpha1/clustersizingconfiguration_types.go
index a41efcd228b..d4944fe80fa 100644
--- a/api/scheduling/v1alpha1/clustersizingconfiguration_types.go
+++ b/api/scheduling/v1alpha1/clustersizingconfiguration_types.go
@@ -109,9 +109,13 @@ type NodeCountCriteria struct {
 type Effects struct {
 
 	// +kubebuilder:validation:Optional
+	// +kubebuilder:validation:Pattern=`^\d+(B|KiB|MiB|GiB|TiB)?$`
+	// +kubebuilder:validation:MaxLength=20
 
 	// KASGoMemLimit is the value to set for the $GOMEMLIMIT of the Kube APIServer container
-	KASGoMemLimit *resource.Quantity `json:"kasGoMemLimit,omitempty"`
+	// Expected format is a number followed by a unit (B, KiB, MiB, GiB, TiB). See the Go runtime library for more
+	// information on the format - https://pkg.go.dev/runtime#hdr-Environment_Variables.
+	KASGoMemLimit *string `json:"kasGoMemLimit,omitempty"`
 
 	// +kubebuilder:validation:Optional
 
diff --git a/api/scheduling/v1alpha1/zz_generated.deepcopy.go b/api/scheduling/v1alpha1/zz_generated.deepcopy.go
index 117d2e27b45..cc45efe1ba8 100644
--- a/api/scheduling/v1alpha1/zz_generated.deepcopy.go
+++ b/api/scheduling/v1alpha1/zz_generated.deepcopy.go
@@ -156,8 +156,8 @@ func (in *Effects) DeepCopyInto(out *Effects) {
 	*out = *in
 	if in.KASGoMemLimit != nil {
 		in, out := &in.KASGoMemLimit, &out.KASGoMemLimit
-		x := (*in).DeepCopy()
-		*out = &x
+		*out = new(string)
+		**out = **in
 	}
 	if in.ControlPlanePriorityClassName != nil {
 		in, out := &in.ControlPlanePriorityClassName, &out.ControlPlanePriorityClassName
diff --git a/client/applyconfiguration/scheduling/v1alpha1/effects.go b/client/applyconfiguration/scheduling/v1alpha1/effects.go
index ba77d9bdaaf..e3d5e8846b4 100644
--- a/client/applyconfiguration/scheduling/v1alpha1/effects.go
+++ b/client/applyconfiguration/scheduling/v1alpha1/effects.go
@@ -18,14 +18,13 @@ limitations under the License.
 package v1alpha1
 
 import (
-	resource "k8s.io/apimachinery/pkg/api/resource"
 	v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 )
 
 // EffectsApplyConfiguration represents an declarative configuration of the Effects type for use
 // with apply.
 type EffectsApplyConfiguration struct {
-	KASGoMemLimit                   *resource.Quantity                  `json:"kasGoMemLimit,omitempty"`
+	KASGoMemLimit                   *string                             `json:"kasGoMemLimit,omitempty"`
 	ControlPlanePriorityClassName   *string                             `json:"controlPlanePriorityClassName,omitempty"`
 	EtcdPriorityClassName           *string                             `json:"etcdPriorityClassName,omitempty"`
 	APICriticalPriorityClassName    *string                             `json:"APICriticalPriorityClassName,omitempty"`
@@ -44,7 +43,7 @@ func Effects() *EffectsApplyConfiguration {
 // WithKASGoMemLimit sets the KASGoMemLimit field in the declarative configuration to the given value
 // and returns the receiver, so that objects can be built by chaining "With" function invocations.
 // If called multiple times, the KASGoMemLimit field is set to the value of the last call.
-func (b *EffectsApplyConfiguration) WithKASGoMemLimit(value resource.Quantity) *EffectsApplyConfiguration {
+func (b *EffectsApplyConfiguration) WithKASGoMemLimit(value string) *EffectsApplyConfiguration {
 	b.KASGoMemLimit = &value
 	return b
 }
diff --git a/cmd/install/assets/hypershift-operator/scheduling.hypershift.openshift.io_clustersizingconfigurations.yaml b/cmd/install/assets/hypershift-operator/scheduling.hypershift.openshift.io_clustersizingconfigurations.yaml
index f0d0031e4e0..a46c28fd1ef 100644
--- a/cmd/install/assets/hypershift-operator/scheduling.hypershift.openshift.io_clustersizingconfigurations.yaml
+++ b/cmd/install/assets/hypershift-operator/scheduling.hypershift.openshift.io_clustersizingconfigurations.yaml
@@ -132,13 +132,13 @@ spec:
                             to use for etcd pods
                           type: string
                         kasGoMemLimit:
-                          anyOf:
-                          - type: integer
-                          - type: string
-                          description: KASGoMemLimit is the value to set for the $GOMEMLIMIT
-                            of the Kube APIServer container
-                          pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
-                          x-kubernetes-int-or-string: true
+                          description: |-
+                            KASGoMemLimit is the value to set for the $GOMEMLIMIT of the Kube APIServer container
+                            Expected format is a number followed by a unit (B, KiB, MiB, GiB, TiB). See the Go runtime library for more
+                            information on the format - https://pkg.go.dev/runtime#hdr-Environment_Variables.
+                          maxLength: 20
+                          pattern: ^\d+(B|KiB|MiB|GiB|TiB)?$
+                          type: string
                         machineHealthCheckTimeout:
                           description: |-
                             MachineHealthCheckTimeout specifies an optional timeout for machinehealthchecks created
diff --git a/control-plane-operator/controllers/hostedcontrolplane/hostedcontrolplane_controller.go b/control-plane-operator/controllers/hostedcontrolplane/hostedcontrolplane_controller.go
index 6513d5a67c7..516f9e7f147 100644
--- a/control-plane-operator/controllers/hostedcontrolplane/hostedcontrolplane_controller.go
+++ b/control-plane-operator/controllers/hostedcontrolplane/hostedcontrolplane_controller.go
@@ -5718,7 +5718,7 @@ func setKASCustomKubeconfigStatus(ctx context.Context, hcp *hyperv1.HostedContro
 			Key:  DefaultAdminKubeconfigKey,
 		}
 	} else {
-		// Cleanning up custom kubeconfig status
+		// Cleaning up custom kubeconfig status
 		hcp.Status.CustomKubeconfig = nil
 	}
 
diff --git a/hypershift-operator/controllers/scheduler/aws/dedicated_request_serving_nodes_test.go b/hypershift-operator/controllers/scheduler/aws/dedicated_request_serving_nodes_test.go
index 56ec5cc857a..7c55c7bf194 100644
--- a/hypershift-operator/controllers/scheduler/aws/dedicated_request_serving_nodes_test.go
+++ b/hypershift-operator/controllers/scheduler/aws/dedicated_request_serving_nodes_test.go
@@ -15,7 +15,6 @@ import (
 	appsv1 "k8s.io/api/apps/v1"
 	corev1 "k8s.io/api/core/v1"
 	apierrors "k8s.io/apimachinery/pkg/api/errors"
-	"k8s.io/apimachinery/pkg/api/resource"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/utils/ptr"
@@ -291,15 +290,6 @@ func TestHostedClusterScheduler(t *testing.T) {
 }
 
 func TestHostedClusterSchedulerAndSizer(t *testing.T) {
-
-	mustQty := func(qty string) *resource.Quantity {
-		result, err := resource.ParseQuantity(qty)
-		if err != nil {
-			panic(err)
-		}
-		return &result
-	}
-
 	sizingConfig := &schedulingv1alpha1.ClusterSizingConfiguration{
 		ObjectMeta: metav1.ObjectMeta{
 			Name: "cluster",
@@ -316,7 +306,7 @@ func TestHostedClusterSchedulerAndSizer(t *testing.T) {
 						Placeholders: 2,
 					},
 					Effects: &schedulingv1alpha1.Effects{
-						KASGoMemLimit: mustQty("1Gi"),
+						KASGoMemLimit: ptr.To("1GiB"),
 					},
 				},
 				{
@@ -326,7 +316,7 @@ func TestHostedClusterSchedulerAndSizer(t *testing.T) {
 						To:   ptr.To(uint32(2)),
 					},
 					Effects: &schedulingv1alpha1.Effects{
-						KASGoMemLimit: mustQty("2Gi"),
+						KASGoMemLimit: ptr.To("2GiB"),
 					},
 				},
 				{
@@ -336,7 +326,7 @@ func TestHostedClusterSchedulerAndSizer(t *testing.T) {
 						To:   nil,
 					},
 					Effects: &schedulingv1alpha1.Effects{
-						KASGoMemLimit: mustQty("3Gi"),
+						KASGoMemLimit: ptr.To("3GiB"),
 					},
 				},
 			},
@@ -382,7 +372,7 @@ func TestHostedClusterSchedulerAndSizer(t *testing.T) {
 		hc.Annotations[hyperv1.RequestServingNodeAdditionalSelectorAnnotation] = fmt.Sprintf("%s=%s", hyperv1.NodeSizeLabel, sizeLabel)
 		for _, sizeCfg := range sizingConfig.Spec.Sizes {
 			if sizeCfg.Name == sizeLabel {
-				hc.Annotations[hyperv1.KubeAPIServerGOMemoryLimitAnnotation] = sizeCfg.Effects.KASGoMemLimit.String()
+				hc.Annotations[hyperv1.KubeAPIServerGOMemoryLimitAnnotation] = ptr.Deref(sizeCfg.Effects.KASGoMemLimit, "")
 				break
 			}
 		}
@@ -641,7 +631,7 @@ func TestHostedClusterSchedulerAndSizer(t *testing.T) {
 				g.Expect(actual.Annotations[hyperv1.RequestServingNodeAdditionalSelectorAnnotation]).To(Equal(fmt.Sprintf("%s=%s", hyperv1.NodeSizeLabel, sizeLabel)))
 				for _, sizeCfg := range sizingConfig.Spec.Sizes {
 					if sizeCfg.Name == sizeLabel {
-						g.Expect(actual.Annotations[hyperv1.KubeAPIServerGOMemoryLimitAnnotation]).To(Equal(sizeCfg.Effects.KASGoMemLimit.String()))
+						g.Expect(actual.Annotations[hyperv1.KubeAPIServerGOMemoryLimitAnnotation]).To(Equal(ptr.Deref(sizeCfg.Effects.KASGoMemLimit, "")))
 						break
 					}
 				}
diff --git a/hypershift-operator/controllers/scheduler/azure/controllers_test.go b/hypershift-operator/controllers/scheduler/azure/controllers_test.go
index 229d197e73c..d81d5e6c139 100644
--- a/hypershift-operator/controllers/scheduler/azure/controllers_test.go
+++ b/hypershift-operator/controllers/scheduler/azure/controllers_test.go
@@ -11,7 +11,6 @@ import (
 	schedulingv1alpha1 "github.com/openshift/hypershift/api/scheduling/v1alpha1"
 	hyperapi "github.com/openshift/hypershift/support/api"
 
-	"k8s.io/apimachinery/pkg/api/resource"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
 	"k8s.io/utils/ptr"
 
@@ -21,14 +20,6 @@ import (
 )
 
 func TestReconcile(t *testing.T) {
-	mustQty := func(qty string) *resource.Quantity {
-		result, err := resource.ParseQuantity(qty)
-		if err != nil {
-			panic(err)
-		}
-		return &result
-	}
-
 	sizingConfig := &schedulingv1alpha1.ClusterSizingConfiguration{
 		ObjectMeta: metav1.ObjectMeta{
 			Name: "cluster",
@@ -42,7 +33,7 @@ func TestReconcile(t *testing.T) {
 						To:   ptr.To(uint32(1)),
 					},
 					Effects: &schedulingv1alpha1.Effects{
-						KASGoMemLimit: mustQty("1Gi"),
+						KASGoMemLimit: ptr.To("1GiB"),
 					},
 				},
 				{
@@ -52,7 +43,7 @@ func TestReconcile(t *testing.T) {
 						To:   ptr.To(uint32(2)),
 					},
 					Effects: &schedulingv1alpha1.Effects{
-						KASGoMemLimit: mustQty("2Gi"),
+						KASGoMemLimit: ptr.To("2GiB"),
 					},
 				},
 				{
@@ -62,7 +53,7 @@ func TestReconcile(t *testing.T) {
 						To:   nil,
 					},
 					Effects: &schedulingv1alpha1.Effects{
-						KASGoMemLimit: mustQty("3Gi"),
+						KASGoMemLimit: ptr.To("3GiB"),
 					},
 				},
 			},
@@ -163,7 +154,7 @@ func TestReconcile(t *testing.T) {
 			expectError:   false,
 			expectRequeue: false,
 			expectAnnotations: map[string]string{
-				hyperv1.KubeAPIServerGOMemoryLimitAnnotation: "1Gi",
+				hyperv1.KubeAPIServerGOMemoryLimitAnnotation: "1GiB",
 			},
 		},
 	}
diff --git a/hypershift-operator/controllers/scheduler/util/scheduler.go b/hypershift-operator/controllers/scheduler/util/scheduler.go
index 445966f4034..3e988f78e8b 100644
--- a/hypershift-operator/controllers/scheduler/util/scheduler.go
+++ b/hypershift-operator/controllers/scheduler/util/scheduler.go
@@ -10,6 +10,7 @@ import (
 
 	corev1 "k8s.io/api/core/v1"
 	"k8s.io/apimachinery/pkg/api/equality"
+	"k8s.io/utils/ptr"
 
 	"sigs.k8s.io/controller-runtime/pkg/client"
 )
@@ -37,7 +38,7 @@ func setHostedClusterSchedulingAnnotations(hc *hyperv1.HostedCluster, size strin
 
 	goMemLimit := ""
 	if sizeConfig.Effects != nil && sizeConfig.Effects.KASGoMemLimit != nil {
-		goMemLimit = sizeConfig.Effects.KASGoMemLimit.String()
+		goMemLimit = ptr.Deref(sizeConfig.Effects.KASGoMemLimit, "")
 	}
 
 	// For AWS try and get the goMem limit from the nodes
diff --git a/hypershift-operator/controllers/scheduler/util/scheduler_test.go b/hypershift-operator/controllers/scheduler/util/scheduler_test.go
index fe5808e2cb2..570c809bb85 100644
--- a/hypershift-operator/controllers/scheduler/util/scheduler_test.go
+++ b/hypershift-operator/controllers/scheduler/util/scheduler_test.go
@@ -48,7 +48,7 @@ func TestSetHostedClusterSchedulingAnnotations(t *testing.T) {
 						{
 							Name: "medium",
 							Effects: &schedulingv1alpha1.Effects{
-								KASGoMemLimit: resource.NewQuantity(1024, resource.BinarySI),
+								KASGoMemLimit: ptr.To("1KiB"),
 							},
 						},
 					},
@@ -59,7 +59,7 @@ func TestSetHostedClusterSchedulingAnnotations(t *testing.T) {
 				ObjectMeta: metav1.ObjectMeta{
 					Annotations: map[string]string{
 						hyperv1.HostedClusterScheduledAnnotation:     "true",
-						hyperv1.KubeAPIServerGOMemoryLimitAnnotation: "1Ki",
+						hyperv1.KubeAPIServerGOMemoryLimitAnnotation: "1KiB",
 					},
 				},
 			},
@@ -79,7 +79,7 @@ func TestSetHostedClusterSchedulingAnnotations(t *testing.T) {
 						{
 							Name: "large",
 							Effects: &schedulingv1alpha1.Effects{
-								KASGoMemLimit: resource.NewQuantity(2048, resource.BinarySI),
+								KASGoMemLimit: ptr.To("2048MiB"),
 							},
 						},
 					},
diff --git a/vendor/github.com/openshift/hypershift/api/scheduling/v1alpha1/clustersizingconfiguration_types.go b/vendor/github.com/openshift/hypershift/api/scheduling/v1alpha1/clustersizingconfiguration_types.go
index a41efcd228b..d4944fe80fa 100644
--- a/vendor/github.com/openshift/hypershift/api/scheduling/v1alpha1/clustersizingconfiguration_types.go
+++ b/vendor/github.com/openshift/hypershift/api/scheduling/v1alpha1/clustersizingconfiguration_types.go
@@ -109,9 +109,13 @@ type NodeCountCriteria struct {
 type Effects struct {
 
 	// +kubebuilder:validation:Optional
+	// +kubebuilder:validation:Pattern=`^\d+(B|KiB|MiB|GiB|TiB)?$`
+	// +kubebuilder:validation:MaxLength=20
 
 	// KASGoMemLimit is the value to set for the $GOMEMLIMIT of the Kube APIServer container
-	KASGoMemLimit *resource.Quantity `json:"kasGoMemLimit,omitempty"`
+	// Expected format is a number followed by a unit (B, KiB, MiB, GiB, TiB). See the Go runtime library for more
+	// information on the format - https://pkg.go.dev/runtime#hdr-Environment_Variables.
+	KASGoMemLimit *string `json:"kasGoMemLimit,omitempty"`
 
 	// +kubebuilder:validation:Optional
 
diff --git a/vendor/github.com/openshift/hypershift/api/scheduling/v1alpha1/zz_generated.deepcopy.go b/vendor/github.com/openshift/hypershift/api/scheduling/v1alpha1/zz_generated.deepcopy.go
index 117d2e27b45..cc45efe1ba8 100644
--- a/vendor/github.com/openshift/hypershift/api/scheduling/v1alpha1/zz_generated.deepcopy.go
+++ b/vendor/github.com/openshift/hypershift/api/scheduling/v1alpha1/zz_generated.deepcopy.go
@@ -156,8 +156,8 @@ func (in *Effects) DeepCopyInto(out *Effects) {
 	*out = *in
 	if in.KASGoMemLimit != nil {
 		in, out := &in.KASGoMemLimit, &out.KASGoMemLimit
-		x := (*in).DeepCopy()
-		*out = &x
+		*out = new(string)
+		**out = **in
 	}
 	if in.ControlPlanePriorityClassName != nil {
 		in, out := &in.ControlPlanePriorityClassName, &out.ControlPlanePriorityClassName


Reviews:
user: login: enxebre
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-03T14:10:53Z
user: login: bryan-cox
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-03T15:56:12Z

Review comments:
diff_hunk: @@ -111,7 +111,7 @@ type Effects struct {
 	// +kubebuilder:validation:Optional
 
 	// KASGoMemLimit is the value to set for the $GOMEMLIMIT of the Kube APIServer container
-	KASGoMemLimit *resource.Quantity `json:"kasGoMemLimit,omitempty"`
+	KASGoMemLimit *string `json:"kasGoMemLimit,omitempty"`
path: api/scheduling/v1alpha1/clustersizingconfiguration_types.go
user: login: enxebre
body: why does this need to be a pointer?
What happens if unset?
Can you please document in the field the expected format input?
Can you add cel validation for the above that doesn't break existing input in managed environments?
created_at: 2025-04-03T14:10:53Z
author_association: MEMBER
diff_hunk: @@ -111,7 +111,7 @@ type Effects struct {
 	// +kubebuilder:validation:Optional
 
 	// KASGoMemLimit is the value to set for the $GOMEMLIMIT of the Kube APIServer container
-	KASGoMemLimit *resource.Quantity `json:"kasGoMemLimit,omitempty"`
+	KASGoMemLimit *string `json:"kasGoMemLimit,omitempty"`
path: api/scheduling/v1alpha1/clustersizingconfiguration_types.go
user: login: bryan-cox
body: Discussed offline a bit here - https://redhat-internal.slack.com/archives/G01QS0P2F6W/p1743690038033419?thread_ts=1743515322.678699&cid=G01QS0P2F6W

Just made it a pointer to be consistent with the other strings in the same struct.

Added expected format & CEL. 
created_at: 2025-04-03T15:56:12Z
author_association: MEMBER

PR comments:
user: login: openshift-ci-robot
created_at: 2025-04-02T17:36:54Z
body: @bryan-cox: This pull request references [Jira Issue OCPBUGS-54439](https://issues.redhat.com//browse/OCPBUGS-54439), which is invalid:
 - expected the bug to target the "4.19.0" version, but no target version was set

Comment <code>/jira refresh</code> to re-evaluate validity if changes to the Jira bug are made, or edit the title of this pull request to link to a different bug.

The bug has been updated to refer to the pull request using the external bug tracker.

<details>

In response to [this](https://github.com/openshift/hypershift/pull/5965):

>**What this PR does / why we need it**:
>This PR changes the KASGoMemLimit to a string pointer type instead of a k8s api/resource Quantity pointer type and updates related unit tests.
>
>**Which issue(s) this PR fixes** *(optional, use `fixes #<issue_number>(, fixes #<issue_number>, ...)` format, where issue_number might be a GitHub issue, or a Jira story*:
>Fixes #
>
>**Checklist**
>- [ ] Subject and description added to both, commit and PR.
>- [ ] Relevant issues have been referenced.
>- [ ] This change includes docs. 
>- [ ] This change includes unit tests.


Instructions for interacting with me using PR comments are available [here](https://prow.ci.openshift.org/command-help?repo=openshift%2Fhypershift).  If you have questions or suggestions related to my behavior, please file an issue against the [openshift-eng/jira-lifecycle-plugin](https://github.com/openshift-eng/jira-lifecycle-plugin/issues/new) repository.
</details>
author_association: NONE
user: login: bryan-cox
created_at: 2025-04-02T17:36:56Z
body: /test all
author_association: MEMBER
user: login: openshift-ci[bot]
created_at: 2025-04-02T17:37:15Z
body: Skipping CI for Draft Pull Request.
If you want CI signal for your change, please convert it to an actual PR.
You can still manually trigger a test run with `/test all`
author_association: CONTRIBUTOR
user: login: bryan-cox
created_at: 2025-04-02T17:37:29Z
body: /jira refresh
author_association: MEMBER
user: login: openshift-ci-robot
created_at: 2025-04-02T17:37:35Z
body: @bryan-cox: This pull request references [Jira Issue OCPBUGS-54439](https://issues.redhat.com//browse/OCPBUGS-54439), which is valid. The bug has been moved to the POST state.

<details><summary>3 validation(s) were run on this bug</summary>

* bug is open, matching expected state (open)
* bug target version (4.19.0) matches configured target version for branch (4.19.0)
* bug is in the state New, which is one of the valid states (NEW, ASSIGNED, POST)</details>

No GitHub users were found matching the public email listed for the QA contact in Jira (heli@redhat.com), skipping review request.

<details>

In response to [this](https://github.com/openshift/hypershift/pull/5965#issuecomment-2773270869):

>/jira refresh


Instructions for interacting with me using PR comments are available [here](https://prow.ci.openshift.org/command-help?repo=openshift%2Fhypershift).  If you have questions or suggestions related to my behavior, please file an issue against the [openshift-eng/jira-lifecycle-plugin](https://github.com/openshift-eng/jira-lifecycle-plugin/issues/new) repository.
</details>
author_association: NONE
user: login: bryan-cox
created_at: 2025-04-02T17:37:53Z
body: /area api
author_association: MEMBER
user: login: openshift-ci[bot]
created_at: 2025-04-02T17:38:54Z
body: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/openshift/hypershift/pull/5965#" title="Author self-approved">bryan-cox</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=openshift%2Fhypershift).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[OWNERS](https://github.com/openshift/hypershift/blob/main/OWNERS)~~ [bryan-cox]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
author_association: CONTRIBUTOR
user: login: bryan-cox
created_at: 2025-04-02T20:33:42Z
body: /retest
author_association: MEMBER
user: login: bryan-cox
created_at: 2025-04-03T13:52:25Z
body: /test verify
author_association: MEMBER
user: login: csrwng
created_at: 2025-04-03T16:39:13Z
body: /lgtm
author_association: CONTRIBUTOR
user: login: openshift-ci[bot]
created_at: 2025-04-03T19:37:29Z
body: @bryan-cox: all tests **passed!**


[Full PR test history](https://prow.ci.openshift.org/pr-history?org=openshift&repo=hypershift&pr=5965). [Your PR dashboard](https://prow.ci.openshift.org/pr?query=is:pr+state:open+author:bryan-cox).

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes-sigs/prow](https://github.com/kubernetes-sigs/prow/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
author_association: CONTRIBUTOR
user: login: csrwng
created_at: 2025-04-03T21:00:41Z
body: /override "Red Hat Konflux / hypershift-operator-main-enterprise-contract / hypershift-operator-main"
author_association: CONTRIBUTOR
user: login: openshift-ci[bot]
created_at: 2025-04-03T21:00:53Z
body: @csrwng: Overrode contexts on behalf of csrwng: Red Hat Konflux / hypershift-operator-main-enterprise-contract / hypershift-operator-main

<details>

In response to [this](https://github.com/openshift/hypershift/pull/5965#issuecomment-2776908598):

>/override "Red Hat Konflux / hypershift-operator-main-enterprise-contract / hypershift-operator-main"


Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes-sigs/prow](https://github.com/kubernetes-sigs/prow/issues/new?title=Prow%20issue:) repository.
</details>
author_association: CONTRIBUTOR
user: login: openshift-ci-robot
created_at: 2025-04-03T21:31:16Z
body: @bryan-cox: [Jira Issue OCPBUGS-54439](https://issues.redhat.com//browse/OCPBUGS-54439): All pull requests linked via external trackers have merged:
 * [openshift/hypershift#5965](https://github.com/openshift/hypershift/pull/5965)

[Jira Issue OCPBUGS-54439](https://issues.redhat.com//browse/OCPBUGS-54439) has been moved to the MODIFIED state.

<details>

In response to [this](https://github.com/openshift/hypershift/pull/5965):

>**What this PR does / why we need it**:
>This PR changes the KASGoMemLimit to a string pointer type instead of a k8s api/resource Quantity pointer type and updates related unit tests.
>
>**Which issue(s) this PR fixes** *(optional, use `fixes #<issue_number>(, fixes #<issue_number>, ...)` format, where issue_number might be a GitHub issue, or a Jira story*:
>Fixes #
>
>**Checklist**
>- [ ] Subject and description added to both, commit and PR.
>- [ ] Relevant issues have been referenced.
>- [ ] This change includes docs. 
>- [ ] This change includes unit tests.


Instructions for interacting with me using PR comments are available [here](https://prow.ci.openshift.org/command-help?repo=openshift%2Fhypershift).  If you have questions or suggestions related to my behavior, please file an issue against the [openshift-eng/jira-lifecycle-plugin](https://github.com/openshift-eng/jira-lifecycle-plugin/issues/new) repository.
</details>
author_association: NONE
user: login: openshift-bot
created_at: 2025-04-03T23:35:37Z
body: **[ART PR BUILD NOTIFIER]**

Distgit: hypershift
This PR has been included in build [ose-hypershift-container-v4.19.0-202504032241.p0.gcbda507.assembly.stream.el9](https://brewweb.engineering.redhat.com/brew/buildinfo?buildID=3589386).
All builds following this will include this PR.
author_association: NONE