Drop k8s metatype fields from kustomize.yaml struct
This commit is contained in:
parent
60665244b3
commit
3f446803ea
|
|
@ -133,10 +133,7 @@ defining a new name prefix, and some different labels.
|
||||||
<!-- @makeStagingManifest @test -->
|
<!-- @makeStagingManifest @test -->
|
||||||
```
|
```
|
||||||
cat <<'EOF' >$OVERLAYS/staging/kustomize.yaml
|
cat <<'EOF' >$OVERLAYS/staging/kustomize.yaml
|
||||||
apiVersion: manifest.k8s.io/v1alpha1
|
kustomizationName: makes-staging-hello
|
||||||
kind: Package
|
|
||||||
metadata:
|
|
||||||
name: makes-staging-hello
|
|
||||||
namePrefix: staging-
|
namePrefix: staging-
|
||||||
objectLabels:
|
objectLabels:
|
||||||
instance: staging
|
instance: staging
|
||||||
|
|
@ -178,10 +175,7 @@ with a different name prefix and labels.
|
||||||
<!-- @makeProductionManifest @test -->
|
<!-- @makeProductionManifest @test -->
|
||||||
```
|
```
|
||||||
cat <<EOF >$OVERLAYS/production/kustomize.yaml
|
cat <<EOF >$OVERLAYS/production/kustomize.yaml
|
||||||
apiVersion: manifest.k8s.io/v1alpha1
|
kustomizationName: makes-production-tuthello
|
||||||
kind: Package
|
|
||||||
metadata:
|
|
||||||
name: makes-production-tuthello
|
|
||||||
namePrefix: production-
|
namePrefix: production-
|
||||||
objectLabels:
|
objectLabels:
|
||||||
instance: production
|
instance: production
|
||||||
|
|
|
||||||
|
|
@ -1,19 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2017 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 v1alpha1 contains the type definition for Manifest and Descriptor.
|
|
||||||
// It is not an official kubernetes API, but in a kubernetes API style.
|
|
||||||
package v1alpha1 // import "k8s.io/kubectl/pkg/apis/manifest/v1alpha1"
|
|
||||||
|
|
@ -22,11 +22,11 @@ import (
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
|
|
||||||
manifest "k8s.io/kubectl/pkg/apis/manifest/v1alpha1"
|
|
||||||
"k8s.io/kubectl/pkg/kustomize/constants"
|
"k8s.io/kubectl/pkg/kustomize/constants"
|
||||||
interror "k8s.io/kubectl/pkg/kustomize/internal/error"
|
interror "k8s.io/kubectl/pkg/kustomize/internal/error"
|
||||||
"k8s.io/kubectl/pkg/kustomize/resource"
|
"k8s.io/kubectl/pkg/kustomize/resource"
|
||||||
"k8s.io/kubectl/pkg/kustomize/transformers"
|
"k8s.io/kubectl/pkg/kustomize/transformers"
|
||||||
|
"k8s.io/kubectl/pkg/kustomize/types"
|
||||||
"k8s.io/kubectl/pkg/loader"
|
"k8s.io/kubectl/pkg/loader"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -35,8 +35,10 @@ type Application interface {
|
||||||
Resources() (resource.ResourceCollection, error)
|
Resources() (resource.ResourceCollection, error)
|
||||||
// SemiResources computes and returns the resources without name hash and name reference for the app
|
// SemiResources computes and returns the resources without name hash and name reference for the app
|
||||||
SemiResources() (resource.ResourceCollection, error)
|
SemiResources() (resource.ResourceCollection, error)
|
||||||
// RawResources computes and returns the raw resources from the manifest.
|
// RawResources computes and returns the raw resources from the kustomize config file.
|
||||||
// It contains resources from 1) untransformed resources from current manifest 2) transformed resources from sub packages
|
// It contains resources from
|
||||||
|
// 1) untransformed resources from current kustomize config file
|
||||||
|
// 2) transformed resources from sub packages
|
||||||
RawResources() (resource.ResourceCollection, error)
|
RawResources() (resource.ResourceCollection, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -44,19 +46,19 @@ var _ Application = &applicationImpl{}
|
||||||
|
|
||||||
// Private implementation of the Application interface
|
// Private implementation of the Application interface
|
||||||
type applicationImpl struct {
|
type applicationImpl struct {
|
||||||
manifest *manifest.Manifest
|
manifest *types.Manifest
|
||||||
loader loader.Loader
|
loader loader.Loader
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewApp parses the manifest at the path using the loader.
|
// NewApp parses the kustomize config file at the path using the loader.
|
||||||
func New(loader loader.Loader) (Application, error) {
|
func New(loader loader.Loader) (Application, error) {
|
||||||
// load the manifest using the loader
|
// load the kustomize config file using the loader
|
||||||
manifestBytes, err := loader.Load(constants.KustomizeFileName)
|
manifestBytes, err := loader.Load(constants.KustomizeFileName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var m manifest.Manifest
|
var m types.Manifest
|
||||||
err = unmarshal(manifestBytes, &m)
|
err = unmarshal(manifestBytes, &m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -64,7 +66,7 @@ func New(loader loader.Loader) (Application, error) {
|
||||||
return &applicationImpl{manifest: &m, loader: loader}, nil
|
return &applicationImpl{manifest: &m, loader: loader}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Resources computes and returns the resources from the manifest.
|
// Resources computes and returns the resources from the kustomize config file.
|
||||||
// The namehashing for configmap/secrets and resolving name reference is only done
|
// The namehashing for configmap/secrets and resolving name reference is only done
|
||||||
// in the most top overlay once at the end of getting resources.
|
// in the most top overlay once at the end of getting resources.
|
||||||
func (a *applicationImpl) Resources() (resource.ResourceCollection, error) {
|
func (a *applicationImpl) Resources() (resource.ResourceCollection, error) {
|
||||||
|
|
@ -130,7 +132,7 @@ func (a *applicationImpl) SemiResources() (resource.ResourceCollection, error) {
|
||||||
return allRes, nil
|
return allRes, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// RawResources computes and returns the raw resources from the manifest.
|
// RawResources computes and returns the raw resources from the kustomize config file.
|
||||||
// The namehashing for configmap/secrets and resolving name reference is only done
|
// The namehashing for configmap/secrets and resolving name reference is only done
|
||||||
// in the most top overlay once at the end of getting resources.
|
// in the most top overlay once at the end of getting resources.
|
||||||
func (a *applicationImpl) RawResources() (resource.ResourceCollection, error) {
|
func (a *applicationImpl) RawResources() (resource.ResourceCollection, error) {
|
||||||
|
|
|
||||||
|
|
@ -32,10 +32,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func setupTest(t *testing.T) loader.Loader {
|
func setupTest(t *testing.T) loader.Loader {
|
||||||
manifestContent := []byte(`apiVersion: manifest.k8s.io/v1alpha1
|
manifestContent := []byte(`kustomizationName: nginx-app
|
||||||
kind: Manifest
|
|
||||||
metadata:
|
|
||||||
name: nginx-app
|
|
||||||
namePrefix: foo-
|
namePrefix: foo-
|
||||||
objectLabels:
|
objectLabels:
|
||||||
app: nginx
|
app: nginx
|
||||||
|
|
|
||||||
|
|
@ -22,9 +22,9 @@ import (
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
manifest "k8s.io/kubectl/pkg/apis/manifest/v1alpha1"
|
|
||||||
"k8s.io/kubectl/pkg/kustomize/configmapandsecret"
|
"k8s.io/kubectl/pkg/kustomize/configmapandsecret"
|
||||||
"k8s.io/kubectl/pkg/kustomize/constants"
|
"k8s.io/kubectl/pkg/kustomize/constants"
|
||||||
|
"k8s.io/kubectl/pkg/kustomize/types"
|
||||||
"k8s.io/kubectl/pkg/kustomize/util/fs"
|
"k8s.io/kubectl/pkg/kustomize/util/fs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -32,13 +32,13 @@ func newCmdAddConfigMap(errOut io.Writer, fsys fs.FileSystem) *cobra.Command {
|
||||||
var config dataConfig
|
var config dataConfig
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
Use: "configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1]",
|
Use: "configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1]",
|
||||||
Short: "Adds a configmap to the manifest.",
|
Short: "Adds a configmap to the kustomize config file.",
|
||||||
Long: "",
|
Long: "",
|
||||||
Example: `
|
Example: `
|
||||||
# Adds a configmap to the Manifest (with a specified key)
|
# Adds a configmap to the kustomize config file (with a specified key)
|
||||||
kustomize edit add configmap my-configmap --from-file=my-key=file/path --from-literal=my-literal=12345
|
kustomize edit add configmap my-configmap --from-file=my-key=file/path --from-literal=my-literal=12345
|
||||||
|
|
||||||
# Adds a configmap to the Manifest (key is the filename)
|
# Adds a configmap to the kustomize config file (key is the filename)
|
||||||
kustomize edit add configmap my-configmap --from-file=file/path
|
kustomize edit add configmap my-configmap --from-file=file/path
|
||||||
|
|
||||||
# Adds a configmap from env-file
|
# Adds a configmap from env-file
|
||||||
|
|
@ -50,7 +50,7 @@ func newCmdAddConfigMap(errOut io.Writer, fsys fs.FileSystem) *cobra.Command {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load in the manifest file.
|
// Load in the kustomize config file.
|
||||||
mf, err := newManifestFile(constants.KustomizeFileName, fsys)
|
mf, err := newManifestFile(constants.KustomizeFileName, fsys)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -61,13 +61,13 @@ func newCmdAddConfigMap(errOut io.Writer, fsys fs.FileSystem) *cobra.Command {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add the config map to the manifest.
|
// Add the config map to the kustomize config file.
|
||||||
err = addConfigMap(m, config)
|
err = addConfigMap(m, config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Write out the manifest with added configmap.
|
// Write out the kustomize config file with added configmap.
|
||||||
return mf.write(m)
|
return mf.write(m)
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -79,10 +79,10 @@ func newCmdAddConfigMap(errOut io.Writer, fsys fs.FileSystem) *cobra.Command {
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
// addConfigMap updates a configmap within a manifest, using the data in config.
|
// addConfigMap updates a configmap within a kustomize config file, using the data in config.
|
||||||
// Note: error may leave manifest in an undefined state. Suggest passing a copy
|
// Note: error may leave kustomize config file in an undefined state. Suggest passing a copy
|
||||||
// of manifest.
|
// of kustomize config file.
|
||||||
func addConfigMap(m *manifest.Manifest, config dataConfig) error {
|
func addConfigMap(m *types.Manifest, config dataConfig) error {
|
||||||
cm := getOrCreateConfigMap(m, config.Name)
|
cm := getOrCreateConfigMap(m, config.Name)
|
||||||
|
|
||||||
err := mergeData(&cm.DataSources, config)
|
err := mergeData(&cm.DataSources, config)
|
||||||
|
|
@ -90,7 +90,7 @@ func addConfigMap(m *manifest.Manifest, config dataConfig) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate manifest's configmap by trying to create corev1.configmap.
|
// Validate by trying to create corev1.configmap.
|
||||||
_, _, err = configmapandsecret.MakeConfigmapAndGenerateName(*cm)
|
_, _, err = configmapandsecret.MakeConfigmapAndGenerateName(*cm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|
@ -99,19 +99,19 @@ func addConfigMap(m *manifest.Manifest, config dataConfig) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getOrCreateConfigMap(m *manifest.Manifest, name string) *manifest.ConfigMapArgs {
|
func getOrCreateConfigMap(m *types.Manifest, name string) *types.ConfigMapArgs {
|
||||||
for i, v := range m.ConfigMapGenerator {
|
for i, v := range m.ConfigMapGenerator {
|
||||||
if name == v.Name {
|
if name == v.Name {
|
||||||
return &m.ConfigMapGenerator[i]
|
return &m.ConfigMapGenerator[i]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// config map not found, create new one and add it to the manifest.
|
// config map not found, create new one and add it to the kustomize config file.
|
||||||
cm := &manifest.ConfigMapArgs{Name: name}
|
cm := &types.ConfigMapArgs{Name: name}
|
||||||
m.ConfigMapGenerator = append(m.ConfigMapGenerator, *cm)
|
m.ConfigMapGenerator = append(m.ConfigMapGenerator, *cm)
|
||||||
return &m.ConfigMapGenerator[len(m.ConfigMapGenerator)-1]
|
return &m.ConfigMapGenerator[len(m.ConfigMapGenerator)-1]
|
||||||
}
|
}
|
||||||
|
|
||||||
func mergeData(src *manifest.DataSources, config dataConfig) error {
|
func mergeData(src *types.DataSources, config dataConfig) error {
|
||||||
src.LiteralSources = append(src.LiteralSources, config.LiteralSources...)
|
src.LiteralSources = append(src.LiteralSources, config.LiteralSources...)
|
||||||
src.FileSources = append(src.FileSources, config.FileSources...)
|
src.FileSources = append(src.FileSources, config.FileSources...)
|
||||||
if src.EnvSource != "" && src.EnvSource != config.EnvFileSource {
|
if src.EnvSource != "" && src.EnvSource != config.EnvFileSource {
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ package commands
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
manifest "k8s.io/kubectl/pkg/apis/manifest/v1alpha1"
|
"k8s.io/kubectl/pkg/kustomize/types"
|
||||||
"k8s.io/kubectl/pkg/kustomize/util/fs"
|
"k8s.io/kubectl/pkg/kustomize/util/fs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -32,7 +32,7 @@ func TestNewAddConfigMapIsNotNil(t *testing.T) {
|
||||||
func TestGetOrCreateConfigMap(t *testing.T) {
|
func TestGetOrCreateConfigMap(t *testing.T) {
|
||||||
cmName := "test-config-name"
|
cmName := "test-config-name"
|
||||||
|
|
||||||
manifest := &manifest.Manifest{
|
manifest := &types.Manifest{
|
||||||
NamePrefix: "test-name-prefix",
|
NamePrefix: "test-name-prefix",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -65,7 +65,7 @@ func TestGetOrCreateConfigMap(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMergeData_LiteralSources(t *testing.T) {
|
func TestMergeData_LiteralSources(t *testing.T) {
|
||||||
ds := &manifest.DataSources{}
|
ds := &types.DataSources{}
|
||||||
|
|
||||||
err := mergeData(ds, dataConfig{LiteralSources: []string{"k1=v1"}})
|
err := mergeData(ds, dataConfig{LiteralSources: []string{"k1=v1"}})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -87,7 +87,7 @@ func TestMergeData_LiteralSources(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestMergeData_FileSources(t *testing.T) {
|
func TestMergeData_FileSources(t *testing.T) {
|
||||||
ds := &manifest.DataSources{}
|
ds := &types.DataSources{}
|
||||||
|
|
||||||
err := mergeData(ds, dataConfig{FileSources: []string{"file1"}})
|
err := mergeData(ds, dataConfig{FileSources: []string{"file1"}})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -111,7 +111,7 @@ func TestMergeData_FileSources(t *testing.T) {
|
||||||
func TestMergeData_EnvSource(t *testing.T) {
|
func TestMergeData_EnvSource(t *testing.T) {
|
||||||
envFileName := "env1"
|
envFileName := "env1"
|
||||||
envFileName2 := "env2"
|
envFileName2 := "env2"
|
||||||
ds := &manifest.DataSources{}
|
ds := &types.DataSources{}
|
||||||
|
|
||||||
err := mergeData(ds, dataConfig{EnvFileSource: envFileName})
|
err := mergeData(ds, dataConfig{EnvFileSource: envFileName})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
apiVersion: manifest.k8s.io/v1alpha1
|
kustomizationName: nginx-app
|
||||||
kind: Manifest
|
|
||||||
metadata:
|
|
||||||
name: nginx-app
|
|
||||||
namePrefix: team-foo-
|
namePrefix: team-foo-
|
||||||
objectLabels:
|
objectLabels:
|
||||||
app: mynginx
|
app: mynginx
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
apiVersion: manifest.k8s.io/v1alpha1
|
kustomizationName: nginx-app
|
||||||
kind: Manifest
|
|
||||||
metadata:
|
|
||||||
name: nginx-app
|
|
||||||
namePrefix: staging-
|
namePrefix: staging-
|
||||||
objectLabels:
|
objectLabels:
|
||||||
env: staging
|
env: staging
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
apiVersion: manifest.k8s.io/v1alpha1
|
kustomizationName: nginx-app
|
||||||
kind: Manifest
|
|
||||||
metadata:
|
|
||||||
name: nginx-app
|
|
||||||
namePrefix: team-foo-
|
namePrefix: team-foo-
|
||||||
objectLabels:
|
objectLabels:
|
||||||
app: mynginx
|
app: mynginx
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
apiVersion: manifest.k8s.io/v1alpha1
|
kustomizationName: nginx-app
|
||||||
kind: Manifest
|
|
||||||
metadata:
|
|
||||||
name: nginx-app
|
|
||||||
namePrefix: staging-
|
namePrefix: staging-
|
||||||
objectLabels:
|
objectLabels:
|
||||||
env: staging
|
env: staging
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
apiVersion: manifest.k8s.io/v1alpha1
|
kustomizationName: nginx-app
|
||||||
kind: Manifest
|
|
||||||
metadata:
|
|
||||||
name: nginx-app
|
|
||||||
namePrefix: team-foo-
|
namePrefix: team-foo-
|
||||||
objectLabels:
|
objectLabels:
|
||||||
app: mynginx
|
app: mynginx
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
apiVersion: manifest.k8s.io/v1alpha1
|
kustomizationName: nginx-app
|
||||||
kind: Manifest
|
|
||||||
metadata:
|
|
||||||
name: nginx-app
|
|
||||||
namePrefix: staging-
|
namePrefix: staging-
|
||||||
objectLabels:
|
objectLabels:
|
||||||
env: staging
|
env: staging
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,4 @@
|
||||||
apiVersion: manifest.k8s.io/v1alpha1
|
kustomizationName: nginx-app
|
||||||
kind: Manifest
|
|
||||||
metadata:
|
|
||||||
name: nginx-app
|
|
||||||
namePrefix: team-foo-
|
namePrefix: team-foo-
|
||||||
objectLabels:
|
objectLabels:
|
||||||
app: mynginx
|
app: mynginx
|
||||||
|
|
|
||||||
|
|
@ -24,9 +24,9 @@ import (
|
||||||
|
|
||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
|
|
||||||
manifest "k8s.io/kubectl/pkg/apis/manifest/v1alpha1"
|
|
||||||
"k8s.io/kubectl/pkg/kustomize/constants"
|
"k8s.io/kubectl/pkg/kustomize/constants"
|
||||||
interror "k8s.io/kubectl/pkg/kustomize/internal/error"
|
interror "k8s.io/kubectl/pkg/kustomize/internal/error"
|
||||||
|
"k8s.io/kubectl/pkg/kustomize/types"
|
||||||
"k8s.io/kubectl/pkg/kustomize/util/fs"
|
"k8s.io/kubectl/pkg/kustomize/util/fs"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -47,7 +47,7 @@ func newManifestFile(mPath string, fsys fs.FileSystem) (*manifestFile, error) {
|
||||||
func (mf *manifestFile) validate() error {
|
func (mf *manifestFile) validate() error {
|
||||||
f, err := mf.fsys.Stat(mf.mPath)
|
f, err := mf.fsys.Stat(mf.mPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errorMsg := fmt.Sprintf("Manifest (%s) missing\nRun `kustomize init` first", mf.mPath)
|
errorMsg := fmt.Sprintf("Missing kustomize config file '%s'.\n", mf.mPath)
|
||||||
merr := interror.ManifestError{ManifestFilepath: mf.mPath, ErrorMsg: errorMsg}
|
merr := interror.ManifestError{ManifestFilepath: mf.mPath, ErrorMsg: errorMsg}
|
||||||
return merr
|
return merr
|
||||||
}
|
}
|
||||||
|
|
@ -55,13 +55,13 @@ func (mf *manifestFile) validate() error {
|
||||||
mf.mPath = path.Join(mf.mPath, constants.KustomizeFileName)
|
mf.mPath = path.Join(mf.mPath, constants.KustomizeFileName)
|
||||||
_, err = mf.fsys.Stat(mf.mPath)
|
_, err = mf.fsys.Stat(mf.mPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errorMsg := fmt.Sprintf("Manifest (%s) missing\nRun `kustomize init` first", mf.mPath)
|
errorMsg := fmt.Sprintf("Missing kustomize config file '%s'.\n", mf.mPath)
|
||||||
merr := interror.ManifestError{ManifestFilepath: mf.mPath, ErrorMsg: errorMsg}
|
merr := interror.ManifestError{ManifestFilepath: mf.mPath, ErrorMsg: errorMsg}
|
||||||
return merr
|
return merr
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if !strings.HasSuffix(mf.mPath, constants.KustomizeFileName) {
|
if !strings.HasSuffix(mf.mPath, constants.KustomizeFileName) {
|
||||||
errorMsg := fmt.Sprintf("Manifest file (%s) should have %s suffix\n", mf.mPath, constants.KustomizeSuffix)
|
errorMsg := fmt.Sprintf("Kustomize config file path (%s) should have %s suffix\n", mf.mPath, constants.KustomizeSuffix)
|
||||||
merr := interror.ManifestError{ManifestFilepath: mf.mPath, ErrorMsg: errorMsg}
|
merr := interror.ManifestError{ManifestFilepath: mf.mPath, ErrorMsg: errorMsg}
|
||||||
return merr
|
return merr
|
||||||
}
|
}
|
||||||
|
|
@ -69,12 +69,12 @@ func (mf *manifestFile) validate() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mf *manifestFile) read() (*manifest.Manifest, error) {
|
func (mf *manifestFile) read() (*types.Manifest, error) {
|
||||||
bytes, err := mf.fsys.ReadFile(mf.mPath)
|
bytes, err := mf.fsys.ReadFile(mf.mPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var manifest manifest.Manifest
|
var manifest types.Manifest
|
||||||
err = yaml.Unmarshal(bytes, &manifest)
|
err = yaml.Unmarshal(bytes, &manifest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -82,9 +82,9 @@ func (mf *manifestFile) read() (*manifest.Manifest, error) {
|
||||||
return &manifest, err
|
return &manifest, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (mf *manifestFile) write(manifest *manifest.Manifest) error {
|
func (mf *manifestFile) write(manifest *types.Manifest) error {
|
||||||
if manifest == nil {
|
if manifest == nil {
|
||||||
return errors.New("util: failed to write passed-in nil manifest")
|
return errors.New("util: kustomize config file arg is nil.")
|
||||||
}
|
}
|
||||||
bytes, err := yaml.Marshal(manifest)
|
bytes, err := yaml.Marshal(manifest)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -21,12 +21,12 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
manifest "k8s.io/kubectl/pkg/apis/manifest/v1alpha1"
|
"k8s.io/kubectl/pkg/kustomize/types"
|
||||||
"k8s.io/kubectl/pkg/kustomize/util/fs"
|
"k8s.io/kubectl/pkg/kustomize/util/fs"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestWriteAndRead(t *testing.T) {
|
func TestWriteAndRead(t *testing.T) {
|
||||||
manifest := &manifest.Manifest{
|
manifest := &types.Manifest{
|
||||||
NamePrefix: "prefix",
|
NamePrefix: "prefix",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -67,21 +67,23 @@ func TestNewNotExist(t *testing.T) {
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatalf("expect an error")
|
t.Fatalf("expect an error")
|
||||||
}
|
}
|
||||||
if !strings.Contains(err.Error(), "Run `kustomize init` first") {
|
contained := "Missing kustomize config file"
|
||||||
t.Fatalf("expect an error contains %q, but got %v", "does not exist", err)
|
if !strings.Contains(err.Error(), contained) {
|
||||||
|
t.Fatalf("expect an error contains %q, but got %v", contained, err)
|
||||||
}
|
}
|
||||||
_, err = newManifestFile("kustomize.yaml", fakeFS)
|
_, err = newManifestFile("kustomize.yaml", fakeFS)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatalf("expect an error")
|
t.Fatalf("expect an error")
|
||||||
}
|
}
|
||||||
if !strings.Contains(err.Error(), "Run `kustomize init` first") {
|
if !strings.Contains(err.Error(), contained) {
|
||||||
t.Fatalf("expect an error contains %q, but got %v", "does not exist", err)
|
t.Fatalf("expect an error contains %q, but got %v", contained, err)
|
||||||
}
|
}
|
||||||
_, err = newManifestFile(badSuffix, fakeFS)
|
_, err = newManifestFile(badSuffix, fakeFS)
|
||||||
if err == nil {
|
if err == nil {
|
||||||
t.Fatalf("expect an error")
|
t.Fatalf("expect an error")
|
||||||
}
|
}
|
||||||
if !strings.Contains(err.Error(), "should have .yaml suffix") {
|
contained = "should have .yaml suffix"
|
||||||
t.Fatalf("expect an error contains %q, but got %v", "does not exist", err)
|
if !strings.Contains(err.Error(), contained) {
|
||||||
|
t.Fatalf("expect an error contains %q, but got %v", contained, err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,6 @@ import (
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
manifest "k8s.io/kubectl/pkg/apis/manifest/v1alpha1"
|
|
||||||
cutil "k8s.io/kubectl/pkg/kustomize/configmapandsecret/util"
|
cutil "k8s.io/kubectl/pkg/kustomize/configmapandsecret/util"
|
||||||
"k8s.io/kubectl/pkg/kustomize/hash"
|
"k8s.io/kubectl/pkg/kustomize/hash"
|
||||||
"k8s.io/kubectl/pkg/kustomize/resource"
|
"k8s.io/kubectl/pkg/kustomize/resource"
|
||||||
|
|
@ -36,7 +35,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
// MakeConfigmapAndGenerateName makes a configmap and returns the configmap and the name appended with a hash.
|
// MakeConfigmapAndGenerateName makes a configmap and returns the configmap and the name appended with a hash.
|
||||||
func MakeConfigmapAndGenerateName(cm manifest.ConfigMapArgs) (*unstructured.Unstructured, string, error) {
|
func MakeConfigmapAndGenerateName(cm types.ConfigMapArgs) (*unstructured.Unstructured, string, error) {
|
||||||
corev1CM, err := makeConfigMap(cm)
|
corev1CM, err := makeConfigMap(cm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", err
|
return nil, "", err
|
||||||
|
|
@ -51,7 +50,7 @@ func MakeConfigmapAndGenerateName(cm manifest.ConfigMapArgs) (*unstructured.Unst
|
||||||
}
|
}
|
||||||
|
|
||||||
// MakeSecretAndGenerateName returns a secret with the name appended with a hash.
|
// MakeSecretAndGenerateName returns a secret with the name appended with a hash.
|
||||||
func MakeSecretAndGenerateName(secret manifest.SecretArgs, path string) (*unstructured.Unstructured, string, error) {
|
func MakeSecretAndGenerateName(secret types.SecretArgs, path string) (*unstructured.Unstructured, string, error) {
|
||||||
corev1Secret, err := makeSecret(secret, path)
|
corev1Secret, err := makeSecret(secret, path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", err
|
return nil, "", err
|
||||||
|
|
@ -75,7 +74,7 @@ func objectToUnstructured(in runtime.Object) (*unstructured.Unstructured, error)
|
||||||
return &out, err
|
return &out, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeConfigMap(cm manifest.ConfigMapArgs) (*corev1.ConfigMap, error) {
|
func makeConfigMap(cm types.ConfigMapArgs) (*corev1.ConfigMap, error) {
|
||||||
corev1cm := &corev1.ConfigMap{}
|
corev1cm := &corev1.ConfigMap{}
|
||||||
corev1cm.APIVersion = "v1"
|
corev1cm.APIVersion = "v1"
|
||||||
corev1cm.Kind = "ConfigMap"
|
corev1cm.Kind = "ConfigMap"
|
||||||
|
|
@ -101,7 +100,7 @@ func makeConfigMap(cm manifest.ConfigMapArgs) (*corev1.ConfigMap, error) {
|
||||||
return corev1cm, nil
|
return corev1cm, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeSecret(secret manifest.SecretArgs, path string) (*corev1.Secret, error) {
|
func makeSecret(secret types.SecretArgs, path string) (*corev1.Secret, error) {
|
||||||
corev1secret := &corev1.Secret{}
|
corev1secret := &corev1.Secret{}
|
||||||
corev1secret.APIVersion = "v1"
|
corev1secret.APIVersion = "v1"
|
||||||
corev1secret.Kind = "Secret"
|
corev1secret.Kind = "Secret"
|
||||||
|
|
@ -137,7 +136,7 @@ func populateMap(m resource.ResourceCollection, obj *unstructured.Unstructured,
|
||||||
}
|
}
|
||||||
|
|
||||||
// MakeConfigMapsResourceCollection returns a map of <GVK, oldName> -> unstructured object.
|
// MakeConfigMapsResourceCollection returns a map of <GVK, oldName> -> unstructured object.
|
||||||
func MakeConfigMapsResourceCollection(maps []manifest.ConfigMapArgs) (resource.ResourceCollection, error) {
|
func MakeConfigMapsResourceCollection(maps []types.ConfigMapArgs) (resource.ResourceCollection, error) {
|
||||||
m := resource.ResourceCollection{}
|
m := resource.ResourceCollection{}
|
||||||
for _, cm := range maps {
|
for _, cm := range maps {
|
||||||
unstructuredConfigMap, nameWithHash, err := MakeConfigmapAndGenerateName(cm)
|
unstructuredConfigMap, nameWithHash, err := MakeConfigmapAndGenerateName(cm)
|
||||||
|
|
@ -153,7 +152,7 @@ func MakeConfigMapsResourceCollection(maps []manifest.ConfigMapArgs) (resource.R
|
||||||
}
|
}
|
||||||
|
|
||||||
// MakeSecretsResourceCollection returns a map of <GVK, oldName> -> unstructured object.
|
// MakeSecretsResourceCollection returns a map of <GVK, oldName> -> unstructured object.
|
||||||
func MakeSecretsResourceCollection(secrets []manifest.SecretArgs, path string) (resource.ResourceCollection, error) {
|
func MakeSecretsResourceCollection(secrets []types.SecretArgs, path string) (resource.ResourceCollection, error) {
|
||||||
m := resource.ResourceCollection{}
|
m := resource.ResourceCollection{}
|
||||||
for _, secret := range secrets {
|
for _, secret := range secrets {
|
||||||
unstructuredSecret, nameWithHash, err := MakeSecretAndGenerateName(secret, path)
|
unstructuredSecret, nameWithHash, err := MakeSecretAndGenerateName(secret, path)
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ import (
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
manifest "k8s.io/kubectl/pkg/apis/manifest/v1alpha1"
|
"k8s.io/kubectl/pkg/kustomize/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
func makeEnvConfigMap(name string) *corev1.ConfigMap {
|
func makeEnvConfigMap(name string) *corev1.ConfigMap {
|
||||||
|
|
@ -131,16 +131,16 @@ func makeUnstructuredSecret(name string) *unstructured.Unstructured {
|
||||||
func TestConstructConfigMap(t *testing.T) {
|
func TestConstructConfigMap(t *testing.T) {
|
||||||
type testCase struct {
|
type testCase struct {
|
||||||
description string
|
description string
|
||||||
input manifest.ConfigMapArgs
|
input types.ConfigMapArgs
|
||||||
expected *corev1.ConfigMap
|
expected *corev1.ConfigMap
|
||||||
}
|
}
|
||||||
|
|
||||||
testCases := []testCase{
|
testCases := []testCase{
|
||||||
{
|
{
|
||||||
description: "construct config map from env",
|
description: "construct config map from env",
|
||||||
input: manifest.ConfigMapArgs{
|
input: types.ConfigMapArgs{
|
||||||
Name: "envConfigMap",
|
Name: "envConfigMap",
|
||||||
DataSources: manifest.DataSources{
|
DataSources: types.DataSources{
|
||||||
EnvSource: "../examples/simple/instances/exampleinstance/configmap/app.env",
|
EnvSource: "../examples/simple/instances/exampleinstance/configmap/app.env",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -148,9 +148,9 @@ func TestConstructConfigMap(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "construct config map from file",
|
description: "construct config map from file",
|
||||||
input: manifest.ConfigMapArgs{
|
input: types.ConfigMapArgs{
|
||||||
Name: "fileConfigMap",
|
Name: "fileConfigMap",
|
||||||
DataSources: manifest.DataSources{
|
DataSources: types.DataSources{
|
||||||
FileSources: []string{"../examples/simple/instances/exampleinstance/configmap/app-init.ini"},
|
FileSources: []string{"../examples/simple/instances/exampleinstance/configmap/app-init.ini"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -158,9 +158,9 @@ func TestConstructConfigMap(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "construct config map from literal",
|
description: "construct config map from literal",
|
||||||
input: manifest.ConfigMapArgs{
|
input: types.ConfigMapArgs{
|
||||||
Name: "literalConfigMap",
|
Name: "literalConfigMap",
|
||||||
DataSources: manifest.DataSources{
|
DataSources: types.DataSources{
|
||||||
LiteralSources: []string{"a=x", "b=y"},
|
LiteralSources: []string{"a=x", "b=y"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -180,7 +180,7 @@ func TestConstructConfigMap(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestConstructSecret(t *testing.T) {
|
func TestConstructSecret(t *testing.T) {
|
||||||
secret := manifest.SecretArgs{
|
secret := types.SecretArgs{
|
||||||
Name: "secret",
|
Name: "secret",
|
||||||
Commands: map[string]string{
|
Commands: map[string]string{
|
||||||
"DB_USERNAME": "printf admin",
|
"DB_USERNAME": "printf admin",
|
||||||
|
|
@ -199,7 +199,7 @@ func TestConstructSecret(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestFailConstructSecret(t *testing.T) {
|
func TestFailConstructSecret(t *testing.T) {
|
||||||
secret := manifest.SecretArgs{
|
secret := types.SecretArgs{
|
||||||
Name: "secret",
|
Name: "secret",
|
||||||
Commands: map[string]string{
|
Commands: map[string]string{
|
||||||
"FAILURE": "false", // This will fail.
|
"FAILURE": "false", // This will fail.
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,4 @@
|
||||||
# This example is from https://docs.google.com/document/d/1cLPGweVEYrVqQvBLJg6sxV-TrE5Rm2MNOBA_cxZP2WU/edit#heading=h.dr88tktf0e99
|
kustomizationName: test-infra-mungebot
|
||||||
|
|
||||||
apiVersion: manifest.k8s.io/v1alpha1
|
|
||||||
kind: Manifest
|
|
||||||
metadata:
|
|
||||||
name: test-infra-mungebot
|
|
||||||
namePrefix: test-infra-
|
namePrefix: test-infra-
|
||||||
# Labels to add to all objects and selectors.
|
# Labels to add to all objects and selectors.
|
||||||
# These labels would also be used to form the selector for apply --prune
|
# These labels would also be used to form the selector for apply --prune
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,4 @@
|
||||||
# This example is from https://docs.google.com/document/d/1cLPGweVEYrVqQvBLJg6sxV-TrE5Rm2MNOBA_cxZP2WU/edit#heading=h.dr88tktf0e99
|
kustomizationName: mungebot
|
||||||
|
|
||||||
# Inspired by https://github.com/kubernetes/helm/blob/master/docs/charts.md
|
|
||||||
# But Kubernetes API style
|
|
||||||
apiVersion: manifest.k8s.io/v1alpha1
|
|
||||||
kind: Manifest
|
|
||||||
metadata:
|
|
||||||
name: mungebot
|
|
||||||
namePrefix: baseprefix-
|
namePrefix: baseprefix-
|
||||||
# Labels to add to all objects and selectors.
|
# Labels to add to all objects and selectors.
|
||||||
# These labels would also be used to form the selector for apply --prune
|
# These labels would also be used to form the selector for apply --prune
|
||||||
|
|
|
||||||
|
|
@ -22,12 +22,12 @@ import (
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/util/validation"
|
"k8s.io/apimachinery/pkg/util/validation"
|
||||||
manifest "k8s.io/kubectl/pkg/apis/manifest/v1alpha1"
|
|
||||||
cutil "k8s.io/kubectl/pkg/kustomize/configmapandsecret/util"
|
cutil "k8s.io/kubectl/pkg/kustomize/configmapandsecret/util"
|
||||||
|
"k8s.io/kubectl/pkg/kustomize/types"
|
||||||
"k8s.io/kubectl/pkg/loader"
|
"k8s.io/kubectl/pkg/loader"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newFromConfigMap(l loader.Loader, cm manifest.ConfigMapArgs) (*Resource, error) {
|
func newFromConfigMap(l loader.Loader, cm types.ConfigMapArgs) (*Resource, error) {
|
||||||
corev1CM, err := makeConfigMap(l, cm)
|
corev1CM, err := makeConfigMap(l, cm)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -40,7 +40,7 @@ func newFromConfigMap(l loader.Loader, cm manifest.ConfigMapArgs) (*Resource, er
|
||||||
return &Resource{Data: data, Behavior: cm.Behavior}, nil
|
return &Resource{Data: data, Behavior: cm.Behavior}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func makeConfigMap(l loader.Loader, cm manifest.ConfigMapArgs) (*corev1.ConfigMap, error) {
|
func makeConfigMap(l loader.Loader, cm types.ConfigMapArgs) (*corev1.ConfigMap, error) {
|
||||||
var envPairs, literalPairs, filePairs []kvPair
|
var envPairs, literalPairs, filePairs []kvPair
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
|
@ -130,8 +130,8 @@ func addKV(m map[string]string, kv kvPair) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFromConfigMaps returns a Resource slice given a configmap metadata slice from manifest file.
|
// NewFromConfigMaps returns a Resource slice given a configmap metadata slice from kustomize config file.
|
||||||
func NewFromConfigMaps(loader loader.Loader, cmList []manifest.ConfigMapArgs) (ResourceCollection, error) {
|
func NewFromConfigMaps(loader loader.Loader, cmList []types.ConfigMapArgs) (ResourceCollection, error) {
|
||||||
allResources := []*Resource{}
|
allResources := []*Resource{}
|
||||||
for _, cm := range cmList {
|
for _, cm := range cmList {
|
||||||
res, err := newFromConfigMap(loader, cm)
|
res, err := newFromConfigMap(loader, cm)
|
||||||
|
|
|
||||||
|
|
@ -22,15 +22,15 @@ import (
|
||||||
|
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
manifest "k8s.io/kubectl/pkg/apis/manifest/v1alpha1"
|
|
||||||
"k8s.io/kubectl/pkg/kustomize/resource"
|
"k8s.io/kubectl/pkg/kustomize/resource"
|
||||||
|
"k8s.io/kubectl/pkg/kustomize/types"
|
||||||
"k8s.io/kubectl/pkg/loader/loadertest"
|
"k8s.io/kubectl/pkg/loader/loadertest"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNewFromConfigMaps(t *testing.T) {
|
func TestNewFromConfigMaps(t *testing.T) {
|
||||||
type testCase struct {
|
type testCase struct {
|
||||||
description string
|
description string
|
||||||
input []manifest.ConfigMapArgs
|
input []types.ConfigMapArgs
|
||||||
filepath string
|
filepath string
|
||||||
content string
|
content string
|
||||||
expected resource.ResourceCollection
|
expected resource.ResourceCollection
|
||||||
|
|
@ -40,10 +40,10 @@ func TestNewFromConfigMaps(t *testing.T) {
|
||||||
testCases := []testCase{
|
testCases := []testCase{
|
||||||
{
|
{
|
||||||
description: "construct config map from env",
|
description: "construct config map from env",
|
||||||
input: []manifest.ConfigMapArgs{
|
input: []types.ConfigMapArgs{
|
||||||
{
|
{
|
||||||
Name: "envConfigMap",
|
Name: "envConfigMap",
|
||||||
DataSources: manifest.DataSources{
|
DataSources: types.DataSources{
|
||||||
EnvSource: "app.env",
|
EnvSource: "app.env",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -74,9 +74,9 @@ func TestNewFromConfigMaps(t *testing.T) {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "construct config map from file",
|
description: "construct config map from file",
|
||||||
input: []manifest.ConfigMapArgs{{
|
input: []types.ConfigMapArgs{{
|
||||||
Name: "fileConfigMap",
|
Name: "fileConfigMap",
|
||||||
DataSources: manifest.DataSources{
|
DataSources: types.DataSources{
|
||||||
FileSources: []string{"app-init.ini"},
|
FileSources: []string{"app-init.ini"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -108,10 +108,10 @@ BAR=baz
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
description: "construct config map from literal",
|
description: "construct config map from literal",
|
||||||
input: []manifest.ConfigMapArgs{
|
input: []types.ConfigMapArgs{
|
||||||
{
|
{
|
||||||
Name: "literalConfigMap",
|
Name: "literalConfigMap",
|
||||||
DataSources: manifest.DataSources{
|
DataSources: types.DataSources{
|
||||||
LiteralSources: []string{"a=x", "b=y"},
|
LiteralSources: []string{"a=x", "b=y"},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -24,10 +24,10 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
manifest "k8s.io/kubectl/pkg/apis/manifest/v1alpha1"
|
"k8s.io/kubectl/pkg/kustomize/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newFromSecretGenerator(p string, s manifest.SecretArgs) (*Resource, error) {
|
func newFromSecretGenerator(p string, s types.SecretArgs) (*Resource, error) {
|
||||||
corev1secret := &corev1.Secret{}
|
corev1secret := &corev1.Secret{}
|
||||||
corev1secret.APIVersion = "v1"
|
corev1secret.APIVersion = "v1"
|
||||||
corev1secret.Kind = "Secret"
|
corev1secret.Kind = "Secret"
|
||||||
|
|
@ -70,7 +70,7 @@ func createSecretKey(wd string, command string) ([]byte, error) {
|
||||||
|
|
||||||
// NewFromSecretGenerators takes a SecretGenerator slice and executes its command in directory p
|
// NewFromSecretGenerators takes a SecretGenerator slice and executes its command in directory p
|
||||||
// then writes the output to a Resource slice and return it.
|
// then writes the output to a Resource slice and return it.
|
||||||
func NewFromSecretGenerators(p string, secretList []manifest.SecretArgs) (ResourceCollection, error) {
|
func NewFromSecretGenerators(p string, secretList []types.SecretArgs) (ResourceCollection, error) {
|
||||||
allResources := []*Resource{}
|
allResources := []*Resource{}
|
||||||
for _, secret := range secretList {
|
for _, secret := range secretList {
|
||||||
res, err := newFromSecretGenerator(p, secret)
|
res, err := newFromSecretGenerator(p, secret)
|
||||||
|
|
|
||||||
|
|
@ -24,11 +24,11 @@ import (
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
manifest "k8s.io/kubectl/pkg/apis/manifest/v1alpha1"
|
"k8s.io/kubectl/pkg/kustomize/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNewFromSecretGenerators(t *testing.T) {
|
func TestNewFromSecretGenerators(t *testing.T) {
|
||||||
secrets := []manifest.SecretArgs{
|
secrets := []types.SecretArgs{
|
||||||
{
|
{
|
||||||
Name: "secret",
|
Name: "secret",
|
||||||
Commands: map[string]string{
|
Commands: map[string]string{
|
||||||
|
|
|
||||||
|
|
@ -14,60 +14,17 @@ See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package v1alpha1
|
package types
|
||||||
|
|
||||||
import (
|
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Descriptor contains all the metadata of the package and drives package
|
|
||||||
// searching and browsing, and support the fork/rebase upgrade workflow.
|
|
||||||
// It can be used by something like an app registry.
|
|
||||||
type Descriptor struct {
|
|
||||||
metav1.TypeMeta `json:",inline" yaml:",inline"`
|
|
||||||
// Standard object's metadata.
|
|
||||||
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
|
|
||||||
metav1.ObjectMeta `json:"metadata,omitempty" yaml:"metadata,omitempty"`
|
|
||||||
|
|
||||||
// The name of the package.
|
|
||||||
// The name of an individual instance should live in metadata.name.
|
|
||||||
Name string `json:"name,omitempty" yaml:"name,omitempty"`
|
|
||||||
|
|
||||||
// Description of the package.
|
|
||||||
Description string `json:"description,omitempty" yaml:"description,omitempty"`
|
|
||||||
|
|
||||||
// An pointer to the icon.
|
|
||||||
Icon string `json:"icon,omitempty" yaml:"icon,omitempty"`
|
|
||||||
|
|
||||||
// Search keywords for the package.
|
|
||||||
Keywords []string `json:"keywords,omitempty" yaml:"keywords,omitempty"`
|
|
||||||
|
|
||||||
// Homepage of the application package.
|
|
||||||
Home string `json:"home,omitempty" yaml:"home,omitempty"`
|
|
||||||
|
|
||||||
// Source specifies the upstream URL, e.g. https://github.com/foo/bar.git,
|
|
||||||
// file://host/path, etc.
|
|
||||||
// hosting the resource files specified in Base and Overlays.
|
|
||||||
// This is useful in the fork/rebase workflow.
|
|
||||||
Source string `json:"source,omitempty" yaml:"source,omitempty"`
|
|
||||||
|
|
||||||
// Version of the package.
|
|
||||||
PackageVersion string `json:"packageVersion,omitempty" yaml:"packageVersion,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Manifest has all the information to expand of generate the k8s api resources.
|
// Manifest has all the information to expand of generate the k8s api resources.
|
||||||
// It can be used by kubectl or some other tooling.
|
// It can be used by kubectl or some other tooling.
|
||||||
// A manifest could be either a Base or an Overlay.
|
// A manifest could be either a Base or an Overlay.
|
||||||
|
// TODO: rename Manifest to Kustomization
|
||||||
type Manifest struct {
|
type Manifest struct {
|
||||||
metav1.TypeMeta `json:",inline" yaml:",inline"`
|
// KustomizationName is a documentation field - a name for the customizations
|
||||||
// Standard object's metadata.
|
// in a marshalled version of this struct, that survives YAML unmarshalling
|
||||||
// More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata
|
// that discards comments.
|
||||||
metav1.ObjectMeta `json:"metadata,omitempty" yaml:"metadata,omitempty"`
|
KustomizationName string `json:"kustomizationName,omitempty" yaml:"kustomizationName,omitempty"`
|
||||||
|
|
||||||
// TODO: figure out if we need field ManifestVersion.
|
|
||||||
// See: https://github.com/kubernetes/kubernetes/pull/52570/files/3eea91793dfbc3fdb0799589fac3790c4cde58a4#r140391019
|
|
||||||
// Version of the manifest.
|
|
||||||
// ManifestVersion string `json:"manifestVersion,omitempty" yaml:"manifestVersion,omitempty"`
|
|
||||||
|
|
||||||
// NamePrefix will prefix the names of all resources mentioned in the manifest
|
// NamePrefix will prefix the names of all resources mentioned in the manifest
|
||||||
// including generated configmaps and secrets.
|
// including generated configmaps and secrets.
|
||||||
Loading…
Reference in New Issue