Skip to content

Commit 37a9535

Browse files
estela-ramirezeramirez8
andauthored
remove osfamily container arg (#497)
Signed-off-by: eramirez8 <[email protected]> Co-authored-by: eramirez8 <[email protected]>
1 parent 8188aaf commit 37a9535

File tree

8 files changed

+99
-18
lines changed

8 files changed

+99
-18
lines changed

config/crd/bases/instancemgr.keikoproj.io_instancegroups.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@ spec:
7878
properties:
7979
configuration:
8080
properties:
81+
nodeConfig:
82+
type: string
8183
bootstrapArguments:
8284
type: string
8385
bootstrapOptions:
@@ -253,8 +255,6 @@ spec:
253255
- stage
254256
type: object
255257
type: array
256-
amazonLinuxOsFamily:
257-
type: string
258258
volumes:
259259
items:
260260
properties:

controllers/instancegroup_controller.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,6 @@ type InstanceGroupReconciler struct {
5656
Metrics *common.MetricsCollector
5757
DisableWinClusterInjection bool
5858
DefaultScalingConfiguration *v1alpha1.ScalingConfigurationType
59-
AmazonLinuxOsFamily string
6059
}
6160

6261
type InstanceGroupAuthenticator struct {
@@ -144,7 +143,6 @@ func (r *InstanceGroupReconciler) Reconcile(ctxt context.Context, req ctrl.Reque
144143
ConfigRetention: r.ConfigRetention,
145144
Metrics: r.Metrics,
146145
DisableWinClusterInjection: r.DisableWinClusterInjection,
147-
AmazonLinuxOsFamily: r.AmazonLinuxOsFamily,
148146
}
149147

150148
var (

controllers/provisioners/eks/eks.go

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ func New(p provisioners.ProvisionerInput) *EksInstanceGroupContext {
7979
ConfigRetention: p.ConfigRetention,
8080
Metrics: p.Metrics,
8181
DisableWinClusterInjection: p.DisableWinClusterInjection,
82-
AmazonLinuxOsFamily: p.AmazonLinuxOsFamily,
8382
}
8483

8584
ctx.SetState(v1alpha1.ReconcileInit)
@@ -101,7 +100,6 @@ type EksInstanceGroupContext struct {
101100
ResourcePrefix string
102101
Metrics *common.MetricsCollector
103102
DisableWinClusterInjection bool
104-
AmazonLinuxOsFamily string
105103
}
106104

107105
type UserDataPayload struct {
@@ -145,19 +143,38 @@ func (ctx *EksInstanceGroupContext) GetOsFamily() string {
145143
instanceGroup = ctx.GetInstanceGroup()
146144
annotations = instanceGroup.GetAnnotations()
147145
)
148-
overrideAmazonLinuxFamily := strings.Trim(ctx.AmazonLinuxOsFamily, "\" ")
149146

150-
if v, exists := annotations[OsFamilyAnnotation]; exists {
147+
if ctx.IsAmazonLinux2023() {
148+
ctx.Log.Info("using amazonlinux2023 for os family")
149+
return OsFamilyAmazonLinux2023
150+
} else if v, exists := annotations[OsFamilyAnnotation]; exists {
151151
if common.ContainsEqualFold(AllowedOsFamilies, v) {
152+
ctx.Log.Info("using amazon linux os family annotation", "value", v)
152153
return annotations[OsFamilyAnnotation]
153154
}
154155
ctx.Log.Info("used unsupported annotation value '%v=%v', will default to 'amazonlinux2', allowed values: %+v", OsFamilyAnnotation, v, AllowedOsFamilies)
155-
} else if common.ContainsEqualFold(AllowedOsFamilies, overrideAmazonLinuxFamily) {
156-
return overrideAmazonLinuxFamily
157156
}
158157
return OsFamilyAmazonLinux2
159158
}
160159

160+
func (ctx *EksInstanceGroupContext) IsAmazonLinux2023() bool {
161+
162+
isAmazonLinux2023 := false
163+
var (
164+
instanceGroup = ctx.GetInstanceGroup()
165+
configuration = instanceGroup.GetEKSConfiguration()
166+
userData = configuration.GetUserData()
167+
)
168+
169+
for _, stage := range userData {
170+
if strings.EqualFold(stage.Stage, v1alpha1.NodeConfigYamlStage) {
171+
return true
172+
}
173+
174+
}
175+
return isAmazonLinux2023
176+
}
177+
161178
func (ctx *EksInstanceGroupContext) GetUpgradeStrategy() *v1alpha1.AwsUpgradeStrategy {
162179
// Check if the upgrade strategy has been set (non-zero value)
163180
if ctx.InstanceGroup.Spec.AwsUpgradeStrategy != (v1alpha1.AwsUpgradeStrategy{}) {

controllers/provisioners/eks/helpers.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1288,13 +1288,13 @@ func (ctx *EksInstanceGroupContext) GetEksLatestAmi() (string, error) {
12881288
)
12891289
clusterVersion := state.GetClusterVersion()
12901290
annotations := instanceGroup.GetAnnotations()
1291-
overrideAmazonLinuxFamily := strings.Trim(ctx.AmazonLinuxOsFamily, "\" ")
12921291

12931292
var OSFamily string
1294-
if kubeprovider.HasAnnotation(annotations, OsFamilyAnnotation) {
1293+
if ctx.IsAmazonLinux2023() {
1294+
ctx.Log.Info("using amazonlinux2023 to get latest ami")
1295+
OSFamily = OsFamilyAmazonLinux2023
1296+
} else if kubeprovider.HasAnnotation(annotations, OsFamilyAnnotation) {
12951297
OSFamily = annotations[OsFamilyAnnotation]
1296-
} else if overrideAmazonLinuxFamily != "" {
1297-
OSFamily = overrideAmazonLinuxFamily
12981298
} else {
12991299
OSFamily = OsFamilyAmazonLinux2
13001300
}

controllers/provisioners/eks/helpers_test.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,18 @@ import (
3434
"github.com/pkg/errors"
3535
)
3636

37+
func mockUserDataStages() []v1alpha1.UserDataStage {
38+
preBootstrapData := base64.StdEncoding.EncodeToString([]byte("echo Pre-bootstrap actions"))
39+
postBootstrapData := base64.StdEncoding.EncodeToString([]byte("echo Post-bootstrap actions"))
40+
nodeConfigYamlData := base64.StdEncoding.EncodeToString([]byte("image: my-custom-image"))
41+
42+
return []v1alpha1.UserDataStage{
43+
{Stage: v1alpha1.PreBootstrapStage, Data: preBootstrapData},
44+
{Stage: v1alpha1.PostBootstrapStage, Data: postBootstrapData},
45+
{Stage: v1alpha1.NodeConfigYamlStage, Data: nodeConfigYamlData},
46+
}
47+
}
48+
3749
func TestAutoscalerTags(t *testing.T) {
3850
var (
3951
k = MockKubernetesClientSet()
@@ -1418,3 +1430,54 @@ func TestGetEksLatestAmi(t *testing.T) {
14181430

14191431
}
14201432
}
1433+
1434+
func TestGetEksLatestAmiForAL2023(t *testing.T) {
1435+
var (
1436+
k = MockKubernetesClientSet()
1437+
ig = MockInstanceGroup()
1438+
config = ig.GetEKSConfiguration()
1439+
asgMock = NewAutoScalingMocker()
1440+
iamMock = NewIamMocker()
1441+
eksMock = NewEksMocker()
1442+
ec2Mock = NewEc2Mocker()
1443+
ssmMock = NewSsmMocker()
1444+
instanceType = "m5.large"
1445+
)
1446+
w := MockAwsWorker(asgMock, iamMock, eksMock, ec2Mock, ssmMock)
1447+
ig.GetEKSConfiguration().UserData = mockUserDataStages()
1448+
1449+
tests := []struct {
1450+
name string
1451+
OSFamily string
1452+
arch string
1453+
expectedError error
1454+
}{
1455+
{
1456+
name: "amazonlinux2023",
1457+
OSFamily: "",
1458+
arch: "x86_64",
1459+
expectedError: nil,
1460+
},
1461+
}
1462+
1463+
for _, tc := range tests {
1464+
config.InstanceType = instanceType
1465+
ctx := MockContext(ig, k, w)
1466+
ctx.GetDiscoveredState().SetInstanceTypeInfo([]*ec2.InstanceTypeInfo{
1467+
{
1468+
InstanceType: aws.String(instanceType),
1469+
ProcessorInfo: &ec2.ProcessorInfo{
1470+
SupportedArchitectures: []*string{aws.String(tc.arch)},
1471+
},
1472+
},
1473+
})
1474+
_, err := ctx.GetEksLatestAmi()
1475+
if err == nil && tc.expectedError == nil {
1476+
continue
1477+
}
1478+
if err != nil && tc.expectedError != nil && err.Error() != tc.expectedError.Error() {
1479+
t.Fatalf("expected %v got %v, test %s", tc.expectedError, err, tc.name)
1480+
}
1481+
1482+
}
1483+
}

controllers/provisioners/provisioners.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ type ProvisionerInput struct {
3030
ConfigRetention int
3131
Metrics *common.MetricsCollector
3232
DisableWinClusterInjection bool
33-
AmazonLinuxOsFamily string
3433
}
3534

3635
var (

controllers/reconcilers.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,10 @@ func (r *InstanceGroupReconciler) namespaceReconciler(obj client.Object) []ctrl.
190190
return nil
191191
}
192192

193+
oldNsAnnotations := map[string]string{}
194+
193195
if val, ok := r.Namespaces[name]; ok {
196+
oldNsAnnotations = val.GetAnnotations()
194197
if reflect.DeepEqual(val.GetAnnotations(), ns.GetAnnotations()) {
195198
// annotations not modified
196199
return nil
@@ -209,6 +212,7 @@ func (r *InstanceGroupReconciler) namespaceReconciler(obj client.Object) []ctrl.
209212

210213
requests := make([]ctrl.Request, 0)
211214
for _, ig := range instanceGroups.Items {
215+
ctrl.Log.Info("found namespace diff for instancegroup", "instancegroup", namespacedName, "old", oldNsAnnotations, "new", ns.GetAnnotations())
212216
requests = append(requests, ctrl.Request{
213217
NamespacedName: types.NamespacedName{
214218
Namespace: ig.GetNamespace(),
@@ -256,6 +260,8 @@ func (r *InstanceGroupReconciler) nodeReconciler(obj client.Object) []ctrl.Reque
256260
},
257261
}
258262

263+
ctrl.Log.Info("patching node label", "nodeName", nodeName, "label", nodeLabels)
264+
259265
patchJSON, err := json.Marshal(labelPatch)
260266
if err != nil {
261267
r.Log.Error(err, "failed to marshal node labels", "node", nodeName, "patch", string(patchJSON))
@@ -312,6 +318,7 @@ func (r *InstanceGroupReconciler) spotEventReconciler(obj client.Object) []ctrl.
312318
return nil
313319
}
314320

321+
ctrl.Log.Info("found spot recommendation for instancegroup", "instancegroup", instanceGroup)
315322
return []ctrl.Request{
316323
{
317324
NamespacedName: instanceGroup,

main.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,6 @@ func main() {
8080
configRetention int
8181
err error
8282
defaultScalingConfiguration string
83-
amazonLinuxOsFamily string
8483
)
8584

8685
flag.IntVar(&maxParallel, "max-workers", 5, "The number of maximum parallel reconciles")
@@ -94,7 +93,6 @@ func main() {
9493
flag.BoolVar(&nodeRelabel, "node-relabel", true, "relabel nodes as they join with kubernetes.io/role label via controller")
9594
flag.BoolVar(&disableWinClusterInjection, "disable-windows-cluster-ca-injection", false, "Setting this to true will cause the ClusterCA and Endpoint to not be injected for Windows nodes")
9695
flag.StringVar(&defaultScalingConfiguration, "default-scaling-configuration", "LaunchTemplate", "By default ASGs will have LaunchTemplate. Set this string to either 'LaunchConfiguration' or 'LaunchTemplate' to enforce defaults.")
97-
flag.StringVar(&amazonLinuxOsFamily, "amazon-linux-os-family", "", "Setting this determines the amazon linux os family version for instance groups. Set this string to 'amazonlinux2023' or 'amazonlinux2'.")
9896
flag.Parse()
9997
ctrl.SetLogger(zap.New(zap.UseDevMode(true)))
10098

@@ -175,7 +173,6 @@ func main() {
175173
Aws: awsWorker,
176174
Kubernetes: kube,
177175
},
178-
AmazonLinuxOsFamily: amazonLinuxOsFamily,
179176
}).SetupWithManager(mgr)
180177
if err != nil {
181178
setupLog.Error(err, "unable to create controller", "controller", "instancegroup")

0 commit comments

Comments
 (0)