Repository: kubernetes-sigs/cluster-api-provider-aws
Pull request #5418: 🐛 fix: efs & elb upgrade e2e tests
Author: login: richardcase
Labels: name: size/L
description: Denotes a PR that changes 100-499 lines, ignoring generated files.
name: approved
description: Indicates a PR has been approved by an approver from all required OWNERS files.
name: cncf-cla: yes
description: Indicates the PR's author has signed the CNCF CLA.
name: lgtm
description: "Looks good to me", indicates that a PR is ready to be merged.
name: kind/failing-test
description: Categorizes issue or PR as related to a consistently or frequently failing test.
name: release-note
description: Denotes a PR that will be considered when it comes time to generate release notes.
name: needs-priority
Created: 2025-03-19T14:06:42Z | Merged: 2025-03-21T14:36:31Z

**What type of PR is this?**

/kind failing-test

**What this PR does / why we need it**:

The EFS e2e test was breaking for 2 reasons:

1. Running out if disk space on the control plane nodes. It only had 8Gb so this has been increased to 16gb 
2. The workload being deployed to test EFS was using centos with has been discontinued for a long time now. So changed to use Ubuntu

The classic ELB upgrade test was failing because on upgrade of CAPA, the CAPA controller manager was restarted. From the logs i could see that the AWSCluster was no being reconciled and thats because the "old" and "new" versions were the same basic ion the predicate logic in SetupWithManager. Changed SetupWithManager to be more consistent with other CAPI infra providers. Also it was failing because of the wait introduced by the new `paused.EnsurePausedCondition` functionality but this is fixed in #5425

**Which issue(s) this PR fixes** *(optional, in `fixes #<issue number>(, fixes #<issue_number>, ...)` format, will close the issue(s) when PR gets merged)*:
Fixes #

**Special notes for your reviewer**:

**Checklist**:
<!-- Put an "X" character inside the brackets of each completed task. Some may be optional depending on the PR in which case these can be deleted 

 Please add an icon to the title of this PR, the icon will be either ⚠️ (:warning:, major or breaking changes), ✨ (:sparkles:, feature additions), 🐛 (:bug:, patch and bugfixes), 📖 (:book:, documentation or proposals), or 🌱 (:seedling:, minor or other) 
-->

- [x] squashed commits
- [ ] includes documentation
- [ ] includes emoji in title 
- [ ] adds unit tests
- [x] adds or updates e2e tests

**Release note**:
<!--  Write your release note:
1. Enter your extended release note in the below block. If the PR requires additional action from users switching to the new release, include the string "action required".
4. If no release note is required, just write "NONE".
-->
```release-note
Fix the EFS & classic elb e2e tests.
```



