Skip to content

Commit a7064ee

Browse files
authored
Revert "Handle K8s service account lifecycle on `eksctl create/delete podiden…"
This reverts commit 9289bf8.
1 parent dfd89d8 commit a7064ee

11 files changed

+27
-148
lines changed

pkg/actions/cluster/owned.go

+1-9
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,7 @@ func (c *OwnedCluster) Delete(ctx context.Context, _, podEvictionWaitPeriod time
120120
}
121121
newTasksToDeleteAddonIAM := addon.NewRemover(c.stackManager).DeleteAddonIAMTasks
122122
newTasksToDeletePodIdentityRoles := func() (*tasks.TaskTree, error) {
123-
clientSet, err = c.newClientSet()
124-
if err != nil {
125-
if force {
126-
logger.Warning("error occurred while deleting IAM Role stacks for pod identity associations: %v; force=true so proceeding with cluster deletion", err)
127-
return &tasks.TaskTree{}, nil
128-
}
129-
return nil, err
130-
}
131-
return podidentityassociation.NewDeleter(c.cfg.Metadata.Name, c.stackManager, c.ctl.AWSProvider.EKS(), clientSet).
123+
return podidentityassociation.NewDeleter(c.cfg.Metadata.Name, c.stackManager, c.ctl.AWSProvider.EKS()).
132124
DeleteTasks(ctx, []podidentityassociation.Identifier{})
133125
}
134126

pkg/actions/podidentityassociation/creator.go

+1-19
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,9 @@ import (
44
"context"
55
"fmt"
66

7-
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
8-
kubeclient "k8s.io/client-go/kubernetes"
9-
107
api "github.com/weaveworks/eksctl/pkg/apis/eksctl.io/v1alpha5"
118
"github.com/weaveworks/eksctl/pkg/awsapi"
129
"github.com/weaveworks/eksctl/pkg/cfn/builder"
13-
"github.com/weaveworks/eksctl/pkg/kubernetes"
1410
"github.com/weaveworks/eksctl/pkg/utils/tasks"
1511
)
1612

@@ -25,15 +21,13 @@ type Creator struct {
2521

2622
stackCreator StackCreator
2723
eksAPI awsapi.EKS
28-
clientSet kubeclient.Interface
2924
}
3025

