Make types package public.

This commit is contained in:
jregan
2019-10-16 16:36:06 -07:00
parent de6eb14867
commit 07d2500ee3
92 changed files with 87 additions and 126 deletions

View File

@@ -33,16 +33,16 @@ be defaulted. The latter method allows for
complete plugin argument specification. complete plugin argument specification.
[types.GeneratorOptions]: ../../pkg/types/generatoroptions.go [types.GeneratorOptions]: ../../types/generatoroptions.go
[types.SecretArgs]: ../../pkg/types/secretargs.go [types.SecretArgs]: ../../types/secretargs.go
[types.ConfigMapArgs]: ../../pkg/types/configmapargs.go [types.ConfigMapArgs]: ../../types/configmapargs.go
[config.FieldSpec]: ../../pkg/transformers/config/fieldspec.go [config.FieldSpec]: ../../pkg/transformers/config/fieldspec.go
[types.ObjectMeta]: ../../pkg/types/objectmeta.go [types.ObjectMeta]: ../../types/objectmeta.go
[types.Selector]: ../../pkg/types/selector.go [types.Selector]: ../../types/selector.go
[types.Replica]: ../../pkg/types/replica.go [types.Replica]: ../../types/replica.go
[types.PatchStrategicMerge]: ../../pkg/types/patchstrategicmerge.go [types.PatchStrategicMerge]: ../../types/patchstrategicmerge.go
[types.PatchTarget]: ../../pkg/types/patchtarget.go [types.PatchTarget]: ../../types/patchtarget.go
[image.Image]: ../../pkg/image/image.go [image.Image]: ../../types/image.go
## _AnnotationTransformer_ ## _AnnotationTransformer_
### Usage via `kustomization.yaml` ### Usage via `kustomization.yaml`

View File

