@@ -7,15 +7,15 @@ import (
7
7
"slices"
8
8
"time"
9
9
10
- "github.com/aws/aws-sdk-go-v2/aws"
11
- "github.com/aws/aws-sdk-go-v2/service/eks"
12
- ekstypes "github.com/aws/aws-sdk-go-v2/service/eks/types"
13
10
"github.com/kris-nova/logger"
14
11
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
12
corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
16
13
14
+ "github.com/aws/aws-sdk-go-v2/aws"
15
+ "github.com/aws/aws-sdk-go-v2/service/eks"
16
+ ekstypes "github.com/aws/aws-sdk-go-v2/service/eks/types"
17
+
17
18
api "github.com/weaveworks/eksctl/pkg/apis/eksctl.io/v1alpha5"
18
- "github.com/weaveworks/eksctl/pkg/automode"
19
19
"github.com/weaveworks/eksctl/pkg/eks/waiter"
20
20
)
21
21
@@ -41,13 +41,19 @@ type RoleManager interface {
41
41
DeleteIfRequired (ctx context.Context ) error
42
42
}
43
43
44
+ // A ClusterRoleManager manages the cluster role.
45
+ type ClusterRoleManager interface {
46
+ UpdateRoleForAutoMode (ctx context.Context ) error
47
+ DeleteAutoModePolicies (ctx context.Context ) error
48
+ }
49
+
44
50
// An Updater enables or disables Auto Mode.
45
51
type Updater struct {
46
- RoleManager RoleManager
47
- CoreV1Interface corev1client. CoreV1Interface
48
- EKSUpdater EKSUpdater
49
- Drainer NodeGroupDrainer
50
- RBACApplier * automode. RBACApplier
52
+ RoleManager RoleManager
53
+ ClusterRoleManager ClusterRoleManager
54
+ PodsGetter corev1client. PodsGetter
55
+ EKSUpdater EKSUpdater
56
+ Drainer NodeGroupDrainer
51
57
}
52
58
53
59
// Update updates the cluster to match the autoModeConfig settings supplied in clusterConfig.
@@ -57,8 +63,8 @@ func (u *Updater) Update(ctx context.Context, clusterConfig *api.ClusterConfig,
57
63
return cc != nil && * cc .Enabled
58
64
}
59
65
if clusterConfig .IsAutoModeEnabled () {
66
+ amc := clusterConfig .AutoModeConfig
60
67
if autoModeEnabled () {
61
- amc := clusterConfig .AutoModeConfig
62
68
if ! amc .NodeRoleARN .IsZero () && currentCluster .ComputeConfig .NodeRoleArn != nil &&
63
69
* currentCluster .ComputeConfig .NodeRoleArn != amc .NodeRoleARN .String () {
64
70
return errors .New ("autoModeConfig.nodeRoleARN cannot be modified" )
@@ -73,17 +79,13 @@ func (u *Updater) Update(ctx context.Context, clusterConfig *api.ClusterConfig,
73
79
} else {
74
80
logger .Info ("enabling Auto Mode" )
75
81
}
76
- if err := u .enableAutoMode (ctx , clusterConfig . AutoModeConfig , currentCluster .ComputeConfig , clusterConfig .Metadata .Name ); err != nil {
82
+ if err := u .enableAutoMode (ctx , amc , currentCluster .ComputeConfig , clusterConfig .Metadata .Name ); err != nil {
77
83
return fmt .Errorf ("enabling Auto Mode: %w" , err )
78
84
}
79
- if clusterConfig . AutoModeConfig .HasNodePools () {
85
+ if amc .HasNodePools () {
80
86
logger .Info ("cluster subnets will be used for nodes launched by Auto Mode; please create a new NodeClass " +
81
87
"resource if you do not want to use cluster subnets" )
82
88
}
83
- logger .Info ("applying node RBAC resources for Auto Mode" )
84
- if err := u .RBACApplier .ApplyRBACResources (); err != nil {
85
- return err
86
- }
87
89
logger .Info ("Auto Mode enabled successfully" )
88
90
return nil
89
91
}
@@ -94,9 +96,6 @@ func (u *Updater) Update(ctx context.Context, clusterConfig *api.ClusterConfig,
94
96
if err := u .disableAutoMode (ctx , clusterConfig .Metadata .Name ); err != nil {
95
97
return fmt .Errorf ("disabling Auto Mode: %w" , err )
96
98
}
97
- if err := u .RBACApplier .DeleteRBACResources (); err != nil {
98
- return err
99
- }
100
99
logger .Info ("Auto Mode disabled successfully" )
101
100
return nil
102
101
}
@@ -105,6 +104,9 @@ func (u *Updater) enableAutoMode(ctx context.Context, autoModeConfig *api.AutoMo
105
104
if err := u .preflightCheck (ctx ); err != nil {
106
105
return err
107
106
}
107
+ if err := u .ClusterRoleManager .UpdateRoleForAutoMode (ctx ); err != nil {
108
+ return fmt .Errorf ("updating cluster role to use Auto Mode: %w" , err )
109
+ }
108
110
computeConfigReq := & ekstypes.ComputeConfigRequest {
109
111
Enabled : aws .Bool (true ),
110
112
NodePools : * autoModeConfig .NodePools ,
@@ -177,6 +179,9 @@ func (u *Updater) disableAutoMode(ctx context.Context, clusterName string) error
177
179
if err := u .RoleManager .DeleteIfRequired (ctx ); err != nil {
178
180
return fmt .Errorf ("deleting IAM resources for Auto Mode: %w" , err )
179
181
}
182
+ if err := u .ClusterRoleManager .DeleteAutoModePolicies (ctx ); err != nil {
183
+ return fmt .Errorf ("deleting Auto Mode policies from cluster role: %w" , err )
184
+ }
180
185
return nil
181
186
}
182
187
@@ -204,7 +209,7 @@ func (u *Updater) preflightCheck(ctx context.Context) error {
204
209
}
205
210
knownKarpenterNamespaces := []string {metav1 .NamespaceSystem , "karpenter" }
206
211
for _ , ns := range knownKarpenterNamespaces {
207
- podList , err := u .CoreV1Interface .Pods (ns ).List (ctx , metav1.ListOptions {
212
+ podList , err := u .PodsGetter .Pods (ns ).List (ctx , metav1.ListOptions {
208
213
LabelSelector : "app.kubernetes.io/instance=karpenter" ,
209
214
})
210
215
if err != nil {
0 commit comments