in substrate/pkg/controller/substrate/cluster/instance.go [104:126]
func (i *Instance) delete(ctx context.Context, substrate *v1alpha1.Substrate, predicate func(*ec2.Instance) bool) error {
instancesOutput, err := i.EC2.DescribeInstancesWithContext(ctx, &ec2.DescribeInstancesInput{Filters: discovery.Filters(substrate)})
if err != nil {
return fmt.Errorf("describing instances, %w", err)
}
instances := []*string{}
for _, reservation := range instancesOutput.Reservations {
for _, instance := range reservation.Instances {
if predicate(instance) {
instances = append(instances, instance.InstanceId)
}
}
}
if len(instances) == 0 {
return nil
}
if _, err := i.EC2.TerminateInstancesWithContext(ctx, &ec2.TerminateInstancesInput{InstanceIds: instances}); err != nil {
return fmt.Errorf("terminating instances, %w", err)
}
logging.FromContext(ctx).Infof("Deleted instances %v", aws.StringValueSlice(instances))
return nil
}