Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: implement AssignImage mutator #2429

Merged
merged 34 commits into from
Jan 24, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
c06edf7
Implement AssignImage mutator
davis-haba Dec 6, 2022
acab9fe
fix tests
davis-haba Dec 6, 2022
cc6b0ad
fix controller gen setup
davis-haba Dec 6, 2022
e644184
fix helm manifest generation
davis-haba Dec 7, 2022
f20bf4f
WIP assignimage byPod status
davis-haba Dec 7, 2022
f02daed
mutator pod status working for assignimage
davis-haba Dec 7, 2022
6eada2f
e2e test assignimage mutator deleted
davis-haba Dec 7, 2022
f586335
old kubectl run
davis-haba Dec 7, 2022
a3e64d1
address comments. domain must have '.' unless localhost
davis-haba Dec 8, 2022
2eac13b
appease linter
davis-haba Dec 8, 2022
b9499ab
fix gator tests
davis-haba Dec 8, 2022
b5521ff
add test domain ending in colon still converges
davis-haba Dec 8, 2022
7bb472f
docs for assignimage
davis-haba Dec 8, 2022
fc2b112
remove newline
davis-haba Dec 8, 2022
fa11b39
address comments
davis-haba Dec 14, 2022
8cf83ab
appease linter
davis-haba Dec 14, 2022
f6baca6
cleanup dead code branch
davis-haba Dec 14, 2022
4e88c2c
validateDomain to use splitDomain
davis-haba Dec 15, 2022
adbe835
future-proof validateImageParts. Add custom error types.
davis-haba Dec 22, 2022
f553ff2
fix readiness tracker test
davis-haba Dec 22, 2022
52fa795
make manifests
davis-haba Dec 22, 2022
e4baaae
validate that splitting a valid tag never returns a path
davis-haba Dec 30, 2022
9b38667
Merge branch 'master' into docker-image-mutator
davis-haba Jan 3, 2023
9102ee9
degenerate cases for unit tests. do not expose regex on image compone…
davis-haba Jan 10, 2023
a97be6a
test missing image field. update error copy.
davis-haba Jan 11, 2023
88df8e5
tag error copy
davis-haba Jan 11, 2023
69d3930
Merge branch 'master' into docker-image-mutator
sozercan Jan 20, 2023
81095a6
Merge branch 'master' into docker-image-mutator
davis-haba Jan 21, 2023
50d8f16
Update pkg/expansion/system_test.go
davis-haba Jan 21, 2023
82e78eb
Update pkg/mutation/mutators/assignimage/assignimage_mutator.go
davis-haba Jan 21, 2023
c269326
Merge branch 'master' into docker-image-mutator
davis-haba Jan 21, 2023
09389e3
errors.As instead of type casting in unit tests
davis-haba Jan 21, 2023
d2caf9f
fix error type checking
davis-haba Jan 21, 2023
2012f39
Merge branch 'master' into docker-image-mutator
sozercan Jan 24, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 16 additions & 5 deletions pkg/mutation/mutators/assignimage/assignimage_mutator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ type aiTestConfig struct {
applyTo []match.ApplyTo
}

func newAiMutator(cfg *aiTestConfig) *Mutator {
m := newAi(cfg)
func newAIMutator(cfg *aiTestConfig) *Mutator {
m := newAI(cfg)
m2, err := MutatorForAssignImage(m)
if err != nil {
panic(err)
}
return m2
}

func newAi(cfg *aiTestConfig) *mutationsunversioned.AssignImage {
func newAI(cfg *aiTestConfig) *mutationsunversioned.AssignImage {
m := &mutationsunversioned.AssignImage{
ObjectMeta: metav1.ObjectMeta{
Name: "Foo",
Expand Down Expand Up @@ -110,6 +110,17 @@ func TestMutate(t *testing.T) {
obj: newPod("library/busybox:v1", "foo"),
fn: podTest("library/busybox:new"),
},
{
name: "mutate path and tag with empty image",
davis-haba marked this conversation as resolved.
Show resolved Hide resolved
cfg: &aiTestConfig{
applyTo: []match.ApplyTo{{Groups: []string{""}, Versions: []string{"v1"}, Kinds: []string{"Foo"}}},
location: `spec.containers[name:foo].image`,
path: "library/busybox",
tag: ":new",
},
obj: newPod("", "foo"),
fn: podTest("library/busybox:new"),
},
{
name: "mutate path",
cfg: &aiTestConfig{
Expand Down Expand Up @@ -249,7 +260,7 @@ func TestMutate(t *testing.T) {

for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
mutator := newAiMutator(test.cfg)
mutator := newAIMutator(test.cfg)
obj := test.obj.DeepCopy()
_, err := mutator.Mutate(&types.Mutable{Object: obj})
if err != nil {
Expand Down Expand Up @@ -337,7 +348,7 @@ func TestMutatorForAssignImage(t *testing.T) {

for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
mut, err := MutatorForAssignImage(newAi(tc.cfg))
mut, err := MutatorForAssignImage(newAI(tc.cfg))
if err != nil && mut != nil {
t.Errorf("returned non-nil mutator but got err: %s", err)
}
Expand Down
6 changes: 3 additions & 3 deletions pkg/mutation/mutators/assignimage/errors.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,23 +27,23 @@ type metadataRootError struct{ baseError }
func newInvalidDomainError(domain string) invalidDomainError {
return invalidDomainError{
baseError{
fmt.Sprintf("assignDomain %q does not match pattern %s", domain, domainRegexp.String()),
fmt.Sprintf("assignDomain %q must be a fully-qualified domain name or localhost", domain),
},
}
}

func newInvalidPathError(path string) invalidPathError {
return invalidPathError{
baseError{
fmt.Sprintf("assignPath %q does not match pattern %s", path, pathRegexp.String()),
fmt.Sprintf("assignPath %q must be a valid docker image path", path),
},
}
}

func newInvalidTagError(tag string) invalidTagError {
return invalidTagError{
baseError{
fmt.Sprintf("assignTag %q does not match pattern %s", tag, tagRegexp.String()),
fmt.Sprintf("assignTag %q must be a valid docker image tag", tag),
davis-haba marked this conversation as resolved.
Show resolved Hide resolved
},
}
}
Expand Down
9 changes: 9 additions & 0 deletions pkg/mutation/mutators/assignimage/imageparser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,15 @@ func TestNewImage(t *testing.T) {
tag: ":latest",
},
},
{
name: "all empty components",
imageRef: "",
want: image{
domain: "",
path: "",
tag: "",
},
},
{
name: "full image with hash",
imageRef: "some-image/hello@sha256:abcde",
Expand Down