Skip to content

Commit

Permalink
Merge pull request #178 from nokia/block-owner-deletion
Browse files Browse the repository at this point in the history
Add additional info to error when blockOwnerDeletion is enabled
  • Loading branch information
nephio-prow[bot] authored Feb 18, 2025
2 parents 6a6ce21 + e0db88d commit 254bf73
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 0 deletions.
8 changes: 8 additions & 0 deletions pkg/engine/engine.go
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,10 @@ func (cad *cadEngine) CreatePackageRevision(ctx context.Context, repositoryObj *
}
pkgRevMeta, err = cad.metadataStore.Create(ctx, pkgRevMeta, repositoryObj.Name, repoPkgRev.UID())
if err != nil {
if (apierrors.IsUnauthorized(err) || apierrors.IsForbidden(err)) && repository.AnyBlockOwnerDeletionSet(obj) {
return nil, fmt.Errorf("failed to create internal PackageRev object, because blockOwnerDeletion is enabled for some ownerReference "+
"(it is likely that the serviceaccount of porch-server does not have the rights to update finalizers in the owner object): %w", err)
}
return nil, err
}
repoPkgRev.SetMeta(pkgRevMeta)
Expand Down Expand Up @@ -318,6 +322,10 @@ func (cad *cadEngine) UpdatePackageRevision(ctx context.Context, version string,

err = cad.updatePkgRevMeta(ctx, repoPkgRev, newObj)
if err != nil {
if (apierrors.IsUnauthorized(err) || apierrors.IsForbidden(err)) && repository.AnyBlockOwnerDeletionSet(newObj) {
return nil, fmt.Errorf("failed to update internal PackageRev object, because blockOwnerDeletion is enabled for some ownerReference "+
"(it is likely that the serviceaccount of porch-server does not have the rights to update finalizers in the owner object): %w", err)
}
return nil, err
}

Expand Down
12 changes: 12 additions & 0 deletions pkg/repository/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import (
"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/trace"
"golang.org/x/mod/semver"
"sigs.k8s.io/controller-runtime/pkg/client"
)

var tracer = otel.Tracer("repository/util")
Expand Down Expand Up @@ -136,3 +137,14 @@ func ValidateWorkspaceName(workspace api.WorkspaceName) error {

return nil
}

// AnyBlockOwnerDeletionSet checks whether there are any ownerReferences in the Object
// which have blockOwnerDeletion enabled (meaning either nil or true).
func AnyBlockOwnerDeletionSet(obj client.Object) bool {
for _, owner := range obj.GetOwnerReferences() {
if owner.BlockOwnerDeletion == nil || *owner.BlockOwnerDeletion {
return true
}
}
return false
}

0 comments on commit 254bf73

Please sign in to comment.