Diff:
diff --git a/controllers/awscluster_controller.go b/controllers/awscluster_controller.go
index 0ad2e69490..90c5d07546 100644
--- a/controllers/awscluster_controller.go
+++ b/controllers/awscluster_controller.go
@@ -21,7 +21,6 @@ import (
 	"fmt"
 	"time"
 
-	"github.com/google/go-cmp/cmp"
 	"github.com/pkg/errors"
 	apierrors "k8s.io/apimachinery/pkg/api/errors"
 	"k8s.io/apimachinery/pkg/types"
@@ -32,9 +31,7 @@ import (
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	"sigs.k8s.io/controller-runtime/pkg/controller"
 	"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
-	"sigs.k8s.io/controller-runtime/pkg/event"
 	"sigs.k8s.io/controller-runtime/pkg/handler"
-	"sigs.k8s.io/controller-runtime/pkg/predicate"
 	"sigs.k8s.io/controller-runtime/pkg/reconcile"
 	"sigs.k8s.io/controller-runtime/pkg/source"
 
@@ -393,28 +390,6 @@ func (r *AWSClusterReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Ma
 		WithOptions(options).
 		For(&infrav1.AWSCluster{}).
 		WithEventFilter(predicates.ResourceHasFilterLabel(mgr.GetScheme(), log.GetLogger(), r.WatchFilterValue)).
-		WithEventFilter(
-			predicate.Funcs{
-				// Avoid reconciling if the event triggering the reconciliation is related to incremental status updates
-				// for AWSCluster resources only
-				UpdateFunc: func(e event.UpdateEvent) bool {
-					if e.ObjectOld.GetObjectKind().GroupVersionKind().Kind != "AWSCluster" {
-						return true
-					}
-
-					oldCluster := e.ObjectOld.(*infrav1.AWSCluster).DeepCopy()
-					newCluster := e.ObjectNew.(*infrav1.AWSCluster).DeepCopy()
-
-					oldCluster.Status = infrav1.AWSClusterStatus{}
-					newCluster.Status = infrav1.AWSClusterStatus{}
-
-					oldCluster.ObjectMeta.ResourceVersion = ""
-					newCluster.ObjectMeta.ResourceVersion = ""
-
-					return !cmp.Equal(oldCluster, newCluster)
-				},
-			},
-		).
 		WithEventFilter(predicates.ResourceIsNotExternallyManaged(mgr.GetScheme(), log.GetLogger())).
 		Build(r)
 	if err != nil {
diff --git a/controllers/awscluster_controller_unit_test.go b/controllers/awscluster_controller_unit_test.go
index 0ea2bfaed9..2e52f51d1d 100644
--- a/controllers/awscluster_controller_unit_test.go
+++ b/controllers/awscluster_controller_unit_test.go
@@ -28,19 +28,16 @@ import (
 	. "github.com/onsi/gomega"
 	corev1 "k8s.io/api/core/v1"
 	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
-	"k8s.io/apimachinery/pkg/types"
 	"k8s.io/client-go/tools/record"
 	"k8s.io/utils/ptr"
 	ctrl "sigs.k8s.io/controller-runtime"
 	"sigs.k8s.io/controller-runtime/pkg/client"
 	"sigs.k8s.io/controller-runtime/pkg/client/fake"
-	"sigs.k8s.io/controller-runtime/pkg/reconcile"
 
 	infrav1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2"
 	"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/scope"
 	"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/services"
 	"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/cloud/services/mock_services"
-	"sigs.k8s.io/cluster-api-provider-aws/v2/pkg/logger"
 	clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
 	"sigs.k8s.io/cluster-api/util"
 )
@@ -60,7 +57,8 @@ func TestAWSClusterReconcilerReconcile(t *testing.T) {
 					Kind:       "Cluster",
 					Name:       "capi-fail-test",
 					UID:        "1",
-				}}}},
+				},
+			}}},
 			expectError: true,
 		},
 		{
@@ -532,97 +530,6 @@ func TestAWSClusterReconcileOperations(t *testing.T) {
 	})
 }
 
