Skip to content

Commit

Permalink
Make env get and delete work for env and env prop
Browse files Browse the repository at this point in the history
  • Loading branch information
feedmeapples committed Nov 22, 2022
1 parent bb7d175 commit 30ba6f9
Show file tree
Hide file tree
Showing 2 changed files with 102 additions and 98 deletions.
52 changes: 29 additions & 23 deletions app/env_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,47 +29,53 @@ import (
"os"
"path/filepath"

"github.com/temporalio/temporal-cli/app"
"github.com/urfave/cli/v2"
)

const (
testEnvName = "tctl-test-env"
)

func ExampleDescribeEnv() {
tctl := app.BuildApp("")
func (s *cliAppSuite) TestSetEnvValue() {
defer setupConfig(s.app)()

tctl.Run([]string{"", "env", "set", testEnvName + ".namespace", "tctl-test-namespace"})
err := s.app.Run([]string{"", "env", "set", testEnvName + ".address", "0.0.0.0:00000"})
s.NoError(err)

tctl.Run([]string{"", "env", "describe", testEnvName})
// Output:
// Set 'tctl-test-env.namespace' to: tctl-test-namespace
// namespace tctl-test-namespace
config := readConfig()
s.Contains(config, "tctl-test-env:")
s.Contains(config, "address: 0.0.0.0:00000")
s.Contains(config, "namespace: tctl-test-namespace")
}

func ExampleEnvProperty() {
tctl := app.BuildApp("")
defer setupConfig(tctl)()
func (s *cliAppSuite) TestDeleteEnvProperty() {
defer setupConfig(s.app)()

err := s.app.Run([]string{"", "env", "set", testEnvName + ".address", "1.2.3.4:5678"})
s.NoError(err)

tctl.Run([]string{"", "env", "get", testEnvName + ".namespace"})
err = s.app.Run([]string{"", "env", "delete", testEnvName + ".address"})
s.NoError(err)

// Output:
// Set 'tctl-test-env.namespace' to: tctl-test-namespace
// tctl-test-namespace
// Removed env tctl-test-env
config := readConfig()
s.Contains(config, "tctl-test-env:")
s.Contains(config, "namespace: tctl-test-namespace")
s.NotContains(config, "address: 1.2.3.4:5678")
}

func (s *cliAppSuite) TestSetConfigValue() {
func (s *cliAppSuite) TestDeleteEnv() {
defer setupConfig(s.app)()

err := s.app.Run([]string{"", "env", "set", testEnvName + ".address", "0.0.0.0:00000"})
err := s.app.Run([]string{"", "env", "set", testEnvName + ".address", "1.2.3.4:5678"})
s.NoError(err)

err = s.app.Run([]string{"", "env", "delete", testEnvName})
s.NoError(err)

config := readConfig()
s.Contains(config, " tctl-test-env:")
s.Contains(config, " address: 0.0.0.0:00000")
s.Contains(config, " namespace: tctl-test-namespace")
s.NotContains(config, "tctl-test-env:")
s.NotContains(config, "namespace: tctl-test-namespace")
s.NotContains(config, "address: 1.2.3.4:5678")
}

func setupConfig(app *cli.App) func() {
Expand All @@ -79,9 +85,9 @@ func setupConfig(app *cli.App) func() {
}

return func() {
err := app.Run([]string{"", "env", "remove", testEnvName})
err := app.Run([]string{"", "env", "delete", testEnvName})
if err != nil {
log.Fatal(err)
log.Printf("unable to unset test env: %s", err)
}
}
}
Expand Down
148 changes: 73 additions & 75 deletions env/env.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ import (

"github.com/urfave/cli/v2"

"github.com/temporalio/tctl-kit/pkg/color"
"github.com/temporalio/tctl-kit/pkg/config"
"github.com/temporalio/tctl-kit/pkg/output"
"github.com/temporalio/temporal-cli/common"
Expand All @@ -45,82 +44,40 @@ func NewEnvCommands() []*cli.Command {
return []*cli.Command{
{
Name: "get",
Usage: "Print the value of an env property",
Usage: "Print environment properties",
Flags: []cli.Flag{},
ArgsUsage: "env_name.property_name",
ArgsUsage: "env_name or env_name.property_name",
Action: func(c *cli.Context) error {
return EnvProperty(c)
},
},
{
Name: "set",
Usage: "Set the value of an env property",
Usage: "Set environment property",
Flags: []cli.Flag{},
ArgsUsage: "env_name.property_name value",
Action: func(c *cli.Context) error {
return SetEnvProperty(c)
},
},
{
Name: "describe",
Usage: "Print environment properties",
ArgsUsage: "env_name",
Flags: []cli.Flag{
&cli.StringFlag{
Name: output.FlagOutput,
Aliases: common.FlagOutputAlias,
Usage: output.UsageText,
Category: common.CategoryDisplay,
},
},
Action: func(c *cli.Context) error {
return DescribeEnv(c)
},
},
{
Name: "remove",
Usage: "Remove environment",
Name: "delete",
Usage: "Delete environment or environment property",
Flags: []cli.Flag{},
ArgsUsage: "env_name",
ArgsUsage: "env_name or env_name.property_name",
Action: func(c *cli.Context) error {
return RemoveEnv(c)
return DeleteEnv(c)
},
},
}
}

func DescribeEnv(c *cli.Context) error {
envName := c.Args().Get(0)
env := ClientConfig.Env(envName)

type flag struct {
Flag string
Value string
}

var flags []interface{}
for k, v := range env {
flags = append(flags, flag{Flag: k, Value: v})
}

po := &output.PrintOptions{OutputFormat: output.Table}
return output.PrintItems(c, flags, po)
}

func RemoveEnv(c *cli.Context) error {
if c.Args().Len() == 0 {
return fmt.Errorf("env name is required")
}

envName := c.Args().Get(0)
func Build(c *cli.Context) {
ClientConfig, _ = NewClientConfig()

if err := ClientConfig.RemoveEnv(envName); err != nil {
return fmt.Errorf("unable to remove env %s: %w", envName, err)
for _, c := range c.App.Commands {
common.AddBeforeHandler(c, loadEnv)
}

fmt.Printf("Removed env %v\n", color.Magenta(c, "%v", envName))

return nil
}

func EnvProperty(c *cli.Context) error {
Expand All @@ -130,20 +87,39 @@ func EnvProperty(c *cli.Context) error {

fullKey := c.Args().Get(0)

if err := validateEnvKey(fullKey); err != nil {
if err := validateEnvArg(fullKey); err != nil {
return err
}

env, key := envKey(fullKey)
envName, key := envKey(fullKey)

val, err := ClientConfig.EnvProperty(env, key)
if err != nil {
return err
type flag struct {
Flag string
Value string
}
var flags []interface{}

fmt.Println(val)
if key == "" {
// print all env properties

return nil
env := ClientConfig.Env(envName)

for k, v := range env {
flags = append(flags, flag{Flag: k, Value: v})
}

} else {
// print specific env property
val, err := ClientConfig.EnvProperty(envName, key)
if err != nil {
return err
}

flags = append(flags, flag{Flag: key, Value: val})
}

po := &output.PrintOptions{OutputFormat: output.Table}
return output.PrintItems(c, flags, po)
}

func SetEnvProperty(c *cli.Context) error {
Expand All @@ -162,7 +138,7 @@ func SetEnvProperty(c *cli.Context) error {
return nil
}

if err := validateEnvKey(fullKey); err != nil {
if err := validateEnvArg(fullKey); err != nil {
return err
}

Expand All @@ -176,11 +152,39 @@ func SetEnvProperty(c *cli.Context) error {
return nil
}

func validateEnvKey(fullKey string) error {
keys := strings.Split(fullKey, ".")
func validateEnvArg(fullArg string) error {
keys := strings.Split(fullArg, ".")

if len(keys) != 2 {
return fmt.Errorf("invalid env key %v. Env key must be in a format <env name>.<property-name>", fullKey)
if len(keys) != 1 && len(keys) != 2 {
return fmt.Errorf("invalid env argument %v. Env argument must be in a format <env name> or <env name>.<property-name>", fullArg)
}

return nil
}

func DeleteEnv(c *cli.Context) error {
if c.Args().Len() == 0 {
return fmt.Errorf("env name is required")
}

fullKey := c.Args().Get(0)

if err := validateEnvArg(fullKey); err != nil {
return err
}

envName, key := envKey(fullKey)

if key == "" {
if err := ClientConfig.RemoveEnv(envName); err != nil {
return fmt.Errorf("unable to delete env %v: %w", envName, err)
}
fmt.Printf("Deleted env: %v\n", envName)
} else {
if err := ClientConfig.RemoveEnvProperty(envName, key); err != nil {
return fmt.Errorf("unable to delete env property %v: %w", key, err)
}
fmt.Printf("Deleted env property: %v\n", fullKey)
}

return nil
Expand All @@ -190,22 +194,16 @@ func envKey(fullKey string) (string, string) {
keys := strings.Split(fullKey, ".")

var env, key string

env = keys[0]

if len(keys) == 2 {
env = keys[0]
key = keys[1]
}

return env, key
}

func Build(c *cli.Context) {
ClientConfig, _ = NewClientConfig()

for _, c := range c.App.Commands {
common.AddBeforeHandler(c, loadEnv)
}
}

// loadEnv loads environment options from the config file
func loadEnv(ctx *cli.Context) error {
cmd := ctx.Command
Expand Down

0 comments on commit 30ba6f9

Please sign in to comment.