func()

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
}