in internal/deployers/eksapi/infra.go [234:275]
func (m *InfrastructureManager) deleteInfrastructureStack() error {
infra, err := m.getInfrastructureStackResources()
if err != nil {
var notFound *cloudformationtypes.StackNotFoundException
if errors.As(err, ¬Found) {
klog.Infof("infrastructure stack does not exist: %s", m.resourceID)
return nil
}
return err
}
if err := m.deleteLeakedInstanceProfiles(infra); err != nil {
return err
}
input := cloudformation.DeleteStackInput{
StackName: aws.String(m.resourceID),
}
klog.Infof("deleting infrastructure stack: %s", m.resourceID)
_, err = m.clients.CFN().DeleteStack(context.TODO(), &input)
if err != nil {
var notFound *cloudformationtypes.StackNotFoundException
if errors.As(err, ¬Found) {
klog.Infof("infrastructure stack does not exist: %s", m.resourceID)
return nil
}
return fmt.Errorf("failed to delete infrastructure stack: %w", err)
}
klog.Infof("waiting for infrastructure stack to be deleted: %s", m.resourceID)
err = cloudformation.NewStackDeleteCompleteWaiter(m.clients.CFN()).
Wait(context.TODO(),
&cloudformation.DescribeStacksInput{
StackName: aws.String(m.resourceID),
},
infraStackDeletionTimeout)
if err != nil {
// don't fail the overall test, the janitor can clean this up
klog.Warningf("failed to wait for infrastructure stack deletion: %v", err)
m.metrics.Record(infraStackDeletionFailed, 1, nil)
return nil
}
klog.Infof("deleted infrastructure stack: %s", m.resourceID)
return nil
}