Skip to content

Commit cc16742

Browse files
committed
Add AWSMachines to back the ec2 instances in AWSMachinePools and AWSManagedMachinePools
1 parent c23e955 commit cc16742

15 files changed

+480
-37
lines changed

config/crd/bases/infrastructure.cluster.x-k8s.io_awsmachinepools.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -1042,6 +1042,10 @@ spec:
10421042
during the reconciliation of Machines can be added as events to
10431043
the Machine object and/or logged in the controller's output."
10441044
type: string
1045+
infrastructureMachineKind:
1046+
description: InfrastructureMachineKind is the kind of the infrastructure
1047+
resources behind MachinePool Machines.
1048+
type: string
10451049
instances:
10461050
description: Instances contains the status for each instance in the
10471051
pool

config/crd/bases/infrastructure.cluster.x-k8s.io_awsmanagedmachinepools.yaml

+4
Original file line numberDiff line numberDiff line change
@@ -972,6 +972,10 @@ spec:
972972
events to the MachinePool object and/or logged in the controller's
973973
output."
974974
type: string
975+
infrastructureMachineKind:
976+
description: InfrastructureMachineKind is the kind of the infrastructure
977+
resources behind MachinePool Machines.
978+
type: string
975979
launchTemplateID:
976980
description: The ID of the launch template
977981
type: string

config/rbac/role.yaml

+9
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,14 @@ rules:
114114
- cluster.x-k8s.io
115115
resources:
116116
- machines
117+
verbs:
118+
- delete
119+
- get
120+
- list
121+
- watch
122+
- apiGroups:
123+
- cluster.x-k8s.io
124+
resources:
117125
- machines/status
118126
verbs:
119127
- get
@@ -298,6 +306,7 @@ rules:
298306
resources:
299307
- awsmachines
300308
verbs:
309+
- create
301310
- delete
302311
- get
303312
- list

controllers/awsmachine_controller.go

+17-7
Original file line numberDiff line numberDiff line change
@@ -143,10 +143,11 @@ func (r *AWSMachineReconciler) getObjectStoreService(scope scope.S3Scope) servic
143143
return s3.NewService(scope)
144144
}
145145

146-
// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=awsmachines,verbs=get;list;watch;update;patch;delete
147-
// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=awsmachines/status,verbs=get;update;patch
148146
// +kubebuilder:rbac:groups=controlplane.cluster.x-k8s.io,resources=*,verbs=get;list;watch
149-
// +kubebuilder:rbac:groups=cluster.x-k8s.io,resources=machines;machines/status,verbs=get;list;watch
147+
// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=awsmachines,verbs=create;get;list;watch;update;patch;delete
148+
// +kubebuilder:rbac:groups=infrastructure.cluster.x-k8s.io,resources=awsmachines/status,verbs=get;update;patch
149+
// +kubebuilder:rbac:groups=cluster.x-k8s.io,resources=machines,verbs=get;list;watch;delete
150+
// +kubebuilder:rbac:groups=cluster.x-k8s.io,resources=machines/status,verbs=get;list;watch
150151
// +kubebuilder:rbac:groups="",resources=secrets;,verbs=get;list;watch
151152
// +kubebuilder:rbac:groups="",resources=namespaces,verbs=get;list;watch
152153
// +kubebuilder:rbac:groups="",resources=events,verbs=get;list;watch;create;update;patch
@@ -450,6 +451,7 @@ func (r *AWSMachineReconciler) findInstance(machineScope *scope.MachineScope, ec
450451
return instance, nil
451452
}
452453

