func()

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
}