mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 00:52:55 +00:00
Substitutions
This commit is contained in:
@@ -11,32 +11,31 @@ import (
|
|||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
var kptfile = `apiVersion: kpt.dev/v1alpha1
|
var resourcefile = `apiVersion: resource.dev/v1alpha1
|
||||||
kind: Kptfile
|
kind: resourcefile
|
||||||
metadata:
|
metadata:
|
||||||
name: hello-world-set
|
name: hello-world-set
|
||||||
upstream:
|
upstream:
|
||||||
type: git
|
type: git
|
||||||
git:
|
git:
|
||||||
commit: 5c1c019b59299a4f6c7edd1ff5ff54d720621bbe
|
commit: 5c1c019b59299a4f6c7edd1ff5ff54d720621bbe
|
||||||
repo: git@github.com:GoogleContainerTools/kpt
|
|
||||||
directory: /package-examples/helloworld-set
|
directory: /package-examples/helloworld-set
|
||||||
ref: v0.1.0
|
ref: v0.1.0
|
||||||
packageMetadata:
|
packageMetadata:
|
||||||
shortDescription: example package using setters`
|
shortDescription: example package using setters`
|
||||||
|
|
||||||
func TestAddUpdateSetter(t *testing.T) {
|
func TestAddUpdateSetter(t *testing.T) {
|
||||||
path := os.TempDir() + "Kptfile"
|
path := os.TempDir() + "/resourcefile"
|
||||||
|
|
||||||
//write initial kptfile to temp path
|
//write initial resourcefile to temp path
|
||||||
err := ioutil.WriteFile(path, []byte(kptfile), 0600)
|
err := ioutil.WriteFile(path, []byte(resourcefile), 0666)
|
||||||
if !assert.NoError(t, err) {
|
if !assert.NoError(t, err) {
|
||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
//add a setter definition
|
//add a setter definition
|
||||||
sd := SetterDefinition{
|
sd := SetterDefinition{
|
||||||
Name: "no-match-1",
|
Name: "image",
|
||||||
Value: "1",
|
Value: "1",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -48,7 +47,7 @@ func TestAddUpdateSetter(t *testing.T) {
|
|||||||
|
|
||||||
// update setter definition
|
// update setter definition
|
||||||
sd2 := SetterDefinition{
|
sd2 := SetterDefinition{
|
||||||
Name: "no-match-1",
|
Name: "image",
|
||||||
Value: "2",
|
Value: "2",
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -63,25 +62,24 @@ func TestAddUpdateSetter(t *testing.T) {
|
|||||||
t.FailNow()
|
t.FailNow()
|
||||||
}
|
}
|
||||||
|
|
||||||
expected := `apiVersion: kpt.dev/v1alpha1
|
expected := `apiVersion: resource.dev/v1alpha1
|
||||||
kind: Kptfile
|
kind: resourcefile
|
||||||
metadata:
|
metadata:
|
||||||
name: hello-world-set
|
name: hello-world-set
|
||||||
upstream:
|
upstream:
|
||||||
type: git
|
type: git
|
||||||
git:
|
git:
|
||||||
commit: 5c1c019b59299a4f6c7edd1ff5ff54d720621bbe
|
commit: 5c1c019b59299a4f6c7edd1ff5ff54d720621bbe
|
||||||
repo: git@github.com:GoogleContainerTools/kpt
|
|
||||||
directory: /package-examples/helloworld-set
|
directory: /package-examples/helloworld-set
|
||||||
ref: v0.1.0
|
ref: v0.1.0
|
||||||
packageMetadata:
|
packageMetadata:
|
||||||
shortDescription: example package using setters
|
shortDescription: example package using setters
|
||||||
openAPI:
|
openAPI:
|
||||||
definitions:
|
definitions:
|
||||||
io.k8s.cli.setters.no-match-1:
|
io.k8s.cli.setters.image:
|
||||||
x-k8s-cli:
|
x-k8s-cli:
|
||||||
setter:
|
setter:
|
||||||
name: no-match-1
|
name: image
|
||||||
value: 2
|
value: 2
|
||||||
`
|
`
|
||||||
assert.Equal(t, expected, string(b))
|
assert.Equal(t, expected, string(b))
|
||||||
|
|||||||
60
kyaml/setters2/substitutiondefinition.go
Normal file
60
kyaml/setters2/substitutiondefinition.go
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
// Copyright 2019 The Kubernetes Authors.
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package setters2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
|
||||||
|
"sigs.k8s.io/kustomize/kyaml/yaml"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SubstitutionDefinition struct {
|
||||||
|
Name string `yaml:"name"`
|
||||||
|
Pattern string `yaml:"pattern"`
|
||||||
|
Values []Value `yaml:"value"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Value struct {
|
||||||
|
Marker string `yaml:"marker"`
|
||||||
|
Ref string `yaml:"ref"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (subd SubstitutionDefinition) AddSubstitutionToFile(path string) error {
|
||||||
|
b, err := ioutil.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
y, err := yaml.Parse(string(b))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := y.PipeE(subd); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
out, err := y.String()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err := ioutil.WriteFile(path, []byte(out), 0666); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (subd SubstitutionDefinition) Filter(object *yaml.RNode) (*yaml.RNode, error) {
|
||||||
|
key := DefinitionPrefix + subd.Name
|
||||||
|
|
||||||
|
def, err := object.Pipe(yaml.LookupCreate(
|
||||||
|
yaml.MappingNode, "openAPI", "definitions", key, "x-k8s-cli", "substitution"))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := def.PipeE(yaml.FieldSetter{Name: "name", StringValue: subd.Name}); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if err := def.PipeE(yaml.FieldSetter{Name: "pattern", StringValue: subd.Pattern}); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return object, nil
|
||||||
|
}
|
||||||
86
kyaml/setters2/substitutiondefinition_test.go
Normal file
86
kyaml/setters2/substitutiondefinition_test.go
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
// Copyright 2019 The Kubernetes Authors.
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
package setters2
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestAddUpdateSubstitution(t *testing.T) {
|
||||||
|
path := os.TempDir() + "/resourcefile"
|
||||||
|
|
||||||
|
//write initial resourcefile to temp path
|
||||||
|
err := ioutil.WriteFile(path, []byte(resourcefile), 0666)
|
||||||
|
if !assert.NoError(t, err) {
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
value1 := Value{
|
||||||
|
Marker: "IMAGE_NAME",
|
||||||
|
Ref: "#/definitions/io.k8s.cli.setters.image-name",
|
||||||
|
}
|
||||||
|
|
||||||
|
value2 := Value{
|
||||||
|
Marker: "IMAGE_TAG",
|
||||||
|
Ref: "#/definitions/io.k8s.cli.setters.image-tag",
|
||||||
|
}
|
||||||
|
|
||||||
|
values := []Value{value1, value2}
|
||||||
|
|
||||||
|
//add a setter definition
|
||||||
|
subd := SubstitutionDefinition{
|
||||||
|
Name: "image",
|
||||||
|
Pattern: "IMAGE_NAME:IMAGE_TAG",
|
||||||
|
Values: values,
|
||||||
|
}
|
||||||
|
|
||||||
|
err = subd.AddSubstitutionToFile(path)
|
||||||
|
|
||||||
|
if !assert.NoError(t, err) {
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
// update setter definition
|
||||||
|
subd2 := SubstitutionDefinition{
|
||||||
|
Name: "image",
|
||||||
|
Pattern: "IMAGE_NAME:IMAGE_TAG2",
|
||||||
|
}
|
||||||
|
|
||||||
|
err = subd2.AddSubstitutionToFile(path)
|
||||||
|
|
||||||
|
if !assert.NoError(t, err) {
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
b, err := ioutil.ReadFile(path)
|
||||||
|
if err != nil {
|
||||||
|
t.FailNow()
|
||||||
|
}
|
||||||
|
|
||||||
|
expected := `apiVersion: resource.dev/v1alpha1
|
||||||
|
kind: resourcefile
|
||||||
|
metadata:
|
||||||
|
name: hello-world-set
|
||||||
|
upstream:
|
||||||
|
type: git
|
||||||
|
git:
|
||||||
|
commit: 5c1c019b59299a4f6c7edd1ff5ff54d720621bbe
|
||||||
|
directory: /package-examples/helloworld-set
|
||||||
|
ref: v0.1.0
|
||||||
|
packageMetadata:
|
||||||
|
shortDescription: example package using setters
|
||||||
|
openAPI:
|
||||||
|
definitions:
|
||||||
|
io.k8s.cli.setters.image:
|
||||||
|
x-k8s-cli:
|
||||||
|
substitution:
|
||||||
|
name: image
|
||||||
|
pattern: IMAGE_NAME:IMAGE_TAG2
|
||||||
|
`
|
||||||
|
assert.Equal(t, expected, string(b))
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user