Skip to content

Commit

Permalink
Merge pull request #4949 from koba1t/fix/add_check_kustomization_is_e…
Browse files Browse the repository at this point in the history
…mpty

add check that kustomization is empty
  • Loading branch information
k8s-ci-robot authored May 26, 2023
2 parents e1c530e + 928b823 commit cf3e81b
Show file tree
Hide file tree
Showing 5 changed files with 92 additions and 10 deletions.
5 changes: 5 additions & 0 deletions api/internal/target/kusttarget.go
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,11 @@ func (kt *KustTarget) Load() error {

k.FixKustomization()

// check that Kustomization is empty
if err := k.CheckEmpty(); err != nil {
return err
}

errs := k.EnforceFields()
if len(errs) > 0 {
return fmt.Errorf(
Expand Down
1 change: 1 addition & 0 deletions api/internal/target/kusttarget_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ func TestLoad(t *testing.T) {
k: types.Kustomization{
TypeMeta: expectedTypeMeta,
},
errContains: "kustomization.yaml is empty",
},
"nonsenseLatin": {
errContains: "found a tab character that violates indentation",
Expand Down
15 changes: 13 additions & 2 deletions api/krusty/directoryarrangement_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,20 @@ import (
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
)

const expectedResources = `apiVersion: v1
kind: Service
metadata:
name: myService
spec:
ports:
- port: 7002
`

func TestIssue596AllowDirectoriesThatAreSubstringsOfEachOther(t *testing.T) {
th := kusttest_test.MakeHarness(t)
th.WriteK("base", "")
th.WriteF("base/service.yaml", expectedResources)
th.WriteK("base", `resources:
- service.yaml`)
th.WriteK("overlays/aws", `
resources:
- ../../base
Expand All @@ -25,5 +36,5 @@ resources:
- ../aws-nonprod
`)
m := th.Run("overlays/aws-sandbox2.us-east-1", th.MakeDefaultOptions())
th.AssertActualEqualsExpected(m, "")
th.AssertActualEqualsExpected(m, expectedResources)
}
15 changes: 15 additions & 0 deletions api/types/kustomization.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"bytes"
"encoding/json"
"fmt"
"reflect"

"sigs.k8s.io/kustomize/kyaml/errors"
"sigs.k8s.io/kustomize/kyaml/filesys"
Expand Down Expand Up @@ -300,6 +301,20 @@ func (k *Kustomization) FixKustomizationPreMarshalling(fSys filesys.FileSystem)
return nil
}

func (k *Kustomization) CheckEmpty() error {
// generate empty Kustomization
emptyKustomization := &Kustomization{}

// k.TypeMeta is metadata. It Isn't related to whether empty or not.
emptyKustomization.TypeMeta = k.TypeMeta

if reflect.DeepEqual(k, emptyKustomization) {
return fmt.Errorf("kustomization.yaml is empty")
}

return nil
}

func (k *Kustomization) EnforceFields() []string {
var errs []string
if k.Kind != "" && k.Kind != KustomizationKind && k.Kind != ComponentKind {
Expand Down
66 changes: 58 additions & 8 deletions api/types/kustomization_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -284,14 +284,64 @@ unknown: foo`)
}
}

func TestUnmarshal_InvalidYaml(t *testing.T) {
y := []byte(`
apiVersion: kustomize.config.k8s.io/v1beta1
func TestUnmarshal_Failed(t *testing.T) {
tests := []struct {
name string
kustomizationYamls []byte
errMsg string
}{
{
name: "invalid yaml",
kustomizationYamls: []byte(`apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
unknown`)
var k Kustomization
err := k.Unmarshal(y)
if err == nil {
t.Fatalf("expect an error")
unknown`),
errMsg: "invalid Kustomization: yaml: line 4: could not find expected ':'",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var k Kustomization
if err := k.Unmarshal(tt.kustomizationYamls); err == nil || err.Error() != tt.errMsg {
t.Errorf("Kustomization.Unmarshal() error = %v, wantErr %v", err, tt.errMsg)
}
})
}
}

func TestKustomization_CheckEmpty(t *testing.T) {
tests := []struct {
name string
kustomization *Kustomization
wantErr bool
}{
{
name: "empty kustomization.yaml",
kustomization: &Kustomization{},
wantErr: true,
},
{
name: "empty kustomization.yaml",
kustomization: &Kustomization{
TypeMeta: TypeMeta{
Kind: KustomizationKind,
APIVersion: KustomizationVersion,
},
},
wantErr: true,
},
{
name: "non empty kustomization.yaml",
kustomization: &Kustomization{Resources: []string{"res"}},
wantErr: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
k := tt.kustomization
k.FixKustomization()
if err := k.CheckEmpty(); (err != nil) != tt.wantErr {
t.Errorf("Kustomization.CheckEmpty() error = %v, wantErr %v", err, tt.wantErr)
}
})
}
}

0 comments on commit cf3e81b

Please sign in to comment.