Skip to content
This repository has been archived by the owner on Sep 9, 2020. It is now read-only.

Commit

Permalink
Merge pull request #421 from bryanl/support-global-env-parameters
Browse files Browse the repository at this point in the history
Support global env parameters
  • Loading branch information
bryanl committed Apr 6, 2018
2 parents 74e03a6 + e79264c commit 68d8f75
Show file tree
Hide file tree
Showing 108 changed files with 2,785 additions and 754 deletions.
6 changes: 3 additions & 3 deletions Gopkg.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 2 additions & 6 deletions Gopkg.toml
Expand Up @@ -54,7 +54,7 @@

[[constraint]]
name = "github.com/ksonnet/ksonnet-lib"
revision = "f1aa55533283d55b2967f1e2cfb47048cf6661c8"
revision = "5e07f358ac2de69591818afa41b7623c8cc97ac0"

[[constraint]]
name = "github.com/mattn/go-isatty"
Expand All @@ -70,7 +70,7 @@

[[constraint]]
name = "github.com/sirupsen/logrus"
revision = "3d4380f53a34dcdc95f0c1db702615992b38d9a4"
revision = "778f2e774c725116edbc3d039dc0dfc1cc62aae8"

[[constraint]]
name = "github.com/spf13/afero"
Expand All @@ -96,10 +96,6 @@
name = "github.com/yudai/gojsondiff"
revision = "9209d1532c51cabe0439993586a71c207b09a0ac"

[[constraint]]
name = "golang.org/x/crypto"
revision = "0fe963104e9d1877082f8fb38f816fcd97eb1d10"

