mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-10 08:20:59 +00:00
Merge pull request #2769 from kzwang/add-component
add kustomize edit add component command
This commit is contained in:
79
kustomize/internal/commands/edit/add/addcomponent.go
Normal file
79
kustomize/internal/commands/edit/add/addcomponent.go
Normal file
@@ -0,0 +1,79 @@
|
||||
// Copyright 2019 The Kubernetes Authors.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package add
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"log"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"sigs.k8s.io/kustomize/api/filesys"
|
||||
"sigs.k8s.io/kustomize/api/loader"
|
||||
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/kustfile"
|
||||
"sigs.k8s.io/kustomize/kustomize/v3/internal/commands/util"
|
||||
)
|
||||
|
||||
type addComponentOptions struct {
|
||||
componentFilePaths []string
|
||||
}
|
||||
|
||||
// newCmdAddComponent adds the name of a file containing a component to the kustomization file.
|
||||
func newCmdAddComponent(fSys filesys.FileSystem) *cobra.Command {
|
||||
var o addComponentOptions
|
||||
|
||||
cmd := &cobra.Command{
|
||||
Use: "component",
|
||||
Short: "Add the name of a file containing a component to the kustomization file.",
|
||||
Example: `
|
||||
add component {filepath}`,
|
||||
RunE: func(cmd *cobra.Command, args []string) error {
|
||||
err := o.Validate(args)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return o.RunAddComponent(fSys)
|
||||
},
|
||||
}
|
||||
return cmd
|
||||
}
|
||||
|
||||
// Validate validates addComponent command.
|
||||
func (o *addComponentOptions) Validate(args []string) error {
|
||||
if len(args) == 0 {
|
||||
return errors.New("must specify a component file")
|
||||
}
|
||||
o.componentFilePaths = args
|
||||
return nil
|
||||
}
|
||||
|
||||
// RunAddComponent runs addComponent command (do real work).
|
||||
func (o *addComponentOptions) RunAddComponent(fSys filesys.FileSystem) error {
|
||||
components, err := util.GlobPatternsWithLoader(fSys, loader.NewFileLoaderAtCwd(fSys), o.componentFilePaths)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(components) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
mf, err := kustfile.NewKustomizationFile(fSys)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
m, err := mf.Read()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, component := range components {
|
||||
if kustfile.StringInSlice(component, m.Components) {
|
||||
log.Printf("component %s already in kustomization file", component)
|
||||
continue
|
||||
}
|
||||
m.Components = append(m.Components, component)
|
||||
}
|
||||
|
||||
return mf.Write(m)
|
||||
}
|
||||
76
kustomize/internal/commands/edit/add/addcomponent_test.go
Normal file
76
kustomize/internal/commands/edit/add/addcomponent_test.go
Normal file
@@ -0,0 +1,76 @@
|
||||
// Copyright 2019 The Kubernetes Authors.
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package add
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"sigs.k8s.io/kustomize/api/filesys"
|
||||
testutils_test "sigs.k8s.io/kustomize/kustomize/v3/internal/commands/testutils"
|
||||
)
|
||||
|
||||
const (
|
||||
componentFileName = "myWonderfulComponent.yaml"
|
||||
componentFileContent = `
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit,
|
||||
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
||||
`
|
||||
)
|
||||
|
||||
func TestAddComponentHappyPath(t *testing.T) {
|
||||
fSys := filesys.MakeEmptyDirInMemory()
|
||||
fSys.WriteFile(componentFileName, []byte(componentFileContent))
|
||||
fSys.WriteFile(componentFileName+"another", []byte(componentFileContent))
|
||||
testutils_test.WriteTestKustomization(fSys)
|
||||
|
||||
cmd := newCmdAddComponent(fSys)
|
||||
args := []string{componentFileName + "*"}
|
||||
err := cmd.RunE(cmd, args)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected cmd error: %v", err)
|
||||
}
|
||||
content, err := testutils_test.ReadTestKustomization(fSys)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected read error: %v", err)
|
||||
}
|
||||
if !strings.Contains(string(content), componentFileName) {
|
||||
t.Errorf("expected component name in kustomization")
|
||||
}
|
||||
if !strings.Contains(string(content), componentFileName+"another") {
|
||||
t.Errorf("expected component name in kustomization")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAddComponentAlreadyThere(t *testing.T) {
|
||||
fSys := filesys.MakeFsInMemory()
|
||||
fSys.WriteFile(componentFileName, []byte(componentFileContent))
|
||||
testutils_test.WriteTestKustomization(fSys)
|
||||
|
||||
cmd := newCmdAddComponent(fSys)
|
||||
args := []string{componentFileName}
|
||||
err := cmd.RunE(cmd, args)
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected cmd error: %v", err)
|
||||
}
|
||||
|
||||
// adding an existing component doesn't return an error
|
||||
err = cmd.RunE(cmd, args)
|
||||
if err != nil {
|
||||
t.Errorf("unexpected cmd error :%v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAddComponentNoArgs(t *testing.T) {
|
||||
fSys := filesys.MakeFsInMemory()
|
||||
|
||||
cmd := newCmdAddComponent(fSys)
|
||||
err := cmd.Execute()
|
||||
if err == nil {
|
||||
t.Errorf("expected error: %v", err)
|
||||
}
|
||||
if err.Error() != "must specify a component file" {
|
||||
t.Errorf("incorrect error: %v", err.Error())
|
||||
}
|
||||
}
|
||||
@@ -31,6 +31,9 @@ func NewCmdAdd(
|
||||
# Adds a patch to the kustomization
|
||||
kustomize edit add patch <filepath>
|
||||
|
||||
# Adds a component to the kustomization
|
||||
kustomize edit add component <filepath>
|
||||
|
||||
# Adds one or more base directories to the kustomization
|
||||
kustomize edit add base <filepath>
|
||||
kustomize edit add base <filepath1>,<filepath2>,<filepath3>
|
||||
@@ -46,6 +49,7 @@ func NewCmdAdd(
|
||||
c.AddCommand(
|
||||
newCmdAddResource(fSys),
|
||||
newCmdAddPatch(fSys),
|
||||
newCmdAddComponent(fSys),
|
||||
newCmdAddSecret(fSys, ldr, kf),
|
||||
newCmdAddConfigMap(fSys, ldr, kf),
|
||||
newCmdAddBase(fSys),
|
||||
|
||||
Reference in New Issue
Block a user