Skip to content

Commit

Permalink
Fix deregistering of deleted CAPI Machines
Browse files Browse the repository at this point in the history
We have an issue that there is a gap between the CAPI Machine deletion and the AWSMachine deletion.
In this timeframe the kube-apiserver to the to be deleted control plane is no longer possible, but the deregistering of the LB member will be performed only for AWSMachine deletions.
This PR fixes the gap and also deregisteres the instance if the CAPI Machine is deleted.

Signed-off-by: Tobias Giese <[email protected]>
  • Loading branch information
tobiasgiese authored and k8s-infra-cherrypick-robot committed Dec 20, 2023
1 parent 5b87cee commit d6cd10b
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
4 changes: 2 additions & 2 deletions controllers/awsmachine_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -835,8 +835,8 @@ func (r *AWSMachineReconciler) reconcileLBAttachment(machineScope *scope.Machine
elbsvc := r.getELBService(elbScope)

// In order to prevent sending request to a "not-ready" control plane machines, it is required to remove the machine
// from the ELB as soon as the machine gets deleted or when the machine is in a not running state.
if !machineScope.AWSMachine.DeletionTimestamp.IsZero() || !machineScope.InstanceIsRunning() {
// from the ELB as soon as the machine or infra machine gets deleted or when the machine is in a not running state.
if machineScope.AWSMachineIsDeleted() || machineScope.MachineIsDeleted() || !machineScope.InstanceIsRunning() {
if elbScope.ControlPlaneLoadBalancer().LoadBalancerType == infrav1.LoadBalancerTypeClassic {
machineScope.Debug("deregistering from classic load balancer")
return r.deregisterInstanceFromClassicLB(machineScope, elbsvc, i)
Expand Down
7 changes: 6 additions & 1 deletion pkg/cloud/scope/machine.go
Original file line number Diff line number Diff line change
Expand Up @@ -360,11 +360,16 @@ func (m *MachineScope) InstanceIsInKnownState() bool {
return state != nil && infrav1.InstanceKnownStates.Has(string(*state))
}

// AWSMachineIsDeleted checks if the machine was deleted.
// AWSMachineIsDeleted checks if the AWS machine was deleted.
func (m *MachineScope) AWSMachineIsDeleted() bool {
return !m.AWSMachine.ObjectMeta.DeletionTimestamp.IsZero()
}

// MachineIsDeleted checks if the machine was deleted.
func (m *MachineScope) MachineIsDeleted() bool {
return !m.Machine.ObjectMeta.DeletionTimestamp.IsZero()
}

// IsEKSManaged checks if the machine is EKS managed.
func (m *MachineScope) IsEKSManaged() bool {
return m.InfraCluster.InfraCluster().GetObjectKind().GroupVersionKind().Kind == ekscontrolplanev1.AWSManagedControlPlaneKind
Expand Down

0 comments on commit d6cd10b

Please sign in to comment.