Skip to content

Commit 945f73d

Browse files
author
Michal Minář
committed
whitelist spec.dockerImageRepository for updates
Signed-off-by: Michal Minář <[email protected]>
1 parent 15f78b4 commit 945f73d

File tree

2 files changed

+38
-7
lines changed

2 files changed

+38
-7
lines changed

pkg/image/apis/image/validation/validation.go

+3
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,9 @@ type referencePath struct {
362362
func collectImageStreamSpecImageReferences(s *imageapi.ImageStream) sets.String {
363363
res := sets.NewString()
364364

365+
if len(s.Spec.DockerImageRepository) > 0 {
366+
res.Insert(s.Spec.DockerImageRepository)
367+
}
365368
for _, tagRef := range s.Spec.Tags {
366369
if tagRef.From != nil && tagRef.From.Kind == "DockerImage" {
367370
res.Insert(tagRef.From.Name)

pkg/image/apis/image/validation/validation_test.go

+35-7
Original file line numberDiff line numberDiff line change
@@ -852,13 +852,15 @@ func TestValidateImageStreamWithWhitelister(t *testing.T) {
852852

853853
func TestValidateImageStreamUpdateWithWhitelister(t *testing.T) {
854854
for _, tc := range []struct {
855-
name string
856-
whitelist *serverapi.AllowedRegistries
857-
oldSpecTags map[string]imageapi.TagReference
858-
oldStatusTags map[string]imageapi.TagEventList
859-
newSpecTags map[string]imageapi.TagReference
860-
newStatusTags map[string]imageapi.TagEventList
861-
expected field.ErrorList
855+
name string
856+
whitelist *serverapi.AllowedRegistries
857+
oldDockerImageRepository string
858+
newDockerImageRepository string
859+
oldSpecTags map[string]imageapi.TagReference
860+
oldStatusTags map[string]imageapi.TagEventList
861+
newSpecTags map[string]imageapi.TagReference
862+
newStatusTags map[string]imageapi.TagEventList
863+
expected field.ErrorList
862864
}{
863865
{
864866
name: "no old referencess",
@@ -977,6 +979,30 @@ func TestValidateImageStreamUpdateWithWhitelister(t *testing.T) {
977979
},
978980
},
979981
},
982+
983+
{
984+
name: "allow whitelisted dockerImageRepository",
985+
whitelist: mkAllowed(false, "docker.io"),
986+
oldDockerImageRepository: "example.com/my/app",
987+
newDockerImageRepository: "docker.io/my/newapp",
988+
},
989+
990+
{
991+
name: "forbid not whitelisted dockerImageRepository",
992+
whitelist: mkAllowed(false, "docker.io"),
993+
oldDockerImageRepository: "docker.io/my/app",
994+
newDockerImageRepository: "example.com/my/newapp",
995+
expected: field.ErrorList{
996+
field.Forbidden(field.NewPath("spec", "dockerImageRepository"),
997+
`registry "example.com" not allowed by whitelist { "docker.io:443" }`)},
998+
},
999+
1000+
{
1001+
name: "permit no change to not whitelisted dockerImageRepository",
1002+
whitelist: mkAllowed(false, "docker.io"),
1003+
oldDockerImageRepository: "example.com/my/newapp",
1004+
newDockerImageRepository: "example.com/my/newapp",
1005+
},
9801006
} {
9811007
t.Run(tc.name, func(t *testing.T) {
9821008
whitelister := mkWhitelister(t, tc.whitelist)
@@ -988,6 +1014,7 @@ func TestValidateImageStreamUpdateWithWhitelister(t *testing.T) {
9881014
oldStream := imageapi.ImageStream{
9891015
ObjectMeta: objMeta,
9901016
Spec: imageapi.ImageStreamSpec{
1017+
DockerImageRepository: tc.oldDockerImageRepository,
9911018
Tags: tc.oldSpecTags,
9921019
},
9931020
Status: imageapi.ImageStreamStatus{
@@ -997,6 +1024,7 @@ func TestValidateImageStreamUpdateWithWhitelister(t *testing.T) {
9971024
newStream := imageapi.ImageStream{
9981025
ObjectMeta: objMeta,
9991026
Spec: imageapi.ImageStreamSpec{
1027+
DockerImageRepository: tc.newDockerImageRepository,
10001028
Tags: tc.newSpecTags,
10011029
},
10021030
Status: imageapi.ImageStreamStatus{

0 commit comments

Comments
 (0)