@@ -10,7 +10,7 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"k8s.io/api/core/v1" "k8s.io/api/core/v1"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
func makeFreshConfigMap( func makeFreshConfigMap(

View File

@@ -13,8 +13,8 @@ import (
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/kv" "sigs.k8s.io/kustomize/v3/kv"
"sigs.k8s.io/kustomize/v3/pkg/loader" "sigs.k8s.io/kustomize/v3/pkg/loader"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/pkg/validators" "sigs.k8s.io/kustomize/v3/pkg/validators"
"sigs.k8s.io/kustomize/v3/types"
) )
func makeEnvConfigMap(name string) *corev1.ConfigMap { func makeEnvConfigMap(name string) *corev1.ConfigMap {

View File

@@ -5,7 +5,7 @@ package configmapandsecret
import ( import (
"sigs.k8s.io/kustomize/v3/pkg/ifc" "sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
// Factory makes ConfigMaps and Secrets. // Factory makes ConfigMaps and Secrets.

View File

@@ -7,7 +7,7 @@ import (
"fmt" "fmt"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
func makeFreshSecret( func makeFreshSecret(

View File

@@ -12,8 +12,8 @@ import (
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/kv" "sigs.k8s.io/kustomize/v3/kv"
"sigs.k8s.io/kustomize/v3/pkg/loader" "sigs.k8s.io/kustomize/v3/pkg/loader"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/pkg/validators" "sigs.k8s.io/kustomize/v3/pkg/validators"
"sigs.k8s.io/kustomize/v3/types"
) )
func makeEnvSecret(name string) *corev1.Secret { func makeEnvSecret(name string) *corev1.Secret {

View File

@@ -14,7 +14,7 @@ import (
"k8s.io/apimachinery/pkg/util/yaml" "k8s.io/apimachinery/pkg/util/yaml"
"sigs.k8s.io/kustomize/v3/k8sdeps/configmapandsecret" "sigs.k8s.io/kustomize/v3/k8sdeps/configmapandsecret"
"sigs.k8s.io/kustomize/v3/pkg/ifc" "sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
// KunstructuredFactoryImpl hides construction using apimachinery types. // KunstructuredFactoryImpl hides construction using apimachinery types.

View File

@@ -10,7 +10,7 @@ import (
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile" "sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile"
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/k8sdeps/kunstruct" "sigs.k8s.io/kustomize/v3/k8sdeps/kunstruct"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
var factory = kunstruct.NewKunstructuredFactoryImpl() var factory = kunstruct.NewKunstructuredFactoryImpl()

View File

@@ -11,7 +11,7 @@ import (
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/util" "sigs.k8s.io/kustomize/kustomize/v3/internal/commands/util"
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/pkg/pgmconfig" "sigs.k8s.io/kustomize/v3/pkg/pgmconfig"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
// kindOfAdd is the kind of metadata being added: label or annotation // kindOfAdd is the kind of metadata being added: label or annotation

View File

@@ -9,8 +9,8 @@ import (
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile" "sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile"
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/testutils" "sigs.k8s.io/kustomize/kustomize/v3/internal/commands/testutils"
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/pkg/validators" "sigs.k8s.io/kustomize/v3/pkg/validators"
"sigs.k8s.io/kustomize/v3/types"
) )
func makeKustomization(t *testing.T) *types.Kustomization { func makeKustomization(t *testing.T) *types.Kustomization {

View File

@@ -8,7 +8,7 @@ import (
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile" "sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile"
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/pkg/ifc" "sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
// newCmdAddConfigMap returns a new command. // newCmdAddConfigMap returns a new command.

View File

@@ -9,8 +9,8 @@ import (
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/kv" "sigs.k8s.io/kustomize/v3/kv"
"sigs.k8s.io/kustomize/v3/pkg/loader" "sigs.k8s.io/kustomize/v3/pkg/loader"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/pkg/validators" "sigs.k8s.io/kustomize/v3/pkg/validators"
"sigs.k8s.io/kustomize/v3/types"
) )
func TestNewAddConfigMapIsNotNil(t *testing.T) { func TestNewAddConfigMapIsNotNil(t *testing.T) {

View File

@@ -8,7 +8,7 @@ import (
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile" "sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile"
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/pkg/ifc" "sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
// newCmdAddSecret returns a new command. // newCmdAddSecret returns a new command.

View File

@@ -10,8 +10,8 @@ import (
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/pkg/loader" "sigs.k8s.io/kustomize/v3/pkg/loader"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/pkg/validators" "sigs.k8s.io/kustomize/v3/pkg/validators"
"sigs.k8s.io/kustomize/v3/types"
) )
func TestNewCmdAddSecretIsNotNil(t *testing.T) { func TestNewCmdAddSecretIsNotNil(t *testing.T) {

View File

@@ -11,7 +11,7 @@ import (
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile" "sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile"
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/pkg/pgmconfig" "sigs.k8s.io/kustomize/v3/pkg/pgmconfig"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
// kindOfAdd is the kind of metadata being added: label or annotation // kindOfAdd is the kind of metadata being added: label or annotation

View File

@@ -11,8 +11,8 @@ import (
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile" "sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile"
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/testutils" "sigs.k8s.io/kustomize/kustomize/v3/internal/commands/testutils"
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/pkg/validators" "sigs.k8s.io/kustomize/v3/pkg/validators"
"sigs.k8s.io/kustomize/v3/types"
) )
func makeKustomizationFS() filesys.FileSystem { func makeKustomizationFS() filesys.FileSystem {

View File

@@ -6,17 +6,17 @@ package set
import ( import (
"errors" "errors"
"regexp" "regexp"
"sigs.k8s.io/kustomize/v3/types"
"sort" "sort"
"strings" "strings"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile" "sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile"
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/pkg/image"
) )
type setImageOptions struct { type setImageOptions struct {
imageMap map[string]image.Image imageMap map[string]types.Image
} }
var pattern = regexp.MustCompile("^(.*):([a-zA-Z0-9._-]*)$") var pattern = regexp.MustCompile("^(.*):([a-zA-Z0-9._-]*)$")
@@ -96,7 +96,7 @@ func (o *setImageOptions) Validate(args []string) error {
return errImageNoArgs return errImageNoArgs
} }
o.imageMap = make(map[string]image.Image) o.imageMap = make(map[string]types.Image)
for _, arg := range args { for _, arg := range args {
@@ -129,7 +129,7 @@ func (o *setImageOptions) RunSetImage(fSys filesys.FileSystem) error {
o.imageMap[im.Name] = im o.imageMap[im.Name] = im
} }
var images []image.Image var images []types.Image
for _, v := range o.imageMap { for _, v := range o.imageMap {
images = append(images, v) images = append(images, v)
} }
@@ -142,13 +142,13 @@ func (o *setImageOptions) RunSetImage(fSys filesys.FileSystem) error {
return mf.Write(m) return mf.Write(m)
} }
func parse(arg string) (image.Image, error) { func parse(arg string) (types.Image, error) {
// matches if there is an image name to overwrite // matches if there is an image name to overwrite
// <image>=<new-image><:|@><new-tag> // <image>=<new-image><:|@><new-tag>
if s := strings.Split(arg, separator); len(s) == 2 { if s := strings.Split(arg, separator); len(s) == 2 {
p, err := parseOverwrite(s[1], true) p, err := parseOverwrite(s[1], true)
return image.Image{ return types.Image{
Name: s[0], Name: s[0],
NewName: p.name, NewName: p.name,
NewTag: p.tag, NewTag: p.tag,
@@ -159,7 +159,7 @@ func parse(arg string) (image.Image, error) {
// matches only for <tag|digest> overwrites // matches only for <tag|digest> overwrites
// <image><:|@><new-tag> // <image><:|@><new-tag>
p, err := parseOverwrite(arg, false) p, err := parseOverwrite(arg, false)
return image.Image{ return types.Image{
Name: p.name, Name: p.name,
NewTag: p.tag, NewTag: p.tag,
Digest: p.digest, Digest: p.digest,

View File

@@ -12,7 +12,7 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile" "sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile"
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
type setReplicasOptions struct { type setReplicasOptions struct {

View File

@@ -15,7 +15,7 @@ import (
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/pkg/pgmconfig" "sigs.k8s.io/kustomize/v3/pkg/pgmconfig"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -12,7 +12,7 @@ import (
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
"sigs.k8s.io/kustomize/v3/pkg/pgmconfig" "sigs.k8s.io/kustomize/v3/pkg/pgmconfig"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
func TestFieldOrder(t *testing.T) { func TestFieldOrder(t *testing.T) {

View File

@@ -15,7 +15,7 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"sigs.k8s.io/kustomize/v3/pkg/ifc" "sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
var utf8bom = []byte{0xEF, 0xBB, 0xBF} var utf8bom = []byte{0xEF, 0xBB, 0xBF}

View File

@@ -9,8 +9,8 @@ import (
"sigs.k8s.io/kustomize/v3/filesys" "sigs.k8s.io/kustomize/v3/filesys"
ldr "sigs.k8s.io/kustomize/v3/pkg/loader" ldr "sigs.k8s.io/kustomize/v3/pkg/loader"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/pkg/validators" "sigs.k8s.io/kustomize/v3/pkg/validators"
"sigs.k8s.io/kustomize/v3/types"
) )
func makeKvLoader(fSys filesys.FileSystem) *loader { func makeKvLoader(fSys filesys.FileSystem) *loader {

View File

@@ -12,7 +12,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/transformers" "sigs.k8s.io/kustomize/v3/pkg/transformers"
"sigs.k8s.io/kustomize/v3/pkg/transformers/config" "sigs.k8s.io/kustomize/v3/pkg/transformers/config"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
// ResAccumulator accumulates resources and the rules // ResAccumulator accumulates resources and the rules

View File

@@ -17,7 +17,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resmaptest" "sigs.k8s.io/kustomize/v3/pkg/resmaptest"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/transformers/config" "sigs.k8s.io/kustomize/v3/pkg/transformers/config"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
func makeResAccumulator(t *testing.T) (*ResAccumulator, *resource.Factory) { func makeResAccumulator(t *testing.T) (*ResAccumulator, *resource.Factory) {

View File

@@ -6,7 +6,7 @@ package ifc
import ( import (
"sigs.k8s.io/kustomize/v3/pkg/gvk" "sigs.k8s.io/kustomize/v3/pkg/gvk"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
// Validator provides functions to validate annotations and labels // Validator provides functions to validate annotations and labels

View File

@@ -1,32 +0,0 @@
/*
Copyright 2019 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package image
// DeprecatedImage contains an image and a new tag,
// which will replace the original tag.
// Deprecated, instead use Image.
type DeprecatedImage struct {
// Name is a tag-less image name.
Name string `json:"name,omitempty" yaml:"name,omitempty"`
// NewTag is the value to use in replacing the original tag.
NewTag string `json:"newTag,omitempty" yaml:"newTag,omitempty"`
// Digest is the value used to replace the original image tag.
// If digest is present NewTag value is ignored.
Digest string `json:"digest,omitempty" yaml:"digest,omitempty"`
}

View File

@@ -19,8 +19,8 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/target" "sigs.k8s.io/kustomize/v3/pkg/target"
"sigs.k8s.io/kustomize/v3/pkg/transformers/config/defaultconfig" "sigs.k8s.io/kustomize/v3/pkg/transformers/config/defaultconfig"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/pkg/validators" "sigs.k8s.io/kustomize/v3/pkg/validators"
"sigs.k8s.io/kustomize/v3/types"
) )
// KustTestHarness helps test kustomization generation and transformation. // KustTestHarness helps test kustomization generation and transformation.

View File

@@ -16,7 +16,7 @@ limitations under the License.
package patch package patch
import "sigs.k8s.io/kustomize/v3/pkg/types" import "sigs.k8s.io/kustomize/v3/types"
// Append appends a slice of patch paths to a PatchStrategicMerge slice // Append appends a slice of patch paths to a PatchStrategicMerge slice
func Append(patches []types.PatchStrategicMerge, paths ...string) []types.PatchStrategicMerge { func Append(patches []types.PatchStrategicMerge, paths ...string) []types.PatchStrategicMerge {

View File

@@ -6,7 +6,7 @@ package patch
import ( import (
"testing" "testing"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
func buildPatchStrategicMergeSlice(patchStrings []string) []types.PatchStrategicMerge { func buildPatchStrategicMergeSlice(patchStrings []string) []types.PatchStrategicMerge {

View File

@@ -11,7 +11,7 @@ import (
"github.com/spf13/pflag" "github.com/spf13/pflag"
"sigs.k8s.io/kustomize/v3/pkg/pgmconfig" "sigs.k8s.io/kustomize/v3/pkg/pgmconfig"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
const ( const (

View File

@@ -15,7 +15,7 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"sigs.k8s.io/kustomize/v3/pkg/resid" "sigs.k8s.io/kustomize/v3/pkg/resid"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -12,8 +12,8 @@ import (
"sigs.k8s.io/kustomize/v3/k8sdeps/kunstruct" "sigs.k8s.io/kustomize/v3/k8sdeps/kunstruct"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/pkg/validators" "sigs.k8s.io/kustomize/v3/pkg/validators"
"sigs.k8s.io/kustomize/v3/types"
) )
func TestExecPluginConfig(t *testing.T) { func TestExecPluginConfig(t *testing.T) {

View File

@@ -16,7 +16,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resid" "sigs.k8s.io/kustomize/v3/pkg/resid"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
type Loader struct { type Loader struct {

View File

@@ -8,7 +8,7 @@ import (
"sigs.k8s.io/kustomize/v3/internal/kusterr" "sigs.k8s.io/kustomize/v3/internal/kusterr"
"sigs.k8s.io/kustomize/v3/pkg/ifc" "sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
// Factory makes instances of ResMap. // Factory makes instances of ResMap.

View File

@@ -16,8 +16,8 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/loader" "sigs.k8s.io/kustomize/v3/pkg/loader"
. "sigs.k8s.io/kustomize/v3/pkg/resmap" . "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/resmaptest" "sigs.k8s.io/kustomize/v3/pkg/resmaptest"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/pkg/validators" "sigs.k8s.io/kustomize/v3/pkg/validators"
"sigs.k8s.io/kustomize/v3/types"
) )
func TestFromFile(t *testing.T) { func TestFromFile(t *testing.T) {

View File

@@ -14,7 +14,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/ifc" "sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/resid" "sigs.k8s.io/kustomize/v3/pkg/resid"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -14,7 +14,7 @@ import (
. "sigs.k8s.io/kustomize/v3/pkg/resmap" . "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/resmaptest" "sigs.k8s.io/kustomize/v3/pkg/resmaptest"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
var rf = resource.NewFactory( var rf = resource.NewFactory(

View File

@@ -8,7 +8,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/gvk" "sigs.k8s.io/kustomize/v3/pkg/gvk"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
func setupRMForPatchTargets(t *testing.T) resmap.ResMap { func setupRMForPatchTargets(t *testing.T) resmap.ResMap {

View File

@@ -11,7 +11,7 @@ import (
"sigs.k8s.io/kustomize/v3/internal/kusterr" "sigs.k8s.io/kustomize/v3/internal/kusterr"
"sigs.k8s.io/kustomize/v3/pkg/ifc" "sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
// Factory makes instances of Resource. // Factory makes instances of Resource.

View File

@@ -22,7 +22,7 @@ import (
"sigs.k8s.io/kustomize/v3/internal/loadertest" "sigs.k8s.io/kustomize/v3/internal/loadertest"
. "sigs.k8s.io/kustomize/v3/pkg/resource" . "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
func TestSliceFromPatches(t *testing.T) { func TestSliceFromPatches(t *testing.T) {

View File

@@ -10,7 +10,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/ifc" "sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/resid" "sigs.k8s.io/kustomize/v3/pkg/resid"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -24,7 +24,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/gvk" "sigs.k8s.io/kustomize/v3/pkg/gvk"
"sigs.k8s.io/kustomize/v3/pkg/resid" "sigs.k8s.io/kustomize/v3/pkg/resid"
. "sigs.k8s.io/kustomize/v3/pkg/resource" . "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
var factory = NewFactory( var factory = NewFactory(

View File

@@ -20,8 +20,8 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/transformers" "sigs.k8s.io/kustomize/v3/pkg/transformers"
"sigs.k8s.io/kustomize/v3/pkg/transformers/config" "sigs.k8s.io/kustomize/v3/pkg/transformers/config"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/plugin/builtin" "sigs.k8s.io/kustomize/v3/plugin/builtin"
"sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -4,11 +4,10 @@
package target package target
import ( import (
"sigs.k8s.io/kustomize/v3/pkg/image"
"sigs.k8s.io/kustomize/v3/pkg/plugins" "sigs.k8s.io/kustomize/v3/pkg/plugins"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/transformers/config" "sigs.k8s.io/kustomize/v3/pkg/transformers/config"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
) )
// Functions dedicated to configuring the builtin // Functions dedicated to configuring the builtin
@@ -261,7 +260,7 @@ var transformerConfigurators = map[plugins.BuiltinPluginType]func(
kt *KustTarget, bpt plugins.BuiltinPluginType, f tFactory, tc *config.TransformerConfig) ( kt *KustTarget, bpt plugins.BuiltinPluginType, f tFactory, tc *config.TransformerConfig) (
result []resmap.Transformer, err error) { result []resmap.Transformer, err error) {
var c struct { var c struct {
ImageTag image.Image ImageTag types.Image
FieldSpecs []config.FieldSpec FieldSpecs []config.FieldSpec
} }
for _, args := range kt.kustomization.Images { for _, args := range kt.kustomization.Images {

View File

@@ -16,8 +16,8 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
. "sigs.k8s.io/kustomize/v3/pkg/target" . "sigs.k8s.io/kustomize/v3/pkg/target"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/pkg/validators" "sigs.k8s.io/kustomize/v3/pkg/validators"
"sigs.k8s.io/kustomize/v3/types"
) )
const ( const (

View File

@@ -4,7 +4,7 @@ package builtin
import ( import (
"sigs.k8s.io/kustomize/v3/kv" "sigs.k8s.io/kustomize/v3/kv"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -4,9 +4,9 @@ package builtin
import ( import (
"fmt" "fmt"
"regexp" "regexp"
"sigs.k8s.io/kustomize/v3/types"
"strings" "strings"
"sigs.k8s.io/kustomize/v3/pkg/image"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/transformers" "sigs.k8s.io/kustomize/v3/pkg/transformers"
"sigs.k8s.io/kustomize/v3/pkg/transformers/config" "sigs.k8s.io/kustomize/v3/pkg/transformers/config"
@@ -16,13 +16,13 @@ import (
// Find matching image declarations and replace // Find matching image declarations and replace
// the name, tag and/or digest. // the name, tag and/or digest.
type ImageTagTransformerPlugin struct { type ImageTagTransformerPlugin struct {
ImageTag image.Image `json:"imageTag,omitempty" yaml:"imageTag,omitempty"` ImageTag types.Image `json:"imageTag,omitempty" yaml:"imageTag,omitempty"`
FieldSpecs []config.FieldSpec `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"` FieldSpecs []config.FieldSpec `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"`
} }
func (p *ImageTagTransformerPlugin) Config( func (p *ImageTagTransformerPlugin) Config(
h *resmap.PluginHelpers, c []byte) (err error) { h *resmap.PluginHelpers, c []byte) (err error) {
p.ImageTag = image.Image{} p.ImageTag = types.Image{}
p.FieldSpecs = nil p.FieldSpecs = nil
return yaml.Unmarshal(c, p) return yaml.Unmarshal(c, p)
} }

View File

@@ -10,7 +10,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resid" "sigs.k8s.io/kustomize/v3/pkg/resid"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -9,7 +9,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/transformers" "sigs.k8s.io/kustomize/v3/pkg/transformers"
"sigs.k8s.io/kustomize/v3/pkg/transformers/config" "sigs.k8s.io/kustomize/v3/pkg/transformers/config"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -10,7 +10,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/ifc" "sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/resid" "sigs.k8s.io/kustomize/v3/pkg/resid"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -6,7 +6,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -8,7 +8,7 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -8,7 +8,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/transformers" "sigs.k8s.io/kustomize/v3/pkg/transformers"
"sigs.k8s.io/kustomize/v3/pkg/transformers/config" "sigs.k8s.io/kustomize/v3/pkg/transformers/config"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -4,7 +4,7 @@ package builtin
import ( import (
"sigs.k8s.io/kustomize/v3/kv" "sigs.k8s.io/kustomize/v3/kv"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -7,7 +7,7 @@ package main
import ( import (
"sigs.k8s.io/kustomize/v3/kv" "sigs.k8s.io/kustomize/v3/kv"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -7,9 +7,9 @@ package main
import ( import (
"fmt" "fmt"
"regexp" "regexp"
"sigs.k8s.io/kustomize/v3/types"
"strings" "strings"
"sigs.k8s.io/kustomize/v3/pkg/image"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/transformers" "sigs.k8s.io/kustomize/v3/pkg/transformers"
"sigs.k8s.io/kustomize/v3/pkg/transformers/config" "sigs.k8s.io/kustomize/v3/pkg/transformers/config"
@@ -19,7 +19,7 @@ import (
// Find matching image declarations and replace // Find matching image declarations and replace
// the name, tag and/or digest. // the name, tag and/or digest.
type plugin struct { type plugin struct {
ImageTag image.Image `json:"imageTag,omitempty" yaml:"imageTag,omitempty"` ImageTag types.Image `json:"imageTag,omitempty" yaml:"imageTag,omitempty"`
FieldSpecs []config.FieldSpec `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"` FieldSpecs []config.FieldSpec `json:"fieldSpecs,omitempty" yaml:"fieldSpecs,omitempty"`
} }
@@ -28,7 +28,7 @@ var KustomizePlugin plugin
func (p *plugin) Config( func (p *plugin) Config(
h *resmap.PluginHelpers, c []byte) (err error) { h *resmap.PluginHelpers, c []byte) (err error) {
p.ImageTag = image.Image{} p.ImageTag = types.Image{}
p.FieldSpecs = nil p.FieldSpecs = nil
return yaml.Unmarshal(c, p) return yaml.Unmarshal(c, p)
} }

View File

@@ -13,7 +13,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resid" "sigs.k8s.io/kustomize/v3/pkg/resid"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -12,7 +12,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/transformers" "sigs.k8s.io/kustomize/v3/pkg/transformers"
"sigs.k8s.io/kustomize/v3/pkg/transformers/config" "sigs.k8s.io/kustomize/v3/pkg/transformers/config"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -13,7 +13,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/ifc" "sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/resid" "sigs.k8s.io/kustomize/v3/pkg/resid"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -9,7 +9,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -11,7 +11,7 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/resource" "sigs.k8s.io/kustomize/v3/pkg/resource"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -11,7 +11,7 @@ import (
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/transformers" "sigs.k8s.io/kustomize/v3/pkg/transformers"
"sigs.k8s.io/kustomize/v3/pkg/transformers/config" "sigs.k8s.io/kustomize/v3/pkg/transformers/config"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -7,7 +7,7 @@ package main
import ( import (
"sigs.k8s.io/kustomize/v3/kv" "sigs.k8s.io/kustomize/v3/kv"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -6,7 +6,7 @@ package main
import ( import (
"sigs.k8s.io/kustomize/v3/kv" "sigs.k8s.io/kustomize/v3/kv"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -8,7 +8,7 @@ import (
"text/template" "text/template"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/types" "sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -7,8 +7,8 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"sigs.k8s.io/kustomize/v3/pkg/resmap" "sigs.k8s.io/kustomize/v3/pkg/resmap"
"sigs.k8s.io/kustomize/v3/pkg/transformers/config" "sigs.k8s.io/kustomize/v3/pkg/transformers/config"
"sigs.k8s.io/kustomize/v3/pkg/types"
"sigs.k8s.io/kustomize/v3/plugin/builtin" "sigs.k8s.io/kustomize/v3/plugin/builtin"
"sigs.k8s.io/kustomize/v3/types"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )

View File

@@ -6,7 +6,7 @@ package types_test
import ( import (
"testing" "testing"
. "sigs.k8s.io/kustomize/v3/pkg/types" . "sigs.k8s.io/kustomize/v3/types"
) )
func TestGenArgs_String(t *testing.T) { func TestGenArgs_String(t *testing.T) {

View File

@@ -1,9 +1,7 @@
// Copyright 2019 The Kubernetes Authors. // Copyright 2019 The Kubernetes Authors.
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// Package image provides struct definitions and libraries package types
// for image overwriting of names, tags and digest.
package image
// Image contains an image name, a new name, a new tag or digest, // Image contains an image name, a new name, a new tag or digest,
// which will replace the original name and tag. // which will replace the original name and tag.

View File

@@ -4,10 +4,6 @@
// Package types holds struct definitions that should find a better home. // Package types holds struct definitions that should find a better home.
package types package types
import (
"sigs.k8s.io/kustomize/v3/pkg/image"
)
const ( const (
KustomizationVersion = "kustomize.config.k8s.io/v1beta1" KustomizationVersion = "kustomize.config.k8s.io/v1beta1"
KustomizationKind = "Kustomization" KustomizationKind = "Kustomization"
@@ -57,7 +53,7 @@ type Kustomization struct {
// Images is a list of (image name, new name, new tag or digest) // Images is a list of (image name, new name, new tag or digest)
// for changing image names, tags or digests. This can also be achieved with a // for changing image names, tags or digests. This can also be achieved with a
// patch, but this operator is simpler to specify. // patch, but this operator is simpler to specify.
Images []image.Image `json:"images,omitempty" yaml:"images,omitempty"` Images []Image `json:"images,omitempty" yaml:"images,omitempty"`
// Replicas is a list of {resourcename, count} that allows for simpler replica // Replicas is a list of {resourcename, count} that allows for simpler replica
// specification. This can also be done with a patch. // specification. This can also be done with a patch.