in substrate/pkg/controller/substrate/cluster/instanceprofile.go [111:155]
func (i *InstanceProfile) Delete(ctx context.Context, substrate *v1alpha1.Substrate) (reconcile.Result, error) {
// Policy
if _, err := i.IAM.DeleteRolePolicyWithContext(ctx, &iam.DeleteRolePolicyInput{RoleName: discovery.Name(substrate), PolicyName: discovery.Name(substrate)}); err != nil {
if err.(awserr.Error).Code() != iam.ErrCodeNoSuchEntityException {
return reconcile.Result{}, fmt.Errorf("removing policy from role, %w", err)
}
} else {
logging.FromContext(ctx).Infof("Deleted policy %s from role %s", aws.StringValue(discovery.Name(substrate)), aws.StringValue(discovery.Name(substrate)))
}
// Managed Policies
for _, policy := range ManagedPolicies {
if _, err := i.IAM.DetachRolePolicyWithContext(ctx, &iam.DetachRolePolicyInput{RoleName: discovery.Name(substrate), PolicyArn: aws.String(policy)}); err != nil {
if err.(awserr.Error).Code() != iam.ErrCodeNoSuchEntityException {
return reconcile.Result{}, fmt.Errorf("detatching policy from role, %w", err)
}
} else {
logging.FromContext(ctx).Infof("Deleted policy %s from role %s", aws.StringValue(discovery.Name(substrate)), aws.StringValue(discovery.Name(substrate)))
}
}
// Binding
if _, err := i.IAM.RemoveRoleFromInstanceProfileWithContext(ctx, &iam.RemoveRoleFromInstanceProfileInput{RoleName: discovery.Name(substrate), InstanceProfileName: discovery.Name(substrate)}); err != nil {
if err.(awserr.Error).Code() != iam.ErrCodeNoSuchEntityException {
return reconcile.Result{}, fmt.Errorf("removing instance profile from role %w,", err)
}
} else {
logging.FromContext(ctx).Infof("Deleted role %s from instance profile %s", aws.StringValue(discovery.Name(substrate)), aws.StringValue(discovery.Name(substrate)))
}
// Profile
if _, err := i.IAM.DeleteInstanceProfileWithContext(ctx, &iam.DeleteInstanceProfileInput{InstanceProfileName: discovery.Name(substrate)}); err != nil {
if err.(awserr.Error).Code() != iam.ErrCodeNoSuchEntityException {
return reconcile.Result{}, fmt.Errorf("deleting instance profile %w,", err)
}
} else {
logging.FromContext(ctx).Infof("Deleted instance profile %s", aws.StringValue(discovery.Name(substrate)))
}
// Role
if _, err := i.IAM.DeleteRoleWithContext(ctx, &iam.DeleteRoleInput{RoleName: discovery.Name(substrate)}); err != nil {
if err.(awserr.Error).Code() != iam.ErrCodeNoSuchEntityException {
return reconcile.Result{}, fmt.Errorf("deleting role, %w", err)
}
} else {
logging.FromContext(ctx).Infof("Deleted role %s", aws.StringValue(discovery.Name(substrate)))
}
return reconcile.Result{}, nil
}