-func TestAWSClusterReconcilerRequeueAWSClusterForUnpausedCluster(t *testing.T) {
-	testCases := []struct {
-		name         string
-		awsCluster   *infrav1.AWSCluster
-		ownerCluster *clusterv1.Cluster
-		requeue      bool
-	}{
-		{
-			name: "Should create reconcile request successfully",
-			awsCluster: &infrav1.AWSCluster{
-				ObjectMeta: metav1.ObjectMeta{GenerateName: "aws-test-"}, TypeMeta: metav1.TypeMeta{Kind: "AWSCluster", APIVersion: infrav1.GroupVersion.String()},
-			},
-			ownerCluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "capi-test"}},
-			requeue:      true,
-		},
-		{
-			name: "Should not create reconcile request if AWSCluster is externally managed",
-			awsCluster: &infrav1.AWSCluster{
-				ObjectMeta: metav1.ObjectMeta{GenerateName: "aws-test-", Annotations: map[string]string{clusterv1.ManagedByAnnotation: "capi-test"}},
-				TypeMeta:   metav1.TypeMeta{Kind: "AWSCluster", APIVersion: infrav1.GroupVersion.String()},
-			},
-			ownerCluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "capi-test"}},
-			requeue:      false,
-		},
-		{
-			name:         "Should not create reconcile request for deleted clusters",
-			ownerCluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "capi-test", DeletionTimestamp: &metav1.Time{Time: time.Now()}}},
-			requeue:      false,
-		},
-		{
-			name:         "Should not create reconcile request if infrastructure ref for AWSCluster on owner cluster is not set",
-			ownerCluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "capi-test"}},
-			requeue:      false,
-		},
-		{
-			name: "Should not create reconcile request if infrastructure ref type on owner cluster is not AWSCluster",
-			ownerCluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "capi-test"}, Spec: clusterv1.ClusterSpec{InfrastructureRef: &corev1.ObjectReference{
-				APIVersion: clusterv1.GroupVersion.String(),
-				Kind:       "Cluster",
-				Name:       "aws-test"}}},
-			requeue: false,
-		},
-		{
-			name: "Should not create reconcile request if AWSCluster not found",
-			ownerCluster: &clusterv1.Cluster{ObjectMeta: metav1.ObjectMeta{Name: "capi-test"}, Spec: clusterv1.ClusterSpec{InfrastructureRef: &corev1.ObjectReference{
-				APIVersion: clusterv1.GroupVersion.String(),
-				Kind:       "AWSCluster",
-				Name:       "aws-test"}}},
-			requeue: false,
-		},
-	}
-	for _, tc := range testCases {
-		t.Run(tc.name, func(t *testing.T) {
-			g := NewWithT(t)
-			log := logger.FromContext(ctx)
-			reconciler := &AWSClusterReconciler{
-				Client: testEnv.Client,
-			}
-
-			ns, err := testEnv.CreateNamespace(ctx, fmt.Sprintf("namespace-%s", util.RandomString(5)))
-			g.Expect(err).To(BeNil())
-			createCluster(g, tc.awsCluster, ns.Name)
-			defer cleanupCluster(g, tc.awsCluster, ns)
-
-			if tc.ownerCluster != nil {
-				if tc.awsCluster != nil {
-					tc.ownerCluster.Spec = clusterv1.ClusterSpec{InfrastructureRef: &corev1.ObjectReference{
-						APIVersion: infrav1.GroupVersion.String(),
-						Kind:       "AWSCluster",
-						Name:       tc.awsCluster.Name,
-						Namespace:  ns.Name,
-					}}
-				}
-				tc.ownerCluster.Namespace = ns.Name
-			}
-			handlerFunc := reconciler.requeueAWSClusterForUnpausedCluster(ctx, log)
-			result := handlerFunc(ctx, tc.ownerCluster)
-			if tc.requeue {
-				g.Expect(result).To(ContainElement(reconcile.Request{
-					NamespacedName: types.NamespacedName{
-						Namespace: ns.Name,
-						Name:      tc.awsCluster.Name,
-					},
-				}))
-			} else {
-				g.Expect(result).To(BeNil())
-			}
-		})
-	}
-}
-
 func createCluster(g *WithT, awsCluster *infrav1.AWSCluster, namespace string) {
 	if awsCluster != nil {
 		awsCluster.Namespace = namespace
diff --git a/main.go b/main.go
index 6ca5de8769..0b881e0641 100644
--- a/main.go
+++ b/main.go
@@ -128,6 +128,7 @@ var (
 // +kubebuilder:rbac:groups=authorization.k8s.io,resources=subjectaccessreviews,verbs=create
 
 func main() {
+	setupLog.Info("starting cluster-api-provider-aws", "version", version.Get().String())
 	initFlags(pflag.CommandLine)
 	pflag.CommandLine.AddGoFlagSet(flag.CommandLine)
 	pflag.Parse()
diff --git a/test/e2e/data/e2e_conf.yaml b/test/e2e/data/e2e_conf.yaml
index 231c837340..37dcceb33f 100644
--- a/test/e2e/data/e2e_conf.yaml
+++ b/test/e2e/data/e2e_conf.yaml
@@ -241,4 +241,4 @@ intervals:
   default/wait-deployment-ready: ["5m", "10s"]
   default/wait-loadbalancer-ready: ["5m", "30s"]
   default/wait-classic-elb-health-check-short: ["1m", "10s"]
-  default/wait-classic-elb-health-check-long: ["10m", "10s"]
+  default/wait-classic-elb-health-check-long: ["15m", "30s"]
diff --git a/test/e2e/data/infrastructure-aws/withoutclusterclass/kustomize_sources/efs-support/patches/efs-support.yaml b/test/e2e/data/infrastructure-aws/withoutclusterclass/kustomize_sources/efs-support/patches/efs-support.yaml
index c5ea893b8f..ba940287be 100644
--- a/test/e2e/data/infrastructure-aws/withoutclusterclass/kustomize_sources/efs-support/patches/efs-support.yaml
+++ b/test/e2e/data/infrastructure-aws/withoutclusterclass/kustomize_sources/efs-support/patches/efs-support.yaml
@@ -15,3 +15,13 @@ spec:
     spec:
       rootVolume:
         size: 16
+---
+kind: AWSMachineTemplate
+apiVersion: infrastructure.cluster.x-k8s.io/v1beta2
+metadata:
+  name: "${CLUSTER_NAME}-control-plane"
+spec:
+  template:
+    spec:
+      rootVolume:
+        size: 16
diff --git a/test/e2e/shared/aws_helpers.go b/test/e2e/shared/aws_helpers.go
index 726b12794c..72da8e9326 100644
--- a/test/e2e/shared/aws_helpers.go
+++ b/test/e2e/shared/aws_helpers.go
@@ -196,7 +196,7 @@ func CheckClassicElbHealthCheck(input CheckClassicElbHealthCheckInput, intervals
 		}
 
 		if *lb.HealthCheck.Target != input.ExpectedTarget {
-			return fmt.Errorf("health check target does not match expected target")
+			return fmt.Errorf("health check target %q does not match expected target %q", *lb.HealthCheck.Target, input.ExpectedTarget)
 		}
 
 		return nil
diff --git a/test/e2e/suites/unmanaged/helpers_test.go b/test/e2e/suites/unmanaged/helpers_test.go
index f8f76a669c..fb0c97aeaf 100644
--- a/test/e2e/suites/unmanaged/helpers_test.go
+++ b/test/e2e/suites/unmanaged/helpers_test.go
@@ -539,7 +539,7 @@ func createPodWithEFSMount(clusterClient crclient.Client) {
 			Containers: []corev1.Container{
 				{
 					Name:    "app",
-					Image:   "centos",
+					Image:   "ubuntu",
 					Command: []string{"/bin/sh"},
 					Args:    []string{"-c", "while true; do echo $(date -u) >> /data/out; sleep 5; done"},
 					VolumeMounts: []corev1.VolumeMount{


Reviews:
user: login: damdo
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-19T14:20:12Z
user: login: nrb
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-20T13:41:21Z
user: login: richardcase
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-20T14:53:43Z
user: login: damdo
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-21T13:48:12Z
user: login: richardcase
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-21T13:54:16Z
user: login: damdo
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-21T14:02:05Z
user: login: damdo
body: /lgtm

/assign @nrb 
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-21T14:02:21Z
user: login: richardcase
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-03-21T14:30:08Z

Review comments:
diff_hunk: @@ -539,7 +539,7 @@ func createPodWithEFSMount(clusterClient crclient.Client) {
 			Containers: []corev1.Container{
 				{
 					Name:    "app",
-					Image:   "centos",
+					Image:   "ubnuntu",
path: test/e2e/suites/unmanaged/helpers_test.go
user: login: damdo
body: ```suggestion
					Image:   "ubuntu",
```

Typo here.
created_at: 2025-03-19T14:20:07Z
author_association: MEMBER
diff_hunk: @@ -196,7 +196,7 @@ func CheckClassicElbHealthCheck(input CheckClassicElbHealthCheckInput, intervals
 		}
 
 		if *lb.HealthCheck.Target != input.ExpectedTarget {
-			return fmt.Errorf("health check target does not match expected target")
+			return fmt.Errorf("health check target %s does not match expected target %s", *lb.HealthCheck.Target, input.ExpectedTarget)
path: test/e2e/shared/aws_helpers.go
user: login: nrb
body: Minor nit: `%q` might be easier to read, since it puts quotes around the interpolated string.
created_at: 2025-03-20T13:41:21Z
author_association: CONTRIBUTOR
diff_hunk: @@ -196,7 +196,7 @@ func CheckClassicElbHealthCheck(input CheckClassicElbHealthCheckInput, intervals
 		}
 
 		if *lb.HealthCheck.Target != input.ExpectedTarget {
-			return fmt.Errorf("health check target does not match expected target")
+			return fmt.Errorf("health check target %s does not match expected target %s", *lb.HealthCheck.Target, input.ExpectedTarget)
path: test/e2e/shared/aws_helpers.go
user: login: richardcase
body: Changed
created_at: 2025-03-20T14:53:43Z
author_association: MEMBER
diff_hunk: @@ -128,6 +128,7 @@ var (
 // +kubebuilder:rbac:groups=authorization.k8s.io,resources=subjectaccessreviews,verbs=create
 
 func main() {
+	setupLog.Info("starting cluster-api-provider-aws", "version", version.Get().String())
path: main.go
user: login: damdo
body: Nice addition, thanks!
created_at: 2025-03-21T13:42:36Z
author_association: MEMBER
diff_hunk: @@ -393,28 +390,6 @@ func (r *AWSClusterReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Ma
 		WithOptions(options).
 		For(&infrav1.AWSCluster{}).
 		WithEventFilter(predicates.ResourceHasFilterLabel(mgr.GetScheme(), log.GetLogger(), r.WatchFilterValue)).
-		WithEventFilter(
-			predicate.Funcs{
-				// Avoid reconciling if the event triggering the reconciliation is related to incremental status updates
-				// for AWSCluster resources only
-				UpdateFunc: func(e event.UpdateEvent) bool {
-					if e.ObjectOld.GetObjectKind().GroupVersionKind().Kind != "AWSCluster" {
-						return true
-					}
-
-					oldCluster := e.ObjectOld.(*infrav1.AWSCluster).DeepCopy()
-					newCluster := e.ObjectNew.(*infrav1.AWSCluster).DeepCopy()
-
-					oldCluster.Status = infrav1.AWSClusterStatus{}
-					newCluster.Status = infrav1.AWSClusterStatus{}
-
-					oldCluster.ObjectMeta.ResourceVersion = ""
-					newCluster.ObjectMeta.ResourceVersion = ""
-
-					return !cmp.Equal(oldCluster, newCluster)
-				},
-			},
-		).
path: controllers/awscluster_controller.go
user: login: damdo
body: Do we reckon that removing this will have any unrelated side effects?
For example, downstream we do externally manage the AWSCluster, will this create many reconciliations for the CAPA infracluster controller then?
created_at: 2025-03-21T13:46:19Z
author_association: MEMBER
diff_hunk: @@ -393,28 +390,6 @@ func (r *AWSClusterReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Ma
 		WithOptions(options).
 		For(&infrav1.AWSCluster{}).
 		WithEventFilter(predicates.ResourceHasFilterLabel(mgr.GetScheme(), log.GetLogger(), r.WatchFilterValue)).
-		WithEventFilter(
-			predicate.Funcs{
-				// Avoid reconciling if the event triggering the reconciliation is related to incremental status updates
-				// for AWSCluster resources only
-				UpdateFunc: func(e event.UpdateEvent) bool {
-					if e.ObjectOld.GetObjectKind().GroupVersionKind().Kind != "AWSCluster" {
-						return true
-					}
-
-					oldCluster := e.ObjectOld.(*infrav1.AWSCluster).DeepCopy()
-					newCluster := e.ObjectNew.(*infrav1.AWSCluster).DeepCopy()
-
-					oldCluster.Status = infrav1.AWSClusterStatus{}
-					newCluster.Status = infrav1.AWSClusterStatus{}
-
-					oldCluster.ObjectMeta.ResourceVersion = ""
-					newCluster.ObjectMeta.ResourceVersion = ""
-
-					return !cmp.Equal(oldCluster, newCluster)
-				},
-			},
-		).
path: controllers/awscluster_controller.go
user: login: richardcase
body: I don't think there will be too may side affets. It will result in more Reconcile runs potentially, but:

- Our original code is at odds with how other infrastructure providers work
- Keeping this would cause issues with the Paused condition being added and would still cause that initial delay in reconciliation
- If we kept this, our change for ELB wouldn't be called until there was a "Spec" change.


created_at: 2025-03-21T13:54:16Z
author_association: MEMBER
diff_hunk: @@ -393,28 +390,6 @@ func (r *AWSClusterReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Ma
 		WithOptions(options).
 		For(&infrav1.AWSCluster{}).
 		WithEventFilter(predicates.ResourceHasFilterLabel(mgr.GetScheme(), log.GetLogger(), r.WatchFilterValue)).
-		WithEventFilter(
-			predicate.Funcs{
-				// Avoid reconciling if the event triggering the reconciliation is related to incremental status updates
-				// for AWSCluster resources only
-				UpdateFunc: func(e event.UpdateEvent) bool {
-					if e.ObjectOld.GetObjectKind().GroupVersionKind().Kind != "AWSCluster" {
-						return true
-					}
-
-					oldCluster := e.ObjectOld.(*infrav1.AWSCluster).DeepCopy()
-					newCluster := e.ObjectNew.(*infrav1.AWSCluster).DeepCopy()
-
-					oldCluster.Status = infrav1.AWSClusterStatus{}
-					newCluster.Status = infrav1.AWSClusterStatus{}
-
-					oldCluster.ObjectMeta.ResourceVersion = ""
-					newCluster.ObjectMeta.ResourceVersion = ""
-
-					return !cmp.Equal(oldCluster, newCluster)
-				},
-			},
-		).
path: controllers/awscluster_controller.go
user: login: damdo
body: Ok thanks, I think this is fine to remove for now.
If we notice any issues we can open a follow-up thread to discuss countermeasures.
Thanks!
created_at: 2025-03-21T14:02:05Z
author_association: MEMBER
diff_hunk: @@ -393,28 +390,6 @@ func (r *AWSClusterReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Ma
 		WithOptions(options).
 		For(&infrav1.AWSCluster{}).
 		WithEventFilter(predicates.ResourceHasFilterLabel(mgr.GetScheme(), log.GetLogger(), r.WatchFilterValue)).
-		WithEventFilter(
-			predicate.Funcs{
-				// Avoid reconciling if the event triggering the reconciliation is related to incremental status updates
-				// for AWSCluster resources only
-				UpdateFunc: func(e event.UpdateEvent) bool {
-					if e.ObjectOld.GetObjectKind().GroupVersionKind().Kind != "AWSCluster" {
-						return true
-					}
-
-					oldCluster := e.ObjectOld.(*infrav1.AWSCluster).DeepCopy()
-					newCluster := e.ObjectNew.(*infrav1.AWSCluster).DeepCopy()
-
-					oldCluster.Status = infrav1.AWSClusterStatus{}
-					newCluster.Status = infrav1.AWSClusterStatus{}
-
-					oldCluster.ObjectMeta.ResourceVersion = ""
-					newCluster.ObjectMeta.ResourceVersion = ""
-
-					return !cmp.Equal(oldCluster, newCluster)
-				},
-			},
-		).
path: controllers/awscluster_controller.go
user: login: richardcase
body: Yeah, we could always create a custom predicate
created_at: 2025-03-21T14:30:08Z
author_association: MEMBER

PR comments:
user: login: richardcase
created_at: 2025-03-19T14:07:25Z
body: /test pull-cluster-api-provider-aws-e2e
author_association: MEMBER
user: login: damdo
created_at: 2025-03-19T14:33:43Z
body: 
/test pull-cluster-api-provider-aws-e2e


author_association: MEMBER
user: login: theobarberbany
created_at: 2025-03-19T17:01:48Z
body: /test pull-cluster-api-provider-aws-e2e
author_association: CONTRIBUTOR
user: login: richardcase
created_at: 2025-03-19T17:29:12Z
body: /test pull-cluster-api-provider-aws-e2e
author_association: MEMBER
user: login: richardcase
created_at: 2025-03-19T17:32:00Z
body: /test pull-cluster-api-provider-aws-e2e
author_association: MEMBER
user: login: richardcase
created_at: 2025-03-19T17:37:18Z
body: /test pull-cluster-api-provider-aws-e2e
author_association: MEMBER
user: login: richardcase
created_at: 2025-03-19T18:12:05Z
body: /test pull-cluster-api-provider-aws-e2e
author_association: MEMBER
user: login: damdo
created_at: 2025-03-19T20:32:50Z
body: 
/test pull-cluster-api-provider-aws-e2e


author_association: MEMBER
user: login: richardcase
created_at: 2025-03-20T12:51:28Z
body: /test pull-cluster-api-provider-aws-e2e
author_association: MEMBER
user: login: richardcase
created_at: 2025-03-20T14:53:55Z
body: /test pull-cluster-api-provider-aws-e2e
author_association: MEMBER
user: login: nrb
created_at: 2025-03-20T15:53:04Z
body: @richardcase The release-2.7 periodics are failing on the same efs issue, so we should backport at least the YAML changes in this PR. Do you think we should also backport the changes to the manager setup?
author_association: CONTRIBUTOR
user: login: richardcase
created_at: 2025-03-20T15:55:22Z
body: > @richardcase The release-2.7 periodics are failing on the same efs issue, so we should backport at least the YAML changes in this PR. Do you think we should also backport the changes to the manager setup?

@nrb - we'll probably have to do it all. This issue started as just the EFS problem and then expanded to the classic elb issue. I can just cherry pick the EFS changes first and then if we see the other issue we can then cherry pick that commit. Will create the PR for release-2.7 soon.
author_association: MEMBER
user: login: nrb
created_at: 2025-03-20T16:17:19Z
body: > we'll probably have to do it all

Yeah, we can just do a cherry-pick then
author_association: CONTRIBUTOR
user: login: richardcase
created_at: 2025-03-20T17:27:05Z
body: /test pull-cluster-api-provider-aws-e2e
author_association: MEMBER
user: login: richardcase
created_at: 2025-03-21T12:27:11Z
body: /test pull-cluster-api-provider-aws-e2e
author_association: MEMBER
user: login: nrb
created_at: 2025-03-21T14:35:55Z
body: /approve

Thanks Richard!
author_association: CONTRIBUTOR
user: login: k8s-ci-robot
created_at: 2025-03-21T14:36:03Z
body: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes-sigs/cluster-api-provider-aws/pull/5418#issuecomment-2743556245" title="Approved">nrb</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes-sigs%2Fcluster-api-provider-aws).

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/kubernetes-sigs/cluster-api-provider-aws/blob/main/OWNERS)~~ [nrb]

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: richardcase
created_at: 2025-03-21T14:54:49Z
body: /cherrypick release-2.7
author_association: MEMBER
user: login: k8s-infra-cherrypick-robot
created_at: 2025-03-21T14:55:32Z
body: @richardcase: #5418 failed to apply on top of branch "release-2.7":
```
Applying: fix: efs e2e test breaking
Using index info to reconstruct a base tree...
M	test/e2e/data/e2e_conf.yaml
M	test/e2e/shared/aws_helpers.go
M	test/e2e/suites/unmanaged/helpers_test.go
Falling back to patching base and 3-way merge...
Auto-merging test/e2e/suites/unmanaged/helpers_test.go
Auto-merging test/e2e/shared/aws_helpers.go
CONFLICT (content): Merge conflict in test/e2e/shared/aws_helpers.go
Auto-merging test/e2e/data/e2e_conf.yaml
CONFLICT (content): Merge conflict in test/e2e/data/e2e_conf.yaml
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
hint: When you have resolved this problem, run "git am --continue".
hint: If you prefer to skip this patch, run "git am --skip" instead.
hint: To restore the original branch and stop patching, run "git am --abort".
hint: Disable this message with "git config advice.mergeConflict false"
Patch failed at 0001 fix: efs e2e test breaking

```

<details>

In response to [this](https://github.com/kubernetes-sigs/cluster-api-provider-aws/pull/5418#issuecomment-2743608319):

>/cherrypick release-2.7


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: NONE