31-
func NewCreator(clusterName string, stackCreator StackCreator, eksAPI awsapi.EKS, clientSet kubeclient.Interface) *Creator {
26+
func NewCreator(clusterName string, stackCreator StackCreator, eksAPI awsapi.EKS) *Creator {
3227
return &Creator{
3328
clusterName: clusterName,
3429
stackCreator: stackCreator,
3530
eksAPI: eksAPI,
36-
clientSet: clientSet,
3731
}
3832
}
3933

@@ -59,18 +53,6 @@ func (c *Creator) CreateTasks(ctx context.Context, podIdentityAssociations []api
5953
stackCreator: c.stackCreator,
6054
})
6155
}
62-
piaCreationTasks.Append(&tasks.GenericTask{
63-
Description: fmt.Sprintf("create service account %q, if it does not already exist", pia.NameString()),
64-
Doer: func() error {
65-
if err := kubernetes.MaybeCreateServiceAccountOrUpdateMetadata(c.clientSet, v1.ObjectMeta{
66-
Name: pia.ServiceAccountName,
67-
Namespace: pia.Namespace,
68-
}); err != nil {
69-
return fmt.Errorf("failed to create service account %q: %w", pia.NameString(), err)
70-
}
71-
return nil
72-
},
73-
})
7456
piaCreationTasks.Append(&createPodIdentityAssociationTask{
7557
ctx: ctx,
7658
info: fmt.Sprintf("create pod identity association for service account %q", pia.NameString()),

pkg/actions/podidentityassociation/creator_test.go

+1-39
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,6 @@ import (
55
"fmt"
66

77
awseks "github.com/aws/aws-sdk-go-v2/service/eks"
8-
9-
"k8s.io/apimachinery/pkg/runtime"
10-
kubeclientfakes "k8s.io/client-go/kubernetes/fake"
11-
kubeclienttesting "k8s.io/client-go/testing"
12-
138
. "github.com/onsi/ginkgo/v2"
149
. "github.com/onsi/gomega"
1510
"github.com/stretchr/testify/mock"
@@ -25,7 +20,6 @@ type createPodIdentityAssociationEntry struct {
2520
toBeCreated []api.PodIdentityAssociation
2621
mockEKS func(provider *mockprovider.MockProvider)
2722
mockCFN func(stackCreator *fakes.FakeStackCreator)
28-
mockK8s func(clientSet *kubeclientfakes.Clientset)
2923
expectedCreateStackCalls int
3024
expectedErr string
3125
}
@@ -34,7 +28,6 @@ var _ = Describe("Create", func() {
3428
var (
3529
creator *podidentityassociation.Creator
3630
fakeStackCreator *fakes.FakeStackCreator
37-
fakeClientSet *kubeclientfakes.Clientset
3831
mockProvider *mockprovider.MockProvider
3932

4033
clusterName = "test-cluster"
@@ -51,17 +44,12 @@ var _ = Describe("Create", func() {
5144
e.mockCFN(fakeStackCreator)
5245
}
5346

54-
fakeClientSet = kubeclientfakes.NewSimpleClientset()
55-
if e.mockK8s != nil {
56-
e.mockK8s(fakeClientSet)
57-
}
58-
5947
mockProvider = mockprovider.NewMockProvider()
6048
if e.mockEKS != nil {
6149
e.mockEKS(mockProvider)
6250
}
6351

64-
creator = podidentityassociation.NewCreator(clusterName, fakeStackCreator, mockProvider.MockEKS(), fakeClientSet)
52+
creator = podidentityassociation.NewCreator(clusterName, fakeStackCreator, mockProvider.MockEKS())
6553

6654
err := creator.CreatePodIdentityAssociations(context.Background(), e.toBeCreated)
6755
if e.expectedErr != "" {
@@ -92,32 +80,6 @@ var _ = Describe("Create", func() {
9280
expectedErr: "creating IAM role for pod identity association",
9381
}),
9482

95-
Entry("returns an error if creating the service account fails", createPodIdentityAssociationEntry{
96-
toBeCreated: []api.PodIdentityAssociation{
97-
{
98-
Namespace: namespace,
99-
ServiceAccountName: serviceAccountName1,
100-
RoleARN: roleARN,
101-
},
102-
},
103-
mockK8s: func(clientSet *kubeclientfakes.Clientset) {
104-
clientSet.PrependReactor("get", "namespaces", func(action kubeclienttesting.Action) (bool, runtime.Object, error) {
105-
return true, nil, genericErr
106-
})
107-
},
108-
mockEKS: func(provider *mockprovider.MockProvider) {
109-
mockProvider.MockEKS().
110-
On("CreatePodIdentityAssociation", mock.Anything, mock.Anything).
111-
Run(func(args mock.Arguments) {
112-
Expect(args).To(HaveLen(2))
113-
Expect(args[1]).To(BeAssignableToTypeOf(&awseks.CreatePodIdentityAssociationInput{}))
114-
}).
115-
Return(&awseks.CreatePodIdentityAssociationOutput{}, nil).
116-
Once()
117-
},
118-
expectedErr: "failed to create service account",
119-
}),
120-
12183
Entry("returns an error if creating the association fails", createPodIdentityAssociationEntry{
12284
toBeCreated: []api.PodIdentityAssociation{
12385
{

pkg/actions/podidentityassociation/deleter.go

+3-26
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,15 @@ import (
55
"fmt"
66
"strings"
77

8-
v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9-
kubeclient "k8s.io/client-go/kubernetes"
8+
cfntypes "github.com/aws/aws-sdk-go-v2/service/cloudformation/types"
109

1110
"github.com/aws/aws-sdk-go-v2/aws"
12-
cfntypes "github.com/aws/aws-sdk-go-v2/service/cloudformation/types"
1311
"github.com/aws/aws-sdk-go-v2/service/eks"
1412

1513
"github.com/kris-nova/logger"
1614

1715
api "github.com/weaveworks/eksctl/pkg/apis/eksctl.io/v1alpha5"
1816
"github.com/weaveworks/eksctl/pkg/cfn/manager"
19-
"github.com/weaveworks/eksctl/pkg/kubernetes"
2017
"github.com/weaveworks/eksctl/pkg/utils/tasks"
2118
)
2219

@@ -52,8 +49,6 @@ type Deleter struct {
5249
StackDeleter StackDeleter
5350
// APIDeleter deletes pod identity associations using the EKS API.
5451
APIDeleter APIDeleter
55-
// ClientSet is used to delete K8s service accounts.
56-
ClientSet kubeclient.Interface
5752
}
5853

5954
// Identifier represents a pod identity association.
@@ -76,12 +71,11 @@ func (i Identifier) toString(delimiter string) string {
7671
return i.Namespace + delimiter + i.ServiceAccountName
7772
}
7873

79-
func NewDeleter(clusterName string, stackDeleter StackDeleter, apiDeleter APIDeleter, clientSet kubeclient.Interface) *Deleter {
74+
func NewDeleter(clusterName string, stackDeleter StackDeleter, apiDeleter APIDeleter) *Deleter {
8075
return &Deleter{
8176
ClusterName: clusterName,
8277
StackDeleter: stackDeleter,
8378
APIDeleter: apiDeleter,
84-
ClientSet: clientSet,
8579
}
8680
}
8781

@@ -117,24 +111,7 @@ func (d *Deleter) DeleteTasks(ctx context.Context, podIDs []Identifier) (*tasks.
117111
}
118112

119113
for _, p := range podIDs {
120-
piaDeletionTasks := &tasks.TaskTree{
121-
Parallel: false,
122-
IsSubTask: true,
123-
}
124-
piaDeletionTasks.Append(d.makeDeleteTask(ctx, p, roleStackNames))
125-
piaDeletionTasks.Append(&tasks.GenericTask{
126-
Description: fmt.Sprintf("delete service account %q", p.IDString()),
127-
Doer: func() error {
128-
if err := kubernetes.MaybeDeleteServiceAccount(d.ClientSet, v1.ObjectMeta{
129-
Name: p.ServiceAccountName,
130-
Namespace: p.Namespace,
131-
}); err != nil {
132-
return fmt.Errorf("failed to delete service account %q: %w", p.IDString(), err)
133-
}
134-
return nil
135-
},
136-
})
137-
taskTree.Append(piaDeletionTasks)
114+
taskTree.Append(d.makeDeleteTask(ctx, p, roleStackNames))
138115
}
139116
return taskTree, nil
140117
}

pkg/actions/podidentityassociation/deleter_test.go

+18-34
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,15 @@ import (
55
"crypto/sha1"
66
"fmt"
77

8-
. "github.com/onsi/ginkgo/v2"
9-
. "github.com/onsi/gomega"
10-
11-
"github.com/stretchr/testify/mock"
12-
13-
corev1 "k8s.io/api/core/v1"
14-
"k8s.io/apimachinery/pkg/runtime"
15-
kubeclientfakes "k8s.io/client-go/kubernetes/fake"
16-
kubeclienttesting "k8s.io/client-go/testing"
8+
cfntypes "github.com/aws/aws-sdk-go-v2/service/cloudformation/types"
9+
ekstypes "github.com/aws/aws-sdk-go-v2/service/eks/types"
1710

1811
"github.com/aws/aws-sdk-go-v2/aws"
19-
cfntypes "github.com/aws/aws-sdk-go-v2/service/cloudformation/types"
2012
"github.com/aws/aws-sdk-go-v2/service/eks"
21-
ekstypes "github.com/aws/aws-sdk-go-v2/service/eks/types"
13+
"github.com/stretchr/testify/mock"
14+
15+
. "github.com/onsi/ginkgo/v2"
16+
. "github.com/onsi/gomega"
2217

2318
"github.com/weaveworks/eksctl/pkg/actions/podidentityassociation"
2419
api "github.com/weaveworks/eksctl/pkg/apis/eksctl.io/v1alpha5"
@@ -30,7 +25,7 @@ import (
3025
var _ = Describe("Pod Identity Deleter", func() {
3126
type deleteEntry struct {
3227
podIdentityAssociations []api.PodIdentityAssociation
33-
mockCalls func(stackManager *managerfakes.FakeStackManager, clientSet *kubeclientfakes.Clientset, eksAPI *mocksv2.EKS)
28+
mockCalls func(stackManager *managerfakes.FakeStackManager, eksAPI *mocksv2.EKS)
3429

3530
expectedCalls func(stackManager *managerfakes.FakeStackManager, eksAPI *mocksv2.EKS)
3631
expectedErr string
@@ -45,23 +40,14 @@ var _ = Describe("Pod Identity Deleter", func() {
4540
return nil
4641
}
4742
}
48-
mockClientSet := func(clientSet *kubeclientfakes.Clientset) {
49-
clientSet.PrependReactor("delete", "serviceaccounts", func(action kubeclienttesting.Action) (bool, runtime.Object, error) {
50-
return true, nil, nil
51-
})
52-
clientSet.PrependReactor("get", "serviceaccounts", func(action kubeclienttesting.Action) (bool, runtime.Object, error) {
53-
return true, &corev1.ServiceAccount{}, nil
54-
})
55-
}
56-
mockCalls := func(stackManager *managerfakes.FakeStackManager, clientSet *kubeclientfakes.Clientset, eksAPI *mocksv2.EKS, podID podidentityassociation.Identifier) {
43+
mockCalls := func(stackManager *managerfakes.FakeStackManager, eksAPI *mocksv2.EKS, podID podidentityassociation.Identifier) {
5744
stackName := makeIRSAv2StackName(podID)
5845
associationID := fmt.Sprintf("%x", sha1.Sum([]byte(stackName)))
5946
mockListPodIdentityAssociations(eksAPI, podID, []ekstypes.PodIdentityAssociationSummary{
6047
{
6148
AssociationId: aws.String(associationID),
6249
},
6350
}, nil)
64-
mockClientSet(clientSet)
6551
eksAPI.On("DeletePodIdentityAssociation", mock.Anything, &eks.DeletePodIdentityAssociationInput{
6652
ClusterName: aws.String(clusterName),
6753
AssociationId: aws.String(associationID),
@@ -71,14 +57,12 @@ var _ = Describe("Pod Identity Deleter", func() {
7157

7258
DescribeTable("delete pod identity association", func(e deleteEntry) {
7359
provider := mockprovider.NewMockProvider()
74-
clientSet := kubeclientfakes.NewSimpleClientset()
7560
var stackManager managerfakes.FakeStackManager
76-
e.mockCalls(&stackManager, clientSet, provider.MockEKS())
61+
e.mockCalls(&stackManager, provider.MockEKS())
7762
deleter := podidentityassociation.Deleter{
7863
ClusterName: clusterName,
7964
StackDeleter: &stackManager,
8065
APIDeleter: provider.EKS(),
81-
ClientSet: clientSet,
8266
}
8367
err := deleter.Delete(context.Background(), podidentityassociation.ToIdentifiers(e.podIdentityAssociations))
8468

@@ -96,13 +80,13 @@ var _ = Describe("Pod Identity Deleter", func() {
9680
ServiceAccountName: "default",
9781
},
9882
},
99-
mockCalls: func(stackManager *managerfakes.FakeStackManager, fakeClientSet *kubeclientfakes.Clientset, eksAPI *mocksv2.EKS) {
83+
mockCalls: func(stackManager *managerfakes.FakeStackManager, eksAPI *mocksv2.EKS) {
10084
podID := podidentityassociation.Identifier{
10185
Namespace: "default",
10286
ServiceAccountName: "default",
10387
}
10488
mockListStackNames(stackManager, []podidentityassociation.Identifier{podID})
105-
mockCalls(stackManager, fakeClientSet, eksAPI, podID)
89+
mockCalls(stackManager, eksAPI, podID)
10690
},
10791

10892
expectedCalls: func(stackManager *managerfakes.FakeStackManager, eksAPI *mocksv2.EKS) {
@@ -123,7 +107,7 @@ var _ = Describe("Pod Identity Deleter", func() {
123107
ServiceAccountName: "aws-node",
124108
},
125109
},
126-
mockCalls: func(stackManager *managerfakes.FakeStackManager, clientSet *kubeclientfakes.Clientset, eksAPI *mocksv2.EKS) {
110+
mockCalls: func(stackManager *managerfakes.FakeStackManager, eksAPI *mocksv2.EKS) {
127111
podIDs := []podidentityassociation.Identifier{
128112
{
129113
Namespace: "default",
@@ -136,7 +120,7 @@ var _ = Describe("Pod Identity Deleter", func() {
136120
}
137121
mockListStackNamesWithIRSAv1(stackManager, podIDs[:1], podIDs[1:])
138122
for _, podID := range podIDs {
139-
mockCalls(stackManager, clientSet, eksAPI, podID)
123+
mockCalls(stackManager, eksAPI, podID)
140124
}
141125
},
142126

@@ -183,7 +167,7 @@ var _ = Describe("Pod Identity Deleter", func() {
183167
ServiceAccountName: "coredns",
184168
},
185169
},
186-
mockCalls: func(stackManager *managerfakes.FakeStackManager, clientSet *kubeclientfakes.Clientset, eksAPI *mocksv2.EKS) {
170+
mockCalls: func(stackManager *managerfakes.FakeStackManager, eksAPI *mocksv2.EKS) {
187171
podIDs := []podidentityassociation.Identifier{
188172
{
189173
Namespace: "default",
@@ -200,7 +184,7 @@ var _ = Describe("Pod Identity Deleter", func() {
200184
}
201185
mockListStackNames(stackManager, podIDs)
202186
for _, podID := range podIDs {
203-
mockCalls(stackManager, clientSet, eksAPI, podID)
187+
mockCalls(stackManager, eksAPI, podID)
204188
}
205189
mockListPodIdentityAssociations(eksAPI, podidentityassociation.Identifier{
206190
Namespace: "kube-system",
@@ -223,7 +207,7 @@ var _ = Describe("Pod Identity Deleter", func() {
223207
ServiceAccountName: "aws-node",
224208
},
225209
},
226-
mockCalls: func(stackManager *managerfakes.FakeStackManager, clientSet *kubeclientfakes.Clientset, eksAPI *mocksv2.EKS) {
210+
mockCalls: func(stackManager *managerfakes.FakeStackManager, eksAPI *mocksv2.EKS) {
227211
podID := podidentityassociation.Identifier{
228212
Namespace: "kube-system",
229213
ServiceAccountName: "aws-node",
@@ -252,7 +236,7 @@ var _ = Describe("Pod Identity Deleter", func() {
252236
ServiceAccountName: "aws-node",
253237
},
254238
},
255-
mockCalls: func(stackManager *managerfakes.FakeStackManager, clientSet *kubeclientfakes.Clientset, eksAPI *mocksv2.EKS) {
239+
mockCalls: func(stackManager *managerfakes.FakeStackManager, eksAPI *mocksv2.EKS) {
256240
podIDs := []podidentityassociation.Identifier{
257241
{
258242
Namespace: "default",
@@ -279,7 +263,7 @@ var _ = Describe("Pod Identity Deleter", func() {
279263

280264
Entry("delete IAM resources on cluster deletion", deleteEntry{
281265
podIdentityAssociations: []api.PodIdentityAssociation{},
282-
mockCalls: func(stackManager *managerfakes.FakeStackManager, clientSet *kubeclientfakes.Clientset, eksAPI *mocksv2.EKS) {
266+
mockCalls: func(stackManager *managerfakes.FakeStackManager, eksAPI *mocksv2.EKS) {
283267
podIDs := []podidentityassociation.Identifier{
284268
{
285269
Namespace: "default",

pkg/actions/podidentityassociation/migrator.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ func (m *Migrator) MigrateToPodIdentity(ctx context.Context, options PodIdentity
177177
}
178178

179179
// add tasks to create pod identity associations
180-
createAssociationsTasks := NewCreator(m.clusterName, nil, m.eksAPI, m.clientSet).CreateTasks(ctx, toBeCreated)
180+
createAssociationsTasks := NewCreator(m.clusterName, nil, m.eksAPI).CreateTasks(ctx, toBeCreated)
181181
if createAssociationsTasks.Len() > 0 {
182182
createAssociationsTasks.IsSubTask = true
183183
taskTree.Append(createAssociationsTasks)

pkg/actions/podidentityassociation/migrator_test.go

-2
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,6 @@ var _ = Describe("Create", func() {
220220
validateCustomLoggerOutput: func(output string) {
221221
Expect(output).To(ContainSubstring("update trust policy for owned role \"test-role-1\""))
222222
Expect(output).To(ContainSubstring("update trust policy for unowned role \"test-role-2\""))
223-
Expect(output).To(ContainSubstring("create service account \"default/service-account-1\", if it does not already exist"))
224-
Expect(output).To(ContainSubstring("create service account \"default/service-account-2\", if it does not already exist"))
225223
Expect(output).To(ContainSubstring("create pod identity association for service account \"default/service-account-1\""))
226224
Expect(output).To(ContainSubstring("create pod identity association for service account \"default/service-account-2\""))
227225
},

pkg/actions/podidentityassociation/podidentityassociation_suite_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ import (
99

1010
func TestPodIdentityAssociation(t *testing.T) {
1111
RegisterFailHandler(Fail)
12-
RunSpecs(t, "Pod Identity Association Suite")
12+
RunSpecs(t, "Nodegroup Suite")
1313
}

0 commit comments

Comments
 (0)