in substrate/pkg/controller/substrate/infrastructure/internetgateway.go [82:116]
func (i *InternetGateway) Delete(ctx context.Context, substrate *v1alpha1.Substrate) (reconcile.Result, error) {
describeVpcsOutput, err := i.EC2.DescribeVpcsWithContext(ctx, &ec2.DescribeVpcsInput{Filters: discovery.Filters(substrate)})
if err != nil {
return reconcile.Result{}, fmt.Errorf("describing vpc, %w", err)
}
if len(describeVpcsOutput.Vpcs) == 0 {
return reconcile.Result{}, nil
}
describeInternetGatewaysOutput, err := i.EC2.DescribeInternetGatewaysWithContext(ctx, &ec2.DescribeInternetGatewaysInput{Filters: discovery.Filters(substrate)})
if err != nil {
return reconcile.Result{}, fmt.Errorf("describing internet gateways, %w", err)
}
if len(describeInternetGatewaysOutput.InternetGateways) == 0 {
return reconcile.Result{}, nil
}
if _, err := i.EC2.DetachInternetGatewayWithContext(ctx, &ec2.DetachInternetGatewayInput{
VpcId: describeVpcsOutput.Vpcs[0].VpcId, InternetGatewayId: describeInternetGatewaysOutput.InternetGateways[0].InternetGatewayId,
}); err != nil {
if err.(awserr.Error).Code() == "DependencyViolation" {
return reconcile.Result{Requeue: true}, nil
}
if err.(awserr.Error).Code() != "Gateway.NotAttached" {
return reconcile.Result{}, fmt.Errorf("detaching internet gateway, %w", err)
}
} else {
logging.FromContext(ctx).Infof("Deleted internet gateway %s attachment to %s", aws.StringValue(describeVpcsOutput.Vpcs[0].VpcId), aws.StringValue(describeInternetGatewaysOutput.InternetGateways[0].InternetGatewayId))
}
if _, err := i.EC2.DeleteInternetGatewayWithContext(ctx, &ec2.DeleteInternetGatewayInput{
InternetGatewayId: describeInternetGatewaysOutput.InternetGateways[0].InternetGatewayId,
}); err != nil {
return reconcile.Result{}, fmt.Errorf("deleting internet gateway, %w", err)
}
logging.FromContext(ctx).Infof("Deleted internet gateway %s", aws.StringValue(describeInternetGatewaysOutput.InternetGateways[0].InternetGatewayId))
return reconcile.Result{}, nil
}