mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-07-16 17:33:14 +00:00
Re-introduce global scope for cmd/config run as flag
This commit is contained in:
@@ -27,6 +27,8 @@ func GetRunFnRunner(name string) *RunFnRunner {
|
|||||||
r.Command = c
|
r.Command = c
|
||||||
r.Command.Flags().BoolVar(
|
r.Command.Flags().BoolVar(
|
||||||
&r.DryRun, "dry-run", false, "print results to stdout")
|
&r.DryRun, "dry-run", false, "print results to stdout")
|
||||||
|
r.Command.Flags().BoolVar(
|
||||||
|
&r.GlobalScope, "global-scope", false, "set global scope for functions.")
|
||||||
r.Command.Flags().StringSliceVar(
|
r.Command.Flags().StringSliceVar(
|
||||||
&r.FnPaths, "fn-path", []string{},
|
&r.FnPaths, "fn-path", []string{},
|
||||||
"directories containing functions without configuration")
|
"directories containing functions without configuration")
|
||||||
@@ -44,11 +46,12 @@ type RunFnRunner struct {
|
|||||||
IncludeSubpackages bool
|
IncludeSubpackages bool
|
||||||
Command *cobra.Command
|
Command *cobra.Command
|
||||||
DryRun bool
|
DryRun bool
|
||||||
|
GlobalScope bool
|
||||||
FnPaths []string
|
FnPaths []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *RunFnRunner) runE(c *cobra.Command, args []string) error {
|
func (r *RunFnRunner) runE(c *cobra.Command, args []string) error {
|
||||||
rec := runfn.RunFns{Path: args[0], FunctionPaths: r.FnPaths}
|
rec := runfn.RunFns{Path: args[0], FunctionPaths: r.FnPaths, GlobalScope: r.GlobalScope}
|
||||||
if r.DryRun {
|
if r.DryRun {
|
||||||
rec.Output = c.OutOrStdout()
|
rec.Output = c.OutOrStdout()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -587,6 +587,96 @@ metadata:
|
|||||||
`, b.String())
|
`, b.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFilter_Filter_globalScope(t *testing.T) {
|
||||||
|
cfg, err := yaml.Parse(`apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: foo
|
||||||
|
annotations:
|
||||||
|
config.kubernetes.io/path: 'foo/bar.yaml'
|
||||||
|
`)
|
||||||
|
if !assert.NoError(t, err) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
input, err := (&kio.ByteReader{Reader: bytes.NewBufferString(`
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: deployment-foo
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: service-foo
|
||||||
|
`)}).Read()
|
||||||
|
if !assert.NoError(t, err) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// no resources match the scope
|
||||||
|
called := false
|
||||||
|
result, err := (&ContainerFilter{
|
||||||
|
GlobalScope: true,
|
||||||
|
Image: "example.com:version",
|
||||||
|
Config: cfg,
|
||||||
|
args: []string{"sed", "s/Deployment/StatefulSet/g"},
|
||||||
|
checkInput: func(s string) {
|
||||||
|
called = true
|
||||||
|
if !assert.Equal(t, `apiVersion: config.kubernetes.io/v1alpha1
|
||||||
|
kind: ResourceList
|
||||||
|
items:
|
||||||
|
- apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: deployment-foo
|
||||||
|
annotations:
|
||||||
|
config.kubernetes.io/index: '0'
|
||||||
|
- apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: service-foo
|
||||||
|
annotations:
|
||||||
|
config.kubernetes.io/index: '1'
|
||||||
|
functionConfig: {apiVersion: apps/v1, kind: Deployment, metadata: {name: foo, annotations: {
|
||||||
|
config.kubernetes.io/path: 'foo/bar.yaml'}}}
|
||||||
|
`, s) {
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}).Filter(input)
|
||||||
|
if !assert.NoError(t, err) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !assert.True(t, called) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
b := &bytes.Buffer{}
|
||||||
|
err = kio.ByteWriter{Writer: b, KeepReaderAnnotations: true}.Write(result)
|
||||||
|
if !assert.NoError(t, err) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resources should be preserved -- paths shouldn't be set by container
|
||||||
|
assert.Equal(t, `apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: deployment-foo
|
||||||
|
annotations:
|
||||||
|
config.kubernetes.io/index: '0'
|
||||||
|
config.kubernetes.io/path: 'foo/statefulset_deployment-foo.yaml'
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: service-foo
|
||||||
|
annotations:
|
||||||
|
config.kubernetes.io/index: '1'
|
||||||
|
config.kubernetes.io/path: 'foo/service_service-foo.yaml'
|
||||||
|
`, b.String())
|
||||||
|
}
|
||||||
|
|
||||||
func TestFilter_Filter_scopeFunctionsDir(t *testing.T) {
|
func TestFilter_Filter_scopeFunctionsDir(t *testing.T) {
|
||||||
// functions under "functions/" dir should be scoped to parent dir
|
// functions under "functions/" dir should be scoped to parent dir
|
||||||
cfg, err := yaml.Parse(`apiVersion: apps/v1
|
cfg, err := yaml.Parse(`apiVersion: apps/v1
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ type RunFns struct {
|
|||||||
// directory
|
// directory
|
||||||
FunctionPaths []string
|
FunctionPaths []string
|
||||||
|
|
||||||
|
GlobalScope bool
|
||||||
|
|
||||||
// Output can be set to write the result to Output rather than back to the directory
|
// Output can be set to write the result to Output rather than back to the directory
|
||||||
Output io.Writer
|
Output io.Writer
|
||||||
|
|
||||||
@@ -91,7 +93,12 @@ func (r *RunFns) init() {
|
|||||||
// if containerFilterProvider hasn't been set, use the default
|
// if containerFilterProvider hasn't been set, use the default
|
||||||
if r.containerFilterProvider == nil {
|
if r.containerFilterProvider == nil {
|
||||||
r.containerFilterProvider = func(image, path string, api *yaml.RNode) kio.Filter {
|
r.containerFilterProvider = func(image, path string, api *yaml.RNode) kio.Filter {
|
||||||
cf := &filters.ContainerFilter{Image: image, Config: api, StorageMounts: r.StorageMounts}
|
cf := &filters.ContainerFilter{
|
||||||
|
Image: image,
|
||||||
|
Config: api,
|
||||||
|
StorageMounts: r.StorageMounts,
|
||||||
|
GlobalScope: r.GlobalScope,
|
||||||
|
}
|
||||||
return cf
|
return cf
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,6 +43,20 @@ kind:
|
|||||||
assert.Equal(t, &filters.ContainerFilter{Image: "example.com:version", Config: api}, filter)
|
assert.Equal(t, &filters.ContainerFilter{Image: "example.com:version", Config: api}, filter)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRunFns_Execute_globalScope(t *testing.T) {
|
||||||
|
instance := RunFns{GlobalScope: true}
|
||||||
|
instance.init()
|
||||||
|
api, err := yaml.Parse(`apiVersion: apps/v1
|
||||||
|
kind:
|
||||||
|
`)
|
||||||
|
if !assert.NoError(t, err) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
filter := instance.containerFilterProvider("example.com:version", "", api)
|
||||||
|
assert.Equal(t, &filters.ContainerFilter{
|
||||||
|
Image: "example.com:version", Config: api, GlobalScope: true}, filter)
|
||||||
|
}
|
||||||
|
|
||||||
func TestCmd_Execute(t *testing.T) {
|
func TestCmd_Execute(t *testing.T) {
|
||||||
dir, err := ioutil.TempDir("", "kustomize-kyaml-test")
|
dir, err := ioutil.TempDir("", "kustomize-kyaml-test")
|
||||||
if !assert.NoError(t, err) {
|
if !assert.NoError(t, err) {
|
||||||
|
|||||||
Reference in New Issue
Block a user