in pkg/controller/ingress/ingress_controller.go [446:491]
func (r *ReconcileIngress) delete(instance *extensionsv1beta1.Ingress) (*extensionsv1beta1.Ingress, *reconcile.Result, error) {
stack, err := cfn.DescribeStack(r.cfnSvc, instance.ObjectMeta.Name)
if err != nil && cfn.IsDoesNotExist(err, instance.ObjectMeta.Name) {
r.log.Info("stack doesn't exist, removing finalizer", zap.String("stackName", instance.ObjectMeta.Name))
instance.SetFinalizers(finalizers.RemoveFinalizer(instance, FinalizerCFNStack))
return instance, nil, nil
}
if err != nil {
r.log.Error("error describing apigateway cloudformation stack", zap.String("stackName", instance.ObjectMeta.Name), zap.Error(err))
return nil, nil, err
}
if cfn.IsDeleting(*stack.StackStatus) {
r.log.Info("retrying delete in 5 seconds", zap.String("status", *stack.StackStatus))
return instance, &reconcile.Result{RequeueAfter: 5 * time.Second}, nil
}
if cfn.DeleteComplete(*stack.StackStatus) {
r.log.Info("delete complete, removing finalizer", zap.String("stackName", instance.ObjectMeta.Name))
instance.SetFinalizers(finalizers.RemoveFinalizer(instance, FinalizerCFNStack))
return instance, nil, nil
}
// We want to retry delete even if DELETE_FAILED since removing Loadbalancer/VPCLink can be a bit finnicky
r.log.Info(
"deleting apigateway cloudformation stack",
zap.String("stackName", instance.ObjectMeta.Name),
zap.String("status", *stack.StackStatus),
)
err = r.detachTGFromASG(instance)
if err != nil {
r.log.Error("unable to verify ASG before delete", zap.Error(err))
return nil, nil, err
}
if _, err := r.cfnSvc.DeleteStack(&cloudformation.DeleteStackInput{
StackName: aws.String(instance.GetObjectMeta().GetName()),
}); err != nil {
r.log.Error("error deleting apigateway cloudformation stack", zap.Error(err))
return nil, nil, err
}
return instance, &reconcile.Result{Requeue: true}, nil
}