mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-10 16:42:51 +00:00
1544 lines
24 KiB
Go
1544 lines
24 KiB
Go
// Copyright 2019 The Kubernetes Authors.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
package merge3_test
|
|
|
|
//nolint:lll
|
|
var elementTestCases = []testCase{
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Add an element to an existing list`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:1
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:1
|
|
- name: baz
|
|
image: baz:2
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:1
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:1
|
|
- image: baz:2
|
|
name: baz
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Add an element to a non-existing list`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: foo:bar
|
|
name: foo
|
|
`},
|
|
|
|
{
|
|
description: `Add an element to a non-existing list, existing in dest`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: baz
|
|
image: baz:bar
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: baz
|
|
image: baz:bar
|
|
- image: foo:bar
|
|
name: foo
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
// TODO(pwittrock): Figure out if there is something better we can do here
|
|
// This element is missing from the destination -- only the new fields are added
|
|
{
|
|
description: `Add a field to the element, element missing from dest`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command:
|
|
- run.sh
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- command:
|
|
- run.sh
|
|
name: foo
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Update a field on the elem, element missing from the dest`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command:
|
|
- run.sh
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command:
|
|
- run2.sh
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- command:
|
|
- run2.sh
|
|
name: foo
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Update a field on the elem, element present in the dest`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run.sh']
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run2.sh']
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run.sh']
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run2.sh']
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{description: `Add a field on the elem, element present in the dest`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run2.sh']
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run2.sh']
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Add a field on the elem, element and field present in the dest`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run2.sh']
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run.sh']
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run2.sh']
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Ignore an element`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers: null
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers: null
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Leave deleted`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Remove an element -- matching`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec: {}
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec: {}
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Remove an element -- field missing from update`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec: {}
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run.sh']
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec: {}
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Remove an element -- element missing`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
- name: baz
|
|
image: baz:bar
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run.sh']
|
|
- name: baz
|
|
image: baz:bar
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run.sh']
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Remove an element -- empty containers`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers: null
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run.sh']
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec: {}
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Remove an element -- missing list field`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec: {}
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run.sh']
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec: {}
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `infer merge keys merge'`,
|
|
origin: `
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
`,
|
|
update: `
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
command: ['run2.sh']
|
|
`,
|
|
local: `
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
expected: `
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run2.sh']
|
|
`,
|
|
infer: true,
|
|
},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `no infer merge keys merge using schema`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
command: ['run2.sh']
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
image: foo:bar
|
|
command: ['run2.sh']
|
|
`,
|
|
infer: false,
|
|
},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `no infer merge keys merge using explicit schema as line comment'`,
|
|
origin: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
`,
|
|
update: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
command: ['run2.sh']
|
|
`,
|
|
local: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers: # {"items":{"$ref": "#/definitions/io.k8s.api.core.v1.Container"},"type":"array","x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy": "merge"}
|
|
- name: foo # hell ow
|
|
image: foo:bar
|
|
`,
|
|
expected: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers: # {"items":{"$ref": "#/definitions/io.k8s.api.core.v1.Container"},"type":"array","x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy": "merge"}
|
|
- name: foo # hell ow
|
|
image: foo:bar
|
|
command: ['run2.sh']
|
|
`,
|
|
infer: false,
|
|
},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `no infer merge keys merge using explicit schema as head comment'`,
|
|
origin: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
`,
|
|
update: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
command: ['run2.sh']
|
|
`,
|
|
local: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
# {"items":{"$ref": "#/definitions/io.k8s.api.core.v1.Container"},"type":"array","x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy": "merge"}
|
|
containers:
|
|
- name: foo # hell ow
|
|
image: foo:bar
|
|
`,
|
|
expected: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
# {"items":{"$ref": "#/definitions/io.k8s.api.core.v1.Container"},"type":"array","x-kubernetes-patch-merge-key":"name","x-kubernetes-patch-strategy": "merge"}
|
|
containers:
|
|
- name: foo # hell ow
|
|
image: foo:bar
|
|
command: ['run2.sh']
|
|
`,
|
|
infer: false,
|
|
},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `no infer merge keys merge using explicit schema to parent field'`,
|
|
origin: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
`,
|
|
update: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
command: ['run2.sh']
|
|
`,
|
|
local: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec: # {"$ref":"#/definitions/io.k8s.api.core.v1.PodSpec"}
|
|
containers:
|
|
- name: foo # hell ow
|
|
image: foo:bar
|
|
`,
|
|
expected: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec: # {"$ref":"#/definitions/io.k8s.api.core.v1.PodSpec"}
|
|
containers:
|
|
- name: foo # hell ow
|
|
image: foo:bar
|
|
command: ['run2.sh']
|
|
`,
|
|
infer: false,
|
|
},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `no infer merge keys merge using explicit schema to parent field header'`,
|
|
origin: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
`,
|
|
update: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
spec:
|
|
containers:
|
|
- name: foo
|
|
command: ['run2.sh']
|
|
`,
|
|
local: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
# {"$ref":"#/definitions/io.k8s.api.core.v1.PodSpec"}
|
|
spec:
|
|
containers:
|
|
- name: foo # hell ow
|
|
image: foo:bar
|
|
`,
|
|
expected: `
|
|
apiVersion: custom
|
|
kind: Deployment
|
|
# {"$ref":"#/definitions/io.k8s.api.core.v1.PodSpec"}
|
|
spec:
|
|
containers:
|
|
- name: foo # hell ow
|
|
image: foo:bar
|
|
command: ['run2.sh']
|
|
`,
|
|
infer: false,
|
|
},
|
|
|
|
// The following test cases are regression tests
|
|
// that should not be broken as a result of
|
|
// #3111, #3159
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Add a containerPort to an existing list`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
- containerPort: 80
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
- containerPort: 80
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Add a containerPort to a non-existing list, existing in dest`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 80
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 80
|
|
- containerPort: 8080
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Add a name to containerPort`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
name: 8080-port-update
|
|
- containerPort: 80
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
- containerPort: 80
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
name: 8080-port-update
|
|
- containerPort: 80
|
|
`},
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Update protocol for a port`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
`},
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Append container port`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 80
|
|
protocol: HTTP
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 80
|
|
protocol: HTTP
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
`},
|
|
|
|
{
|
|
description: `Update container-port name`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
name: foo
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
name: bar
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
name: foo
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
name: bar
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Add a containerPort with protocol to an existing list`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Add a containerPort with protocol to a non-existing list, existing in dest`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
`},
|
|
|
|
//
|
|
// Test Case
|
|
//
|
|
{
|
|
description: `Merge with name for same container-port`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
name: original
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
name: original
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
name: updated
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
name: original
|
|
- containerPort: 8080
|
|
protocol: HTTP
|
|
name: local
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
name: original
|
|
- containerPort: 8080
|
|
protocol: HTTP
|
|
name: local
|
|
- containerPort: 8080
|
|
name: updated
|
|
protocol: TCP
|
|
`},
|
|
|
|
{
|
|
description: `Retain local protocol`,
|
|
origin: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: UDP
|
|
`,
|
|
update: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
`,
|
|
local: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: HTTP
|
|
`,
|
|
expected: `
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: test-deployment
|
|
spec:
|
|
template:
|
|
spec:
|
|
containers:
|
|
- image: test-image
|
|
name: test-deployment
|
|
ports:
|
|
- containerPort: 8080
|
|
protocol: HTTP
|
|
- containerPort: 8080
|
|
protocol: TCP
|
|
`},
|
|
}
|