454+
//nolint:gocyclo
453455
func (r *AWSMachineReconciler) reconcileNormal(_ context.Context, machineScope *scope.MachineScope, clusterScope cloud.ClusterScoper, ec2Scope scope.EC2Scope, elbScope scope.ELBScope, objectStoreScope scope.S3Scope) (ctrl.Result, error) {
454456
machineScope.Trace("Reconciling AWSMachine")
455457

@@ -473,7 +475,7 @@ func (r *AWSMachineReconciler) reconcileNormal(_ context.Context, machineScope *
473475
}
474476

475477
// Make sure bootstrap data is available and populated.
476-
if machineScope.Machine.Spec.Bootstrap.DataSecretName == nil {
478+
if !machineScope.IsMachinePoolMachine() && machineScope.Machine.Spec.Bootstrap.DataSecretName == nil {
477479
machineScope.Info("Bootstrap data secret reference is not yet available")
478480
conditions.MarkFalse(machineScope.AWSMachine, infrav1.InstanceReadyCondition, infrav1.WaitingForBootstrapDataReason, clusterv1.ConditionSeverityInfo, "")
479481
return ctrl.Result{}, nil
@@ -488,6 +490,12 @@ func (r *AWSMachineReconciler) reconcileNormal(_ context.Context, machineScope *
488490
conditions.MarkUnknown(machineScope.AWSMachine, infrav1.InstanceReadyCondition, infrav1.InstanceNotFoundReason, err.Error())
489491
return ctrl.Result{}, err
490492
}
493+
if instance == nil && machineScope.IsMachinePoolMachine() {
494+
err = errors.New("no instance found for machine pool")
495+
machineScope.Error(err, "unable to find instance")
496+
conditions.MarkUnknown(machineScope.AWSMachine, infrav1.InstanceReadyCondition, infrav1.InstanceNotFoundReason, err.Error())
497+
return ctrl.Result{}, err
498+
}
491499

492500
// If the AWSMachine doesn't have our finalizer, add it.
493501
if controllerutil.AddFinalizer(machineScope.AWSMachine, infrav1.MachineFinalizer) {
@@ -572,9 +580,11 @@ func (r *AWSMachineReconciler) reconcileNormal(_ context.Context, machineScope *
572580
}
573581

574582
// reconcile the deletion of the bootstrap data secret now that we have updated instance state
575-
if deleteSecretErr := r.deleteBootstrapData(machineScope, clusterScope, objectStoreScope); deleteSecretErr != nil {
576-
r.Log.Error(deleteSecretErr, "unable to delete secrets")
577-
return ctrl.Result{}, deleteSecretErr
583+
if !machineScope.IsMachinePoolMachine() {
584+
if deleteSecretErr := r.deleteBootstrapData(machineScope, clusterScope, objectStoreScope); deleteSecretErr != nil {
585+
r.Log.Error(deleteSecretErr, "unable to delete secrets")
586+
return ctrl.Result{}, deleteSecretErr
587+
}
578588
}
579589

580590
if instance.State == infrav1.InstanceStateTerminated {

exp/api/v1beta1/conversion.go

+11-1
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ func (src *AWSMachinePool) ConvertTo(dstRaw conversion.Hub) error {
5050
if restored.Spec.AvailabilityZoneSubnetType != nil {
5151
dst.Spec.AvailabilityZoneSubnetType = restored.Spec.AvailabilityZoneSubnetType
5252
}
53+
dst.Status.InfrastructureMachineKind = restored.Status.InfrastructureMachineKind
5354

5455
if restored.Spec.AWSLaunchTemplate.PrivateDNSName != nil {
5556
dst.Spec.AWSLaunchTemplate.PrivateDNSName = restored.Spec.AWSLaunchTemplate.PrivateDNSName
@@ -80,7 +81,6 @@ func (src *AWSMachinePoolList) ConvertTo(dstRaw conversion.Hub) error {
8081
// ConvertFrom converts the v1beta2 AWSMachinePoolList receiver to v1beta1 AWSMachinePoolList.
8182
func (r *AWSMachinePoolList) ConvertFrom(srcRaw conversion.Hub) error {
8283
src := srcRaw.(*infrav1exp.AWSMachinePoolList)
83-
8484
return Convert_v1beta2_AWSMachinePoolList_To_v1beta1_AWSMachinePoolList(src, r, nil)
8585
}
8686

@@ -110,6 +110,8 @@ func (src *AWSManagedMachinePool) ConvertTo(dstRaw conversion.Hub) error {
110110
dst.Spec.AvailabilityZoneSubnetType = restored.Spec.AvailabilityZoneSubnetType
111111
}
112112

113+
dst.Status.InfrastructureMachineKind = restored.Status.InfrastructureMachineKind
114+
113115
return nil
114116
}
115117

@@ -129,6 +131,14 @@ func Convert_v1beta2_AWSManagedMachinePoolSpec_To_v1beta1_AWSManagedMachinePoolS
129131
return autoConvert_v1beta2_AWSManagedMachinePoolSpec_To_v1beta1_AWSManagedMachinePoolSpec(in, out, s)
130132
}
131133

134+
func Convert_v1beta2_AWSMachinePoolStatus_To_v1beta1_AWSMachinePoolStatus(in *infrav1exp.AWSMachinePoolStatus, out *AWSMachinePoolStatus, s apiconversion.Scope) error {
135+
return autoConvert_v1beta2_AWSMachinePoolStatus_To_v1beta1_AWSMachinePoolStatus(in, out, s)
136+
}
137+
138+
func Convert_v1beta2_AWSManagedMachinePoolStatus_To_v1beta1_AWSManagedMachinePoolStatus(in *infrav1exp.AWSManagedMachinePoolStatus, out *AWSManagedMachinePoolStatus, s apiconversion.Scope) error {
139+
return autoConvert_v1beta2_AWSManagedMachinePoolStatus_To_v1beta1_AWSManagedMachinePoolStatus(in, out, s)
140+
}
141+
132142
// ConvertTo converts the v1beta1 AWSManagedMachinePoolList receiver to a v1beta2 AWSManagedMachinePoolList.
133143
func (src *AWSManagedMachinePoolList) ConvertTo(dstRaw conversion.Hub) error {
134144
dst := dstRaw.(*infrav1exp.AWSManagedMachinePoolList)

exp/api/v1beta1/zz_generated.conversion.go

+12-20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

exp/api/v1beta2/awsmachinepool_types.go

+4
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,10 @@ type AWSMachinePoolStatus struct {
199199
// +optional
200200
LaunchTemplateVersion *string `json:"launchTemplateVersion,omitempty"`
201201

202+
// InfrastructureMachineKind is the kind of the infrastructure resources behind MachinePool Machines.
203+
// +optional
204+
InfrastructureMachineKind string `json:"infrastructureMachineKind,omitempty"`
205+
202206
// FailureReason will be set in the event that there is a terminal problem
203207
// reconciling the Machine and will contain a succinct value suitable
204208
// for machine interpretation.

exp/api/v1beta2/awsmanagedmachinepool_types.go

+4
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,10 @@ type AWSManagedMachinePoolStatus struct {
195195
// +optional
196196
LaunchTemplateVersion *string `json:"launchTemplateVersion,omitempty"`
197197

198+
// InfrastructureMachineKind is the kind of the infrastructure resources behind MachinePool Machines.
199+
// +optional
200+
InfrastructureMachineKind string `json:"infrastructureMachineKind,omitempty"`
201+
198202
// FailureReason will be set in the event that there is a terminal problem
199203
// reconciling the MachinePool and will contain a succinct value suitable
200204
// for machine interpretation.

exp/api/v1beta2/conditions_consts.go

+5
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ const (
5454
InstanceRefreshNotReadyReason = "InstanceRefreshNotReady"
5555
// InstanceRefreshFailedReason used to report when there instance refresh is not initiated.
5656
InstanceRefreshFailedReason = "InstanceRefreshFailed"
57+
58+
// AWSMachineCreationFailed reports if creating AWSMachines to represent asg machines failed.
59+
AWSMachineCreationFailed = "AWSMachineCreationFailed"
60+
// AWSMachineDeletionFailed reports if deleting AWSMachines failed.
61+
AWSMachineDeletionFailed = "AWSMachineDeletionFailed"
5762
)
5863

5964
const (

exp/api/v1beta2/types.go

+5
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ import (
2222
infrav1 "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2"
2323
)
2424

25+
const (
26+
// KindMachinePool is a MachinePool resource Kind
27+
KindMachinePool string = "MachinePool"
28+
)
29+
2530
// EBS can be used to automatically set up EBS volumes when an instance is launched.
2631
type EBS struct {
2732
// Encrypted is whether the volume should be encrypted or not.

0 commit comments

Comments
 (0)