[[constraint]]
name = "golang.org/x/oauth2"
revision = "cce311a261e6fcf29de72ca96827bdb0b7d9c9e6"
Expand Down
22 changes: 14 additions & 8 deletions actions/param_delete.go
Expand Up @@ -26,6 +26,7 @@ import (

type getModuleFn func(ksApp app.App, moduleName string) (component.Module, error)
type deleteEnvFn func(ksApp app.App, envName, componentName, paramName string) error
type deleteEnvGlobalFn func(a app.App, envName, paramName string) error

// RunParamDelete runs `param set`
func RunParamDelete(m map[string]interface{}) error {
Expand All @@ -46,9 +47,10 @@ type ParamDelete struct {
global bool
envName string

deleteEnvFn deleteEnvFn
getModuleFn getModuleFn
resolvePathFn func(a app.App, path string) (component.Module, component.Component, error)
deleteEnvFn deleteEnvFn
deleteEnvGlobalFn deleteEnvGlobalFn
getModuleFn getModuleFn
resolvePathFn func(a app.App, path string) (component.Module, component.Component, error)
}

// NewParamDelete creates an instance of ParamDelete.
Expand All @@ -57,15 +59,16 @@ func NewParamDelete(m map[string]interface{}) (*ParamDelete, error) {

pd := &ParamDelete{
app: ol.loadApp(),
name: ol.loadString(OptionName),
name: ol.loadOptionalString(OptionName),
rawPath: ol.loadString(OptionPath),
global: ol.loadOptionalBool(OptionGlobal),
envName: ol.loadOptionalString(OptionEnvName),
index: ol.loadOptionalInt(OptionIndex),

deleteEnvFn: env.DeleteParam,
resolvePathFn: component.ResolvePath,
getModuleFn: component.GetModule,
deleteEnvFn: env.DeleteParam,
deleteEnvGlobalFn: env.UnsetGlobalParams,
resolvePathFn: component.ResolvePath,
getModuleFn: component.GetModule,
}

if ol.err != nil {
Expand All @@ -82,7 +85,10 @@ func NewParamDelete(m map[string]interface{}) (*ParamDelete, error) {
// Run runs the action.
func (pd *ParamDelete) Run() error {
if pd.envName != "" {
return pd.deleteEnvFn(pd.app, pd.envName, pd.name, pd.rawPath)
if pd.name != "" {
return pd.deleteEnvFn(pd.app, pd.envName, pd.name, pd.rawPath)
}
return pd.deleteEnvGlobalFn(pd.app, pd.envName, pd.rawPath)
}

path := strings.Split(pd.rawPath, ".")
Expand Down
25 changes: 25 additions & 0 deletions actions/param_delete_test.go
Expand Up @@ -133,3 +133,28 @@ func TestParamDelete_env(t *testing.T) {
require.NoError(t, err)
})
}

func TestParamDelete_env_global(t *testing.T) {
withApp(t, func(appMock *amocks.App) {
path := "replicas"

in := map[string]interface{}{
OptionApp: appMock,
OptionPath: path,
OptionEnvName: "default",
}

a, err := NewParamDelete(in)
require.NoError(t, err)

envDelete := func(ksApp app.App, envName, pName string) error {
assert.Equal(t, "default", envName)
assert.Equal(t, "replicas", pName)
return nil
}
a.deleteEnvGlobalFn = envDelete

err = a.Run()
require.NoError(t, err)
})
}
8 changes: 4 additions & 4 deletions actions/param_list.go
Expand Up @@ -68,12 +68,12 @@ func NewParamList(m map[string]interface{}) (*ParamList, error) {

// Run runs the ParamList action.
func (pl *ParamList) Run() error {
ns, err := pl.cm.Module(pl.app, pl.module)
module, err := pl.cm.Module(pl.app, pl.module)
if err != nil {
return errors.Wrap(err, "could not find namespace")
}

params, err := pl.collectParams(ns)
params, err := pl.collectParams(module)
if err != nil {
return err
}
Expand All @@ -90,9 +90,9 @@ func (pl *ParamList) Run() error {
return nil
}

func (pl *ParamList) collectParams(ns component.Module) ([]component.ModuleParameter, error) {
func (pl *ParamList) collectParams(module component.Module) ([]component.ModuleParameter, error) {
if pl.componentName == "" {
return ns.Params(pl.envName)
return module.Params(pl.envName)
}

c, err := pl.cm.Component(pl.app, pl.module, pl.componentName)
Expand Down
35 changes: 21 additions & 14 deletions actions/param_set.go
Expand Up @@ -16,7 +16,6 @@
package actions

import (
"strconv"
"strings"

"github.com/ksonnet/ksonnet/component"
Expand Down Expand Up @@ -47,9 +46,10 @@ type ParamSet struct {
global bool
envName string

getModuleFn getModuleFn
resolvePathFn func(a app.App, path string) (component.Module, component.Component, error)
setEnvFn func(ksApp app.App, envName, name, pName, value string) error
getModuleFn getModuleFn
resolvePathFn func(a app.App, path string) (component.Module, component.Component, error)
setEnvFn func(ksApp app.App, envName, name, pName, value string) error
setGlobalEnvFn func(ksApp app.App, envName, pName, value string) error
}

// NewParamSet creates an instance of ParamSet.
Expand All @@ -58,16 +58,17 @@ func NewParamSet(m map[string]interface{}) (*ParamSet, error) {

ps := &ParamSet{
app: ol.loadApp(),
name: ol.loadString(OptionName),
name: ol.loadOptionalString(OptionName),
rawPath: ol.loadString(OptionPath),
rawValue: ol.loadString(OptionValue),
global: ol.loadOptionalBool(OptionGlobal),
envName: ol.loadOptionalString(OptionEnvName),
index: ol.loadOptionalInt(OptionIndex),

getModuleFn: component.GetModule,
resolvePathFn: component.ResolvePath,
setEnvFn: setEnv,
getModuleFn: component.GetModule,
resolvePathFn: component.ResolvePath,
setEnvFn: setEnv,
setGlobalEnvFn: setGlobalEnv,
}

if ol.err != nil {
Expand All @@ -88,13 +89,11 @@ func (ps *ParamSet) Run() error {
return errors.Wrap(err, "value is invalid")
}

evaluatedValue := ps.rawValue
if _, ok := value.(string); ok {
evaluatedValue = strconv.Quote(ps.rawValue)
}

if ps.envName != "" {
return ps.setEnvFn(ps.app, ps.envName, ps.name, ps.rawPath, evaluatedValue)
if ps.name != "" {
return ps.setEnvFn(ps.app, ps.envName, ps.name, ps.rawPath, ps.rawValue)
}
return ps.setGlobalEnvFn(ps.app, ps.envName, ps.rawPath, ps.rawValue)
}

path := strings.Split(ps.rawPath, ".")
Expand Down Expand Up @@ -147,3 +146,11 @@ func setEnv(ksApp app.App, envName, name, pName, value string) error {

return env.SetParams(envName, name, p, spc)
}

func setGlobalEnv(ksApp app.App, envName, pName, value string) error {
p := mp.Params{
pName: value,
}

return env.SetGlobalParams(ksApp, envName, p)
}
28 changes: 28 additions & 0 deletions actions/param_set_test.go
Expand Up @@ -142,3 +142,31 @@ func TestParamSet_env(t *testing.T) {
require.NoError(t, err)
})
}

func TestParamSet_envGlobal(t *testing.T) {
withApp(t, func(appMock *amocks.App) {
path := "replicas"
value := "3"

in := map[string]interface{}{
OptionApp: appMock,
OptionPath: path,
OptionValue: value,
OptionEnvName: "default",
}

a, err := NewParamSet(in)
require.NoError(t, err)

envSetter := func(ksApp app.App, envName, pName, value string) error {
assert.Equal(t, "default", envName)
assert.Equal(t, "replicas", pName)
assert.Equal(t, "3", value)
return nil
}
a.setGlobalEnvFn = envSetter

err = a.Run()
require.NoError(t, err)
})
}
2 changes: 2 additions & 0 deletions cmd/actions.go
Expand Up @@ -42,6 +42,7 @@ const (
actionParamDiff
actionParamList
actionParamSet
actionParamUnset
actionPkgDescribe
actionPkgInstall
actionPkgList
Expand Down Expand Up @@ -79,6 +80,7 @@ var (
actionModuleList: actions.RunModuleList,
// actionParamDiff
actionParamDelete: actions.RunParamDelete,
actionParamUnset: actions.RunParamDelete,
actionParamList: actions.RunParamList,
actionParamSet: actions.RunParamSet,
actionPkgDescribe: actions.RunPkgDescribe,
Expand Down
22 changes: 15 additions & 7 deletions cmd/param_delete.go
Expand Up @@ -16,9 +16,8 @@
package cmd

import (
"fmt"

"github.com/ksonnet/ksonnet/actions"
"github.com/pkg/errors"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
Expand All @@ -29,17 +28,26 @@ var (
)

var paramDeleteCmd = &cobra.Command{
Use: "delete <component-name> <param-key>",
Use: "delete [component-name] <param-key>",
Short: paramShortDesc["delete"],
RunE: func(cmd *cobra.Command, args []string) error {
if len(args) != 2 {
return fmt.Errorf("'param delete' takes exactly two arguments, (1) the name of the component, and the key")
var name string
var path string

switch len(args) {
default:
return errors.New("invalid arguments for 'param delete'")
case 2:
name = args[0]
path = args[1]
case 1:
path = args[0]
}

m := map[string]interface{}{
actions.OptionApp: ka,
actions.OptionName: args[0],
actions.OptionPath: args[1],
actions.OptionName: name,
actions.OptionPath: path,
actions.OptionEnvName: viper.GetString(vParamDeleteEnv),
actions.OptionIndex: viper.GetInt(vParamDeleteIndex),
}
Expand Down
14 changes: 13 additions & 1 deletion cmd/param_delete_test.go
Expand Up @@ -24,7 +24,7 @@ import (
func Test_paramDeleteCmd(t *testing.T) {
cases := []cmdTestCase{
{
name: "in general",
name: "with a component",
args: []string{"param", "delete", "component-name", "param-name"},
action: actionParamDelete,
expected: map[string]interface{}{
Expand All @@ -35,6 +35,18 @@ func Test_paramDeleteCmd(t *testing.T) {
actions.OptionIndex: 0,
},
},
{
name: "without a component",
args: []string{"param", "delete", "param-name", "--env", "default"},
action: actionParamDelete,
expected: map[string]interface{}{
actions.OptionApp: ka,
actions.OptionName: "",
actions.OptionPath: "param-name",
actions.OptionEnvName: "default",
actions.OptionIndex: 0,
},
},
}

runTestCmd(t, cases)
Expand Down

0 comments on commit 68d8f75

Please sign in to comment.