diff --git a/api/kyverno/v1/rule_types.go b/api/kyverno/v1/rule_types.go
index 546c6b72a3..94f84249f5 100644
--- a/api/kyverno/v1/rule_types.go
+++ b/api/kyverno/v1/rule_types.go
@@ -6,13 +6,33 @@ import (
"reflect"
wildcard "github.com/kyverno/go-wildcard"
- "github.com/kyverno/kyverno/pkg/utils/kube"
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/validation/field"
)
+type ImageExtractorConfigs map[string][]ImageExtractorConfig
+
+type ImageExtractorConfig struct {
+ // Path is the path to the object containing the image field in a custom resource.
+ // It should be slash-separated. Each slash-separated key must be a valid YAML key or a wildcard '*'.
+ // Wildcard keys are expanded in case of arrays or objects.
+ Path string `json:"path" yaml:"path"`
+ // Value is an optional name of the field within 'path' that points to the image URI.
+ // This is useful when a custom 'key' is also defined.
+ // +optional
+ Value string `json:"value,omitempty" yaml:"value,omitempty"`
+ // Name is the entry the image will be available under 'images.' in the context.
+ // If this field is not defined, image entries will appear under 'images.custom'.
+ // +optional
+ Name string `json:"name,omitempty" yaml:"name,omitempty"`
+ // Key is an optional name of the field within 'path' that will be used to uniquely identify an image.
+ // Note - this field MUST be unique.
+ // +optional
+ Key string `json:"key,omitempty" yaml:"key,omitempty"`
+}
+
// Rule defines a validation, mutation, or generation control for matching resources.
// Each rules contains a match declaration to select resources, and an optional exclude
// declaration to specify which resources to exclude.
@@ -40,7 +60,7 @@ type Rule struct {
// ImageExtractors defines a mapping from kinds to ImageExtractorConfigs.
// This config is only valid for verifyImages rules.
// +optional
- ImageExtractors kube.ImageExtractorConfigs `json:"imageExtractors,omitempty" yaml:"imageExtractors,omitempty"`
+ ImageExtractors ImageExtractorConfigs `json:"imageExtractors,omitempty" yaml:"imageExtractors,omitempty"`
// Preconditions are used to determine if a policy rule should be applied by evaluating a
// set of conditions. The declaration can contain nested `any` or `all` statements. A direct list
diff --git a/api/kyverno/v1/zz_generated.deepcopy.go b/api/kyverno/v1/zz_generated.deepcopy.go
index f02c6fee4b..97abe33bf3 100755
--- a/api/kyverno/v1/zz_generated.deepcopy.go
+++ b/api/kyverno/v1/zz_generated.deepcopy.go
@@ -20,7 +20,6 @@ limitations under the License.
package v1
import (
- "github.com/kyverno/kyverno/pkg/utils/kube"
rbacv1 "k8s.io/api/rbac/v1"
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -595,6 +594,50 @@ func (in *Generation) DeepCopy() *Generation {
return out
}
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ImageExtractorConfig) DeepCopyInto(out *ImageExtractorConfig) {
+ *out = *in
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageExtractorConfig.
+func (in *ImageExtractorConfig) DeepCopy() *ImageExtractorConfig {
+ if in == nil {
+ return nil
+ }
+ out := new(ImageExtractorConfig)
+ in.DeepCopyInto(out)
+ return out
+}
+
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in ImageExtractorConfigs) DeepCopyInto(out *ImageExtractorConfigs) {
+ {
+ in := &in
+ *out = make(ImageExtractorConfigs, len(*in))
+ for key, val := range *in {
+ var outVal []ImageExtractorConfig
+ if val == nil {
+ (*out)[key] = nil
+ } else {
+ in, out := &val, &outVal
+ *out = make([]ImageExtractorConfig, len(*in))
+ copy(*out, *in)
+ }
+ (*out)[key] = outVal
+ }
+ }
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ImageExtractorConfigs.
+func (in ImageExtractorConfigs) DeepCopy() ImageExtractorConfigs {
+ if in == nil {
+ return nil
+ }
+ out := new(ImageExtractorConfigs)
+ in.DeepCopyInto(out)
+ return *out
+}
+
// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (in *ImageRegistry) DeepCopyInto(out *ImageRegistry) {
*out = *in
@@ -977,14 +1020,14 @@ func (in *Rule) DeepCopyInto(out *Rule) {
in.ExcludeResources.DeepCopyInto(&out.ExcludeResources)
if in.ImageExtractors != nil {
in, out := &in.ImageExtractors, &out.ImageExtractors
- *out = make(kube.ImageExtractorConfigs, len(*in))
+ *out = make(ImageExtractorConfigs, len(*in))
for key, val := range *in {
- var outVal []kube.ImageExtractorConfig
+ var outVal []ImageExtractorConfig
if val == nil {
(*out)[key] = nil
} else {
in, out := &val, &outVal
- *out = make([]kube.ImageExtractorConfig, len(*in))
+ *out = make([]ImageExtractorConfig, len(*in))
copy(*out, *in)
}
(*out)[key] = outVal
diff --git a/docs/crd/v1/index.html b/docs/crd/v1/index.html
index 03283ce28f..23b816552d 100644
--- a/docs/crd/v1/index.html
+++ b/docs/crd/v1/index.html
@@ -1648,6 +1648,81 @@ resource will be created with default data only.
+
+
+
+
+
+
+Field |
+Description |
+
+
+
+
+
+path
+
+string
+
+ |
+
+ Path is the path to the object containing the image field in a custom resource.
+It should be slash-separated. Each slash-separated key must be a valid YAML key or a wildcard ‘*’.
+Wildcard keys are expanded in case of arrays or objects.
+ |
+
+
+
+value
+
+string
+
+ |
+
+(Optional)
+ Value is an optional name of the field within ‘path’ that points to the image URI.
+This is useful when a custom ‘key’ is also defined.
+ |
+
+
+
+name
+
+string
+
+ |
+
+(Optional)
+ Name is the entry the image will be available under ‘images.’ in the context.
+If this field is not defined, image entries will appear under ‘images.custom’.
+ |
+
+
+
+key
+
+string
+
+ |
+
+(Optional)
+ Key is an optional name of the field within ‘path’ that will be used to uniquely identify an image.
+Note - this field MUST be unique.
+ |
+
+
+
+
+
+
+(Appears on:
+Rule)
+
+
+
ImageRegistry
@@ -2607,7 +2682,9 @@ and admission review request information like the name or role.
imageExtractors
-github.com/kyverno/kyverno/pkg/utils/kube.ImageExtractorConfigs
+
+ImageExtractorConfigs
+
|
diff --git a/pkg/engine/context/context.go b/pkg/engine/context/context.go
index aadd6827b4..0e9b45b507 100644
--- a/pkg/engine/context/context.go
+++ b/pkg/engine/context/context.go
@@ -6,9 +6,10 @@ import (
"sync"
jsonpatch "github.com/evanphx/json-patch/v5"
- urkyverno "github.com/kyverno/kyverno/api/kyverno/v1beta1"
+ kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
+ kyvernov1beta1 "github.com/kyverno/kyverno/api/kyverno/v1beta1"
pkgcommon "github.com/kyverno/kyverno/pkg/common"
- kubeutils "github.com/kyverno/kyverno/pkg/utils/kube"
+ apiutils "github.com/kyverno/kyverno/pkg/utils/api"
"github.com/pkg/errors"
admissionv1 "k8s.io/api/admission/v1"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
@@ -50,7 +51,7 @@ type Interface interface {
AddOldResource(data map[string]interface{}) error
// AddUserInfo merges userInfo json under kyverno.userInfo
- AddUserInfo(userInfo urkyverno.RequestInfo) error
+ AddUserInfo(userInfo kyvernov1beta1.RequestInfo) error
// AddServiceAccount merges ServiceAccount types
AddServiceAccount(userName string) error
@@ -62,17 +63,17 @@ type Interface interface {
AddElement(data interface{}, index int) error
// AddImageInfo adds image info to the context
- AddImageInfo(info kubeutils.ImageInfo) error
+ AddImageInfo(info apiutils.ImageInfo) error
// AddImageInfos adds image infos to the context
AddImageInfos(resource *unstructured.Unstructured) error
// ImageInfo returns image infos present in the context
- ImageInfo() map[string]map[string]kubeutils.ImageInfo
+ ImageInfo() map[string]map[string]apiutils.ImageInfo
// GenerateCustomImageInfo returns image infos as defined by a custom image extraction config
// and updates the context
- GenerateCustomImageInfo(resource *unstructured.Unstructured, imageExtractorConfigs kubeutils.ImageExtractorConfigs) (map[string]map[string]kubeutils.ImageInfo, error)
+ GenerateCustomImageInfo(resource *unstructured.Unstructured, imageExtractorConfigs kyvernov1.ImageExtractorConfigs) (map[string]map[string]apiutils.ImageInfo, error)
// Checkpoint creates a copy of the current internal state and pushes it into a stack of stored states.
Checkpoint()
@@ -94,7 +95,7 @@ type context struct {
mutex sync.RWMutex
jsonRaw []byte
jsonRawCheckpoints [][]byte
- images map[string]map[string]kubeutils.ImageInfo
+ images map[string]map[string]apiutils.ImageInfo
}
// NewContext returns a new context
@@ -166,7 +167,7 @@ func (ctx *context) AddOldResource(data map[string]interface{}) error {
}
// AddUserInfo adds userInfo at path request.userInfo
-func (ctx *context) AddUserInfo(userRequestInfo urkyverno.RequestInfo) error {
+func (ctx *context) AddUserInfo(userRequestInfo kyvernov1beta1.RequestInfo) error {
return addToContext(ctx, userRequestInfo, "request")
}
@@ -231,7 +232,7 @@ func (ctx *context) AddElement(data interface{}, index int) error {
return addToContext(ctx, data)
}
-func (ctx *context) AddImageInfo(info kubeutils.ImageInfo) error {
+func (ctx *context) AddImageInfo(info apiutils.ImageInfo) error {
data := map[string]interface{}{
"image": info.String(),
"registry": info.Registry,
@@ -247,7 +248,7 @@ func (ctx *context) AddImageInfos(resource *unstructured.Unstructured) error {
log.Log.V(4).Info("extracting image info", "obj", resource.UnstructuredContent())
- images, err := kubeutils.ExtractImagesFromResource(*resource, nil)
+ images, err := apiutils.ExtractImagesFromResource(*resource, nil)
if err != nil {
return err
}
@@ -261,8 +262,8 @@ func (ctx *context) AddImageInfos(resource *unstructured.Unstructured) error {
return addToContext(ctx, images, "images")
}
-func (ctx *context) GenerateCustomImageInfo(resource *unstructured.Unstructured, imageExtractorConfigs kubeutils.ImageExtractorConfigs) (map[string]map[string]kubeutils.ImageInfo, error) {
- images, err := kubeutils.ExtractImagesFromResource(*resource, imageExtractorConfigs)
+func (ctx *context) GenerateCustomImageInfo(resource *unstructured.Unstructured, imageExtractorConfigs kyvernov1.ImageExtractorConfigs) (map[string]map[string]apiutils.ImageInfo, error) {
+ images, err := apiutils.ExtractImagesFromResource(*resource, imageExtractorConfigs)
if err != nil {
return nil, errors.Wrapf(err, "failed to extract images")
}
@@ -275,7 +276,7 @@ func (ctx *context) GenerateCustomImageInfo(resource *unstructured.Unstructured,
return images, addToContext(ctx, images, "images")
}
-func (ctx *context) ImageInfo() map[string]map[string]kubeutils.ImageInfo {
+func (ctx *context) ImageInfo() map[string]map[string]apiutils.ImageInfo {
return ctx.images
}
diff --git a/pkg/engine/imageVerify.go b/pkg/engine/imageVerify.go
index 6ffbd77f57..56c8abc9e3 100644
--- a/pkg/engine/imageVerify.go
+++ b/pkg/engine/imageVerify.go
@@ -21,7 +21,7 @@ import (
engineUtils "github.com/kyverno/kyverno/pkg/engine/utils"
"github.com/kyverno/kyverno/pkg/engine/variables"
"github.com/kyverno/kyverno/pkg/registryclient"
- kubeutils "github.com/kyverno/kyverno/pkg/utils/kube"
+ apiutils "github.com/kyverno/kyverno/pkg/utils/api"
"github.com/pkg/errors"
"sigs.k8s.io/controller-runtime/pkg/log"
)
@@ -139,7 +139,7 @@ type imageVerifier struct {
resp *response.EngineResponse
}
-func (iv *imageVerifier) verify(imageVerify v1.ImageVerification, images map[string]map[string]kubeutils.ImageInfo) {
+func (iv *imageVerifier) verify(imageVerify v1.ImageVerification, images map[string]map[string]apiutils.ImageInfo) {
// for backward compatibility
imageVerify = *imageVerify.Convert()
@@ -193,7 +193,7 @@ func (iv *imageVerifier) verify(imageVerify v1.ImageVerification, images map[str
}
}
-func (iv *imageVerifier) handleMutateDigest(digest string, imageInfo kubeutils.ImageInfo) ([]byte, error) {
+func (iv *imageVerifier) handleMutateDigest(digest string, imageInfo apiutils.ImageInfo) ([]byte, error) {
if digest == "" {
digest, err := fetchImageDigest(imageInfo.String())
if err != nil {
@@ -211,7 +211,7 @@ func (iv *imageVerifier) handleMutateDigest(digest string, imageInfo kubeutils.I
return patch, nil
}
-func (iv *imageVerifier) markImageVerified(imageVerify v1.ImageVerification, ruleResp *response.RuleResponse, digest string, imageInfo kubeutils.ImageInfo) *response.RuleResponse {
+func (iv *imageVerifier) markImageVerified(imageVerify v1.ImageVerification, ruleResp *response.RuleResponse, digest string, imageInfo apiutils.ImageInfo) *response.RuleResponse {
if hasImageVerifiedAnnotationChanged(iv.policyContext, imageInfo.Name, digest) {
msg := "changes to `images.kyverno.io` annotation are not allowed"
return ruleResponse(*iv.rule, response.ImageVerify, msg, response.RuleStatusFail, nil)
@@ -243,7 +243,7 @@ func hasImageVerifiedAnnotationChanged(ctx *PolicyContext, name, digest string)
return newValue != oldValue
}
-func makeImageVerifiedPatches(imageInfo kubeutils.ImageInfo, digest string, verified, hasAnnotations bool) ([][]byte, error) {
+func makeImageVerifiedPatches(imageInfo apiutils.ImageInfo, digest string, verified, hasAnnotations bool) ([][]byte, error) {
var patches [][]byte
if !hasAnnotations {
var addAnnotationsPatch = make(map[string]interface{})
@@ -314,7 +314,7 @@ func imageMatches(image string, imagePatterns []string) bool {
return false
}
-func (iv *imageVerifier) verifySignatures(imageVerify v1.ImageVerification, imageInfo kubeutils.ImageInfo) (*response.RuleResponse, string) {
+func (iv *imageVerifier) verifySignatures(imageVerify v1.ImageVerification, imageInfo apiutils.ImageInfo) (*response.RuleResponse, string) {
image := imageInfo.String()
iv.logger.V(2).Info("verifying image signatures", "image", image, "attestors", len(imageVerify.Attestors), "attestations", len(imageVerify.Attestations))
@@ -479,7 +479,7 @@ func (iv *imageVerifier) buildOptionsAndPath(attestor v1.Attestor, imageVerify v
return opts, path
}
-func makeAddDigestPatch(imageInfo kubeutils.ImageInfo, digest string) ([]byte, error) {
+func makeAddDigestPatch(imageInfo apiutils.ImageInfo, digest string) ([]byte, error) {
var patch = make(map[string]interface{})
patch["op"] = "replace"
patch["path"] = imageInfo.Pointer
@@ -487,7 +487,7 @@ func makeAddDigestPatch(imageInfo kubeutils.ImageInfo, digest string) ([]byte, e
return json.Marshal(patch)
}
-func (iv *imageVerifier) verifyAttestations(imageVerify v1.ImageVerification, imageInfo kubeutils.ImageInfo) *response.RuleResponse {
+func (iv *imageVerifier) verifyAttestations(imageVerify v1.ImageVerification, imageInfo apiutils.ImageInfo) *response.RuleResponse {
image := imageInfo.String()
start := time.Now()
@@ -539,7 +539,7 @@ func buildStatementMap(statements []map[string]interface{}) map[string][]map[str
return results
}
-func (iv *imageVerifier) checkAttestations(a v1.Attestation, s map[string]interface{}, img kubeutils.ImageInfo) (bool, error) {
+func (iv *imageVerifier) checkAttestations(a v1.Attestation, s map[string]interface{}, img apiutils.ImageInfo) (bool, error) {
if len(a.Conditions) == 0 {
return true, nil
}
diff --git a/pkg/engine/imageVerifyValidate.go b/pkg/engine/imageVerifyValidate.go
index dc901fbd4a..917edc311e 100644
--- a/pkg/engine/imageVerifyValidate.go
+++ b/pkg/engine/imageVerifyValidate.go
@@ -13,7 +13,7 @@ import (
gojmespath "github.com/jmespath/go-jmespath"
kyverno "github.com/kyverno/kyverno/api/kyverno/v1"
"github.com/kyverno/kyverno/pkg/engine/response"
- kubeutils "github.com/kyverno/kyverno/pkg/utils/kube"
+ apiutils "github.com/kyverno/kyverno/pkg/utils/api"
"github.com/pkg/errors"
)
@@ -61,7 +61,7 @@ func processImageValidationRule(log logr.Logger, ctx *PolicyContext, rule *kyver
return ruleResponse(*rule, response.Validation, "image verified", response.RuleStatusPass, nil)
}
-func validateImage(ctx *PolicyContext, imageVerify *kyverno.ImageVerification, imageInfo kubeutils.ImageInfo) error {
+func validateImage(ctx *PolicyContext, imageVerify *kyverno.ImageVerification, imageInfo apiutils.ImageInfo) error {
image := imageInfo.String()
if imageVerify.VerifyDigest && imageInfo.Digest == "" {
log.Log.Info("missing digest", "request.object", ctx.NewResource.UnstructuredContent())
@@ -87,7 +87,7 @@ type ImageVerificationMetadata struct {
Digest string `json:"digest,omitempty"`
}
-func isImageVerified(ctx *PolicyContext, imageInfo kubeutils.ImageInfo) (bool, error) {
+func isImageVerified(ctx *PolicyContext, imageInfo apiutils.ImageInfo) (bool, error) {
if reflect.DeepEqual(ctx.NewResource, unstructured.Unstructured{}) {
return false, errors.Errorf("resource does not exist")
}
diff --git a/pkg/engine/imageVerify_test.go b/pkg/engine/imageVerify_test.go
index 0e895c1d97..7c8a744f1e 100644
--- a/pkg/engine/imageVerify_test.go
+++ b/pkg/engine/imageVerify_test.go
@@ -6,7 +6,6 @@ import (
"strings"
"testing"
- kubeutils "github.com/kyverno/kyverno/pkg/utils/kube"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"sigs.k8s.io/controller-runtime/pkg/log"
@@ -15,6 +14,7 @@ import (
"github.com/kyverno/kyverno/pkg/engine/context"
"github.com/kyverno/kyverno/pkg/engine/response"
"github.com/kyverno/kyverno/pkg/engine/utils"
+ apiutils "github.com/kyverno/kyverno/pkg/utils/api"
"gotest.tools/assert"
)
@@ -533,7 +533,7 @@ func Test_MarkImageVerified(t *testing.T) {
ruleResp := &response.RuleResponse{Status: response.RuleStatusPass}
digest := "sha256:859ab6768a6f26a79bc42b231664111317d095a4f04e4b6fe79ce37b3d199097"
- imageInfo := kubeutils.ImageInfo{}
+ imageInfo := apiutils.ImageInfo{}
imageInfo.Name = "nginx"
iv.markImageVerified(imageVerifyRule, ruleResp, digest, imageInfo)
diff --git a/pkg/engine/jsonContext.go b/pkg/engine/jsonContext.go
index e3a951e7b6..168102bac0 100644
--- a/pkg/engine/jsonContext.go
+++ b/pkg/engine/jsonContext.go
@@ -3,6 +3,7 @@ package engine
import (
"encoding/json"
"fmt"
+
"github.com/go-logr/logr"
"github.com/google/go-containerregistry/pkg/name"
"github.com/google/go-containerregistry/pkg/v1/remote"
diff --git a/pkg/utils/kube/image.go b/pkg/utils/api/image.go
similarity index 78%
rename from pkg/utils/kube/image.go
rename to pkg/utils/api/image.go
index 8fe8618ee2..acb532f994 100644
--- a/pkg/utils/kube/image.go
+++ b/pkg/utils/api/image.go
@@ -1,10 +1,11 @@
-package kube
+package api
import (
"fmt"
"strconv"
"strings"
+ kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
imageutils "github.com/kyverno/kyverno/pkg/utils/image"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
)
@@ -15,27 +16,6 @@ type ImageInfo struct {
Pointer string `json:"-"`
}
-type ImageExtractorConfigs map[string][]ImageExtractorConfig
-
-type ImageExtractorConfig struct {
- // Path is the path to the object containing the image field in a custom resource.
- // It should be slash-separated. Each slash-separated key must be a valid YAML key or a wildcard '*'.
- // Wildcard keys are expanded in case of arrays or objects.
- Path string `json:"path" yaml:"path"`
- // Value is an optional name of the field within 'path' that points to the image URI.
- // This is useful when a custom 'key' is also defined.
- // +optional
- Value string `json:"value,omitempty" yaml:"value,omitempty"`
- // Name is the entry the image will be available under 'images.' in the context.
- // If this field is not defined, image entries will appear under 'images.custom'.
- // +optional
- Name string `json:"name,omitempty" yaml:"name,omitempty"`
- // Key is an optional name of the field within 'path' that will be used to uniquely identify an image.
- // Note - this field MUST be unique.
- // +optional
- Key string `json:"key,omitempty" yaml:"key,omitempty"`
-}
-
var (
podExtractors = BuildStandardExtractors("spec")
podControllerExtractors = BuildStandardExtractors("spec", "template", "spec")
@@ -132,7 +112,7 @@ func BuildStandardExtractors(tags ...string) []imageExtractor {
return extractors
}
-func lookupImageExtractor(kind string, configs ImageExtractorConfigs) []imageExtractor {
+func lookupImageExtractor(kind string, configs kyvernov1.ImageExtractorConfigs) []imageExtractor {
if configs != nil {
if extractorConfigs, ok := configs[kind]; ok {
extractors := []imageExtractor{}
@@ -169,7 +149,7 @@ func lookupImageExtractor(kind string, configs ImageExtractorConfigs) []imageExt
return registeredExtractors[kind]
}
-func ExtractImagesFromResource(resource unstructured.Unstructured, configs ImageExtractorConfigs) (map[string]map[string]ImageInfo, error) {
+func ExtractImagesFromResource(resource unstructured.Unstructured, configs kyvernov1.ImageExtractorConfigs) (map[string]map[string]ImageInfo, error) {
infos := map[string]map[string]ImageInfo{}
extractors := lookupImageExtractor(resource.GetKind(), configs)
diff --git a/pkg/utils/kube/image_test.go b/pkg/utils/api/image_test.go
similarity index 94%
rename from pkg/utils/kube/image_test.go
rename to pkg/utils/api/image_test.go
index 710aece368..a104849b7c 100644
--- a/pkg/utils/kube/image_test.go
+++ b/pkg/utils/api/image_test.go
@@ -1,8 +1,9 @@
-package kube
+package api
import (
"testing"
+ kyvernov1 "github.com/kyverno/kyverno/api/kyverno/v1"
"github.com/kyverno/kyverno/pkg/engine/utils"
imageutils "github.com/kyverno/kyverno/pkg/utils/image"
"gotest.tools/assert"
@@ -10,7 +11,7 @@ import (
func Test_extractImageInfo(t *testing.T) {
tests := []struct {
- extractionConfig ImageExtractorConfigs
+ extractionConfig kyvernov1.ImageExtractorConfigs
raw []byte
images map[string]map[string]ImageInfo
}{
@@ -125,8 +126,8 @@ func Test_extractImageInfo(t *testing.T) {
},
},
{
- extractionConfig: ImageExtractorConfigs{
- "Task": []ImageExtractorConfig{
+ extractionConfig: kyvernov1.ImageExtractorConfigs{
+ "Task": []kyvernov1.ImageExtractorConfig{
{Path: "/spec/steps/*/image"},
},
},
@@ -164,8 +165,8 @@ func Test_extractImageInfo(t *testing.T) {
},
},
{
- extractionConfig: ImageExtractorConfigs{
- "Task": []ImageExtractorConfig{
+ extractionConfig: kyvernov1.ImageExtractorConfigs{
+ "Task": []kyvernov1.ImageExtractorConfig{
{Name: "steps", Path: "/spec/steps/*", Value: "image", Key: "name"},
},
}, raw: []byte(`{"apiVersion":"tekton.dev/v1beta1","kind":"Task","metadata":{"name":"example-task-name"},"spec":{"steps":[{"name":"ubuntu-example","image":"ubuntu","args":["ubuntu-build-example","SECRETS-example.md"]},{"name":"dockerfile-pushexample","image":"gcr.io/example-builders/push-example","args":["push","$(resources.outputs.builtImage.url)"]}]}}`),
@@ -193,8 +194,8 @@ func Test_extractImageInfo(t *testing.T) {
},
},
{
- extractionConfig: ImageExtractorConfigs{
- "ClusterTask": []ImageExtractorConfig{
+ extractionConfig: kyvernov1.ImageExtractorConfigs{
+ "ClusterTask": []kyvernov1.ImageExtractorConfig{
{Name: "steps", Path: "/spec/steps/*", Value: "image", Key: "name"},
},
},
|