mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-14 02:20:53 +00:00
Improved fn framework support for patching
- Generate patches with a func - Generate patches for containers
This commit is contained in:
@@ -10,6 +10,7 @@ import (
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
"text/template"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/stretchr/testify/assert"
|
||||
@@ -162,3 +163,204 @@ metadata:
|
||||
a: 'b'
|
||||
`), strings.TrimSpace(out.String()))
|
||||
}
|
||||
|
||||
func TestCommand_PatchTemplateFn(t *testing.T) {
|
||||
// TODO: make this test pass on windows -- currently failure seems spurious
|
||||
testutil.SkipWindows(t)
|
||||
|
||||
type api = struct {
|
||||
Spec struct {
|
||||
A string `json:"a" yaml:"a"`
|
||||
} `json:"spec" yaml:"spec"`
|
||||
}
|
||||
var config api
|
||||
|
||||
cmd := framework.TemplateCommand{
|
||||
API: &config,
|
||||
PatchTemplatesFn: func(_ *framework.ResourceList) ([]framework.PatchTemplate, error) {
|
||||
return []framework.PatchTemplate{{
|
||||
Selector: &framework.Selector{Names: []string{config.Spec.A}},
|
||||
Template: template.Must(template.New("test").Parse(`
|
||||
metadata:
|
||||
annotations:
|
||||
baz: buz
|
||||
`)),
|
||||
}}, nil
|
||||
},
|
||||
}.GetCommand()
|
||||
|
||||
cmd.SetIn(bytes.NewBufferString(`
|
||||
apiVersion: config.kubernetes.io/v1alpha1
|
||||
kind: ResourceList
|
||||
items:
|
||||
- apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: bar1
|
||||
namespace: default
|
||||
annotations:
|
||||
foo: bar1
|
||||
spec:
|
||||
replicas: 1
|
||||
- apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: bar2
|
||||
namespace: default
|
||||
annotations:
|
||||
foo: bar2
|
||||
spec:
|
||||
replicas: 1
|
||||
functionConfig:
|
||||
apiVersion: example.com/v1alpha1
|
||||
kind: Example
|
||||
spec:
|
||||
a: "bar1"
|
||||
`))
|
||||
var out bytes.Buffer
|
||||
cmd.SetOut(&out)
|
||||
|
||||
require.NoError(t, cmd.Execute())
|
||||
|
||||
require.Equal(t, strings.TrimSpace(`
|
||||
apiVersion: config.kubernetes.io/v1alpha1
|
||||
kind: ResourceList
|
||||
items:
|
||||
- apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: bar1
|
||||
namespace: default
|
||||
annotations:
|
||||
foo: bar1
|
||||
baz: buz
|
||||
config.kubernetes.io/index: '0'
|
||||
spec:
|
||||
replicas: 1
|
||||
- apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: bar2
|
||||
namespace: default
|
||||
annotations:
|
||||
foo: bar2
|
||||
spec:
|
||||
replicas: 1
|
||||
functionConfig:
|
||||
apiVersion: example.com/v1alpha1
|
||||
kind: Example
|
||||
spec:
|
||||
a: "bar1"
|
||||
`), strings.TrimSpace(out.String()))
|
||||
}
|
||||
|
||||
func TestCommand_PatchContainerTemplatesFn(t *testing.T) {
|
||||
// TODO: make this test pass on windows -- currently failure seems spurious
|
||||
testutil.SkipWindows(t)
|
||||
|
||||
type api = struct {
|
||||
Spec struct {
|
||||
A string `json:"a" yaml:"a"`
|
||||
} `json:"spec" yaml:"spec"`
|
||||
}
|
||||
var config api
|
||||
|
||||
cmd := framework.TemplateCommand{
|
||||
API: &config,
|
||||
PatchContainerTemplatesFn: func(_ *framework.ResourceList) ([]framework.ContainerPatchTemplate, error) {
|
||||
return []framework.ContainerPatchTemplate{{
|
||||
PatchTemplate: framework.PatchTemplate{
|
||||
Selector: &framework.Selector{Names: []string{config.Spec.A}},
|
||||
Template: template.Must(template.New("test").Parse(`
|
||||
env:
|
||||
key: Foo
|
||||
value: Bar
|
||||
`))},
|
||||
}}, nil
|
||||
},
|
||||
}.GetCommand()
|
||||
|
||||
cmd.SetIn(bytes.NewBufferString(`
|
||||
apiVersion: config.kubernetes.io/v1alpha1
|
||||
kind: ResourceList
|
||||
items:
|
||||
- apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: bar1
|
||||
namespace: default
|
||||
annotations:
|
||||
foo: bar1
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: foo
|
||||
- name: bar
|
||||
- apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: bar2
|
||||
namespace: default
|
||||
annotations:
|
||||
foo: bar2
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: foo
|
||||
- name: bar
|
||||
functionConfig:
|
||||
apiVersion: example.com/v1alpha1
|
||||
kind: Example
|
||||
spec:
|
||||
a: "bar1"
|
||||
`))
|
||||
var out bytes.Buffer
|
||||
cmd.SetOut(&out)
|
||||
|
||||
require.NoError(t, cmd.Execute())
|
||||
|
||||
require.Equal(t, strings.TrimSpace(`
|
||||
apiVersion: config.kubernetes.io/v1alpha1
|
||||
kind: ResourceList
|
||||
items:
|
||||
- apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: bar1
|
||||
namespace: default
|
||||
annotations:
|
||||
foo: bar1
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: foo
|
||||
env:
|
||||
key: Foo
|
||||
value: Bar
|
||||
- name: bar
|
||||
env:
|
||||
key: Foo
|
||||
value: Bar
|
||||
- apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: bar2
|
||||
namespace: default
|
||||
annotations:
|
||||
foo: bar2
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
containers:
|
||||
- name: foo
|
||||
- name: bar
|
||||
functionConfig:
|
||||
apiVersion: example.com/v1alpha1
|
||||
kind: Example
|
||||
spec:
|
||||
a: "bar1"
|
||||
`), strings.TrimSpace(out.String()))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user