diff --git a/pkg/background/common/resource.go b/pkg/background/common/resource.go index 5fb4621073f4..c02bfb3b4b2a 100644 --- a/pkg/background/common/resource.go +++ b/pkg/background/common/resource.go @@ -3,6 +3,7 @@ package common import ( "context" "fmt" + "reflect" "github.com/go-logr/logr" kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1" @@ -15,7 +16,12 @@ import ( ) func GetResource(client dclient.Interface, resourceSpec kyvernov1.ResourceSpec, urSpec kyvernov2.UpdateRequestSpec, log logr.Logger) (resource *unstructured.Unstructured, err error) { - if urSpec.GetResource().GetUID() != "" { + obj := resourceSpec + if reflect.DeepEqual(obj, kyvernov1.ResourceSpec{}) { + obj = urSpec.GetResource() + } + + if obj.GetUID() != "" { triggers, err := client.ListResource(context.TODO(), resourceSpec.GetAPIVersion(), resourceSpec.GetKind(), resourceSpec.GetNamespace(), nil) if err != nil { return nil, fmt.Errorf("failed to list trigger resources: %v", err) @@ -26,7 +32,7 @@ func GetResource(client dclient.Interface, resourceSpec kyvernov1.ResourceSpec, return &trigger, nil } } - } else if urSpec.GetResource().GetName() != "" { + } else if obj.GetName() != "" { if resourceSpec.Kind == "Namespace" { resourceSpec.Namespace = "" } @@ -51,8 +57,12 @@ func GetResource(client dclient.Interface, resourceSpec kyvernov1.ResourceSpec, } resource, err = kubeutils.BytesToUnstructured(raw) + if err != nil { + return nil, fmt.Errorf("failed to convert raw object to unstructured: %v", err) + } else { + return resource, nil + } } - log.V(3).Info("fetched trigger resource", "resourceSpec", resourceSpec) - return resource, err + return nil, fmt.Errorf("resource not found") } diff --git a/pkg/background/generate/generate.go b/pkg/background/generate/generate.go index a248aadf03d6..3321c189e1e7 100644 --- a/pkg/background/generate/generate.go +++ b/pkg/background/generate/generate.go @@ -92,7 +92,7 @@ func NewGenerateController( } func (c *GenerateController) ProcessUR(ur *kyvernov2.UpdateRequest) error { - logger := c.log.WithValues("name", ur.GetName(), "policy", ur.Spec.GetPolicyKey(), "resource", ur.Spec.GetResource().String()) + logger := c.log.WithValues("name", ur.GetName(), "policy", ur.Spec.GetPolicyKey()) var err error var genResources []kyvernov1.ResourceSpec logger.Info("start processing UR", "ur", ur.Name, "resourceVersion", ur.GetResourceVersion()) @@ -137,6 +137,7 @@ const doesNotApply = "policy does not apply to resource" func (c *GenerateController) getTrigger(spec kyvernov2.UpdateRequestSpec, i int) (*unstructured.Unstructured, error) { resourceSpec := spec.RuleContext[i].Trigger + c.log.V(4).Info("fetching trigger", "trigger", resourceSpec.String()) admissionRequest := spec.Context.AdmissionRequestInfo.AdmissionRequest if admissionRequest == nil { return common.GetResource(c.client, resourceSpec, spec, c.log)