mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-12 01:14:22 +00:00
config tree defaults to graph structure when ownerRefs available
This commit is contained in:
@@ -98,9 +98,15 @@ func (p TreeWriter) Write(nodes []*yaml.RNode) error {
|
||||
return p.packageStructure(nodes)
|
||||
case TreeStructureGraph:
|
||||
return p.graphStructure(nodes)
|
||||
default:
|
||||
return p.packageStructure(nodes)
|
||||
}
|
||||
|
||||
// If any resource has an owner reference, default to the graph structure. Otherwise, use package structure.
|
||||
for _, node := range nodes {
|
||||
if owners, _ := node.Pipe(yaml.Lookup("metadata", "ownerReferences")); owners != nil {
|
||||
return p.graphStructure(nodes)
|
||||
}
|
||||
}
|
||||
return p.packageStructure(nodes)
|
||||
}
|
||||
|
||||
// node wraps a tree node, and any children nodes
|
||||
|
||||
@@ -12,7 +12,7 @@ import (
|
||||
"sigs.k8s.io/kustomize/kyaml/yaml"
|
||||
)
|
||||
|
||||
func TestPrinter_Write(t *testing.T) {
|
||||
func TestPrinter_Write_Package_Structure(t *testing.T) {
|
||||
in := `kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
@@ -66,7 +66,7 @@ spec:
|
||||
out := &bytes.Buffer{}
|
||||
err := Pipeline{
|
||||
Inputs: []Reader{&ByteReader{Reader: bytes.NewBufferString(in)}},
|
||||
Outputs: []Writer{TreeWriter{Writer: out}},
|
||||
Outputs: []Writer{TreeWriter{Writer: out, Structure: TreeStructurePackage}},
|
||||
}.Execute()
|
||||
if !assert.NoError(t, err) {
|
||||
t.FailNow()
|
||||
@@ -85,7 +85,7 @@ spec:
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrinter_Write_base(t *testing.T) {
|
||||
func TestPrinter_Write_Package_Structure_base(t *testing.T) {
|
||||
in := `kind: Deployment
|
||||
metadata:
|
||||
labels:
|
||||
@@ -139,7 +139,7 @@ spec:
|
||||
out := &bytes.Buffer{}
|
||||
err := Pipeline{
|
||||
Inputs: []Reader{&ByteReader{Reader: bytes.NewBufferString(in)}},
|
||||
Outputs: []Writer{TreeWriter{Writer: out}},
|
||||
Outputs: []Writer{TreeWriter{Writer: out, Structure: TreeStructurePackage}},
|
||||
}.Execute()
|
||||
if !assert.NoError(t, err) {
|
||||
t.FailNow()
|
||||
@@ -157,7 +157,7 @@ spec:
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrinter_Write_sort(t *testing.T) {
|
||||
func TestPrinter_Write_Package_Structure_sort(t *testing.T) {
|
||||
in := `apiVersion: extensions/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
@@ -255,7 +255,7 @@ spec:
|
||||
out := &bytes.Buffer{}
|
||||
err := Pipeline{
|
||||
Inputs: []Reader{&ByteReader{Reader: bytes.NewBufferString(in)}},
|
||||
Outputs: []Writer{TreeWriter{Writer: out}},
|
||||
Outputs: []Writer{TreeWriter{Writer: out, Structure: TreeStructurePackage}},
|
||||
}.Execute()
|
||||
if !assert.NoError(t, err) {
|
||||
t.FailNow()
|
||||
@@ -287,7 +287,7 @@ func TestPrinter_metaError(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrinter_Write_owners(t *testing.T) {
|
||||
func TestPrinter_Write_Graph_Structure(t *testing.T) {
|
||||
in := `
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
@@ -384,3 +384,210 @@ metadata:
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrinter_Write_Structure_Defaulting_when_ownerRefs_present(t *testing.T) {
|
||||
in := `
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: cockroachdb-0
|
||||
namespace: myapp-staging
|
||||
ownerReferences:
|
||||
- apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
name: cockroachdb
|
||||
spec:
|
||||
containers:
|
||||
- name: cockroachdb
|
||||
image: cockraochdb:1.1.1
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: cockroachdb-1
|
||||
namespace: myapp-staging
|
||||
ownerReferences:
|
||||
- apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
name: cockroachdb
|
||||
spec:
|
||||
containers:
|
||||
- name: cockroachdb
|
||||
image: cockraochdb:1.1.1
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: cockroachdb-2
|
||||
namespace: myapp-staging
|
||||
ownerReferences:
|
||||
- apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
name: cockroachdb
|
||||
spec:
|
||||
containers:
|
||||
- name: cockroachdb
|
||||
image: cockraochdb:1.1.0
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: cockroachdb
|
||||
namespace: myapp-staging
|
||||
ownerReferences:
|
||||
- apiVersion: app.k8s.io/v1beta1
|
||||
kind: Application
|
||||
name: myapp
|
||||
spec:
|
||||
replicas: 3
|
||||
containers:
|
||||
- name: cockroachdb
|
||||
image: cockraochdb:1.1.1
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: cockroachdb
|
||||
namespace: myapp-staging
|
||||
ownerReferences:
|
||||
- apiVersion: app.k8s.io/v1beta1
|
||||
kind: Application
|
||||
name: myapp
|
||||
---
|
||||
apiVersion: app.k8s.io/v1beta1
|
||||
kind: Application
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: myapp
|
||||
name: myapp
|
||||
namespace: myapp-staging
|
||||
`
|
||||
out := &bytes.Buffer{}
|
||||
err := Pipeline{
|
||||
Inputs: []Reader{&ByteReader{Reader: bytes.NewBufferString(in)}},
|
||||
Outputs: []Writer{TreeWriter{Writer: out}}, // Structure unspecified
|
||||
}.Execute()
|
||||
if !assert.NoError(t, err) {
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
if !assert.Equal(t, `.
|
||||
└── [Resource] Application myapp-staging/myapp
|
||||
├── [Resource] Service myapp-staging/cockroachdb
|
||||
└── [Resource] StatefulSet myapp-staging/cockroachdb
|
||||
├── [Resource] Pod myapp-staging/cockroachdb-0
|
||||
├── [Resource] Pod myapp-staging/cockroachdb-1
|
||||
└── [Resource] Pod myapp-staging/cockroachdb-2
|
||||
`, out.String()) {
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrinter_Write_Structure_Defaulting_when_ownerRefs_absent(t *testing.T) {
|
||||
in := `
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: cockroachdb-0
|
||||
namespace: myapp-staging
|
||||
spec:
|
||||
containers:
|
||||
- name: cockroachdb
|
||||
image: cockraochdb:1.1.1
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: cockroachdb-1
|
||||
namespace: myapp-staging
|
||||
spec:
|
||||
containers:
|
||||
- name: cockroachdb
|
||||
image: cockraochdb:1.1.1
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: cockroachdb-2
|
||||
namespace: myapp-staging
|
||||
spec:
|
||||
containers:
|
||||
- name: cockroachdb
|
||||
image: cockraochdb:1.1.0
|
||||
---
|
||||
apiVersion: apps/v1
|
||||
kind: StatefulSet
|
||||
metadata:
|
||||
name: cockroachdb
|
||||
namespace: myapp-staging
|
||||
spec:
|
||||
replicas: 3
|
||||
containers:
|
||||
- name: cockroachdb
|
||||
image: cockraochdb:1.1.1
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: cockroachdb
|
||||
namespace: myapp-staging
|
||||
---
|
||||
apiVersion: app.k8s.io/v1beta1
|
||||
kind: Application
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: myapp
|
||||
name: myapp
|
||||
namespace: myapp-staging
|
||||
`
|
||||
out := &bytes.Buffer{}
|
||||
err := Pipeline{
|
||||
Inputs: []Reader{&ByteReader{Reader: bytes.NewBufferString(in)}},
|
||||
Outputs: []Writer{TreeWriter{Writer: out}}, // Structure unspecified
|
||||
}.Execute()
|
||||
if !assert.NoError(t, err) {
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
if !assert.Equal(t, `
|
||||
└──
|
||||
├── [.] Service myapp-staging/cockroachdb
|
||||
├── [.] StatefulSet myapp-staging/cockroachdb
|
||||
├── [.] Pod myapp-staging/cockroachdb-0
|
||||
├── [.] Pod myapp-staging/cockroachdb-1
|
||||
├── [.] Pod myapp-staging/cockroachdb-2
|
||||
└── [.] Application myapp-staging/myapp
|
||||
`, out.String()) {
|
||||
t.FailNow()
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrinter_Write_error_when_owner_missing(t *testing.T) {
|
||||
in := `
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: cockroachdb
|
||||
namespace: myapp-staging
|
||||
ownerReferences:
|
||||
- apiVersion: app.k8s.io/v1beta1
|
||||
kind: Application
|
||||
name: nginx
|
||||
---
|
||||
apiVersion: app.k8s.io/v1beta1
|
||||
kind: Application
|
||||
metadata:
|
||||
labels:
|
||||
app.kubernetes.io/name: myapp
|
||||
name: myapp
|
||||
namespace: myapp-staging
|
||||
`
|
||||
out := &bytes.Buffer{}
|
||||
err := Pipeline{
|
||||
Inputs: []Reader{&ByteReader{Reader: bytes.NewBufferString(in)}},
|
||||
Outputs: []Writer{TreeWriter{Writer: out}},
|
||||
}.Execute()
|
||||
assert.Error(t, err)
|
||||
assert.Equal(t, "owner 'Application myapp-staging/nginx' not found in input, but found as an owner of input objects", err.Error())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user