Skip to content

Commit

Permalink
Override config file with CLI args for Seldon CLI (#579)
Browse files Browse the repository at this point in the history
* Rename command vars for subcommands for concision

* Use consistent var assignment syntax for top-level CLI commands

* Rename private functions for clarity

Using terse contractions of terms hurts legibility in composite names, as for functions.

* Use var for command flags instead of calling methods for every flag access & modify

* Pass scheduler-host-is-set indicator to scheduler client constructor

This allows us to determine the relative priorities of config from different places.

* Do not override scheduler host explicit CLI arg with config file value

Instead, only override default args not set explicitly when running the command.

* Pass indicator for infer host being set explicitly to inference client constructor

* Do not override infer host explicit CLI arg with config file value

* Do not override Kafka broker host explicit CLI arg with config file value
  • Loading branch information
agrski authored Nov 13, 2022
1 parent ed7835a commit 3293394
Show file tree
Hide file tree
Showing 24 changed files with 297 additions and 223 deletions.
18 changes: 11 additions & 7 deletions operator/cmd/seldon/cli/experiment_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,25 @@ import (
)

func createExperimentList() *cobra.Command {
cmdExperimentList := &cobra.Command{
cmd := &cobra.Command{
Use: "list",
Short: "get list of experiments",
Long: `get list of experiments and whether they are active`,
Args: cobra.MinimumNArgs(0),
RunE: func(cmd *cobra.Command, args []string) error {
schedulerHost, err := cmd.Flags().GetString(flagSchedulerHost)
flags := cmd.Flags()

schedulerHostIsSet := flags.Changed(flagSchedulerHost)
schedulerHost, err := flags.GetString(flagSchedulerHost)
if err != nil {
return err
}
authority, err := cmd.Flags().GetString(flagAuthority)
authority, err := flags.GetString(flagAuthority)
if err != nil {
return err
}

schedulerClient, err := cli.NewSchedulerClient(schedulerHost, authority)
schedulerClient, err := cli.NewSchedulerClient(schedulerHost, schedulerHostIsSet, authority)
if err != nil {
return err
}
Expand All @@ -32,8 +35,9 @@ func createExperimentList() *cobra.Command {
},
}

cmdExperimentList.Flags().String(flagSchedulerHost, env.GetString(envScheduler, defaultSchedulerHost), helpSchedulerHost)
cmdExperimentList.Flags().String(flagAuthority, "", helpAuthority)
flags := cmd.Flags()
flags.String(flagSchedulerHost, env.GetString(envScheduler, defaultSchedulerHost), helpSchedulerHost)
flags.String(flagAuthority, "", helpAuthority)

return cmdExperimentList
return cmd
}
28 changes: 16 additions & 12 deletions operator/cmd/seldon/cli/experiment_start.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,34 +10,37 @@ import (
)

func createExperimentStart() *cobra.Command {
cmdStartExperiment := &cobra.Command{
cmd := &cobra.Command{
Use: "start",
Short: "start an experiment",
Long: `start an experiment`,
Args: cobra.MinimumNArgs(0),
RunE: func(cmd *cobra.Command, args []string) error {
schedulerHost, err := cmd.Flags().GetString(flagSchedulerHost)
flags := cmd.Flags()

schedulerHostIsSet := flags.Changed(flagSchedulerHost)
schedulerHost, err := flags.GetString(flagSchedulerHost)
if err != nil {
return err
}
authority, err := cmd.Flags().GetString(flagAuthority)
authority, err := flags.GetString(flagAuthority)
if err != nil {
return err
}
filename, err := cmd.Flags().GetString(flagFile)
filename, err := flags.GetString(flagFile)
if err != nil {
return err
}
showRequest, err := cmd.Flags().GetBool(flagShowRequest)
showRequest, err := flags.GetBool(flagShowRequest)
if err != nil {
return err
}
showResponse, err := cmd.Flags().GetBool(flagShowResponse)
showResponse, err := flags.GetBool(flagShowResponse)
if err != nil {
return err
}

schedulerClient, err := cli.NewSchedulerClient(schedulerHost, authority)
schedulerClient, err := cli.NewSchedulerClient(schedulerHost, schedulerHostIsSet, authority)
if err != nil {
return err
}
Expand All @@ -47,12 +50,13 @@ func createExperimentStart() *cobra.Command {
},
}

cmdStartExperiment.Flags().String(flagSchedulerHost, env.GetString(envScheduler, defaultSchedulerHost), helpSchedulerHost)
cmdStartExperiment.Flags().String(flagAuthority, "", helpAuthority)
cmdStartExperiment.Flags().StringP(flagFile, "f", "", "experiment manifest file (YAML)")
if err := cmdStartExperiment.MarkFlagRequired(flagFile); err != nil {
flags := cmd.Flags()
flags.String(flagSchedulerHost, env.GetString(envScheduler, defaultSchedulerHost), helpSchedulerHost)
flags.String(flagAuthority, "", helpAuthority)
flags.StringP(flagFile, "f", "", "experiment manifest file (YAML)")
if err := cmd.MarkFlagRequired(flagFile); err != nil {
os.Exit(-1)
}

return cmdStartExperiment
return cmd
}
26 changes: 15 additions & 11 deletions operator/cmd/seldon/cli/experiment_status.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,35 +12,38 @@ const (
)

func createExperimentStatus() *cobra.Command {
cmdExperimentStatus := &cobra.Command{
cmd := &cobra.Command{
Use: "status <experimentName>",
Short: "get status for experiment",
Long: `get status for experiment`,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
schedulerHost, err := cmd.Flags().GetString(flagSchedulerHost)
flags := cmd.Flags()

schedulerHostIsSet := flags.Changed(flagSchedulerHost)
schedulerHost, err := flags.GetString(flagSchedulerHost)
if err != nil {
return err
}
authority, err := cmd.Flags().GetString(flagAuthority)
authority, err := flags.GetString(flagAuthority)
if err != nil {
return err
}
showRequest, err := cmd.Flags().GetBool(flagShowRequest)
showRequest, err := flags.GetBool(flagShowRequest)
if err != nil {
return err
}
showResponse, err := cmd.Flags().GetBool(flagShowResponse)
showResponse, err := flags.GetBool(flagShowResponse)
if err != nil {
return err
}
wait, err := cmd.Flags().GetBool(flagExperimentWait)
wait, err := flags.GetBool(flagExperimentWait)
if err != nil {
return err
}
experimentName := args[0]

schedulerClient, err := cli.NewSchedulerClient(schedulerHost, authority)
schedulerClient, err := cli.NewSchedulerClient(schedulerHost, schedulerHostIsSet, authority)
if err != nil {
return err
}
Expand All @@ -50,9 +53,10 @@ func createExperimentStatus() *cobra.Command {
},
}

cmdExperimentStatus.Flags().String(flagSchedulerHost, env.GetString(envScheduler, defaultSchedulerHost), helpSchedulerHost)
cmdExperimentStatus.Flags().String(flagAuthority, "", helpAuthority)
cmdExperimentStatus.Flags().BoolP(flagExperimentWait, "w", false, "wait for experiment to be active")
flags := cmd.Flags()
flags.String(flagSchedulerHost, env.GetString(envScheduler, defaultSchedulerHost), helpSchedulerHost)
flags.String(flagAuthority, "", helpAuthority)
flags.BoolP(flagExperimentWait, "w", false, "wait for experiment to be active")

return cmdExperimentStatus
return cmd
}
22 changes: 13 additions & 9 deletions operator/cmd/seldon/cli/experiment_stop.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,33 @@ import (
)

func createExperimentStop() *cobra.Command {
cmdStopExperiment := &cobra.Command{
cmd := &cobra.Command{
Use: "stop <experimentName>",
Short: "stop an experiment",
Long: `stop an experiment`,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
schedulerHost, err := cmd.Flags().GetString(flagSchedulerHost)
flags := cmd.Flags()

schedulerHostIsSet := flags.Changed(flagSchedulerHost)
schedulerHost, err := flags.GetString(flagSchedulerHost)
if err != nil {
return err
}
authority, err := cmd.Flags().GetString(flagAuthority)
authority, err := flags.GetString(flagAuthority)
if err != nil {
return err
}
showRequest, err := cmd.Flags().GetBool(flagShowRequest)
showRequest, err := flags.GetBool(flagShowRequest)
if err != nil {
return err
}
showResponse, err := cmd.Flags().GetBool(flagShowResponse)
showResponse, err := flags.GetBool(flagShowResponse)
if err != nil {
return err
}

schedulerClient, err := cli.NewSchedulerClient(schedulerHost, authority)
schedulerClient, err := cli.NewSchedulerClient(schedulerHost, schedulerHostIsSet, authority)
if err != nil {
return err
}
Expand All @@ -42,8 +45,9 @@ func createExperimentStop() *cobra.Command {
},
}

cmdStopExperiment.Flags().String(flagSchedulerHost, env.GetString(envScheduler, defaultSchedulerHost), helpSchedulerHost)
cmdStopExperiment.Flags().String(flagAuthority, "", helpAuthority)
flags := cmd.Flags()
flags.String(flagSchedulerHost, env.GetString(envScheduler, defaultSchedulerHost), helpSchedulerHost)
flags.String(flagAuthority, "", helpAuthority)

return cmdStopExperiment
return cmd
}
50 changes: 27 additions & 23 deletions operator/cmd/seldon/cli/model_infer.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,53 +10,56 @@ import (
)

func createModelInfer() *cobra.Command {
cmdModelInfer := &cobra.Command{
cmd := &cobra.Command{
Use: "infer <modelName> (data)",
Short: "run inference on a model",
Long: `call a model with a given input and get a prediction`,
Args: cobra.MinimumNArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
inferenceHost, err := cmd.Flags().GetString(flagInferenceHost)
flags := cmd.Flags()

inferenceHostIsSet := flags.Changed(flagInferenceHost)
inferenceHost, err := flags.GetString(flagInferenceHost)
if err != nil {
return err
}
authority, err := cmd.Flags().GetString(flagAuthority)
authority, err := flags.GetString(flagAuthority)
if err != nil {
return err
}
filename, err := cmd.Flags().GetString(flagFile)
filename, err := flags.GetString(flagFile)
if err != nil {
return err
}
showRequest, err := cmd.Flags().GetBool(flagShowRequest)
showRequest, err := flags.GetBool(flagShowRequest)
if err != nil {
return err
}
showResponse, err := cmd.Flags().GetBool(flagShowResponse)
showResponse, err := flags.GetBool(flagShowResponse)
if err != nil {
return err
}
stickySession, err := cmd.Flags().GetBool(flagStickySession)
stickySession, err := flags.GetBool(flagStickySession)
if err != nil {
return err
}
showHeaders, err := cmd.Flags().GetBool(flagShowHeaders)
showHeaders, err := flags.GetBool(flagShowHeaders)
if err != nil {
return err
}
inferMode, err := cmd.Flags().GetString(flagInferenceMode)
inferMode, err := flags.GetString(flagInferenceMode)
if err != nil {
return err
}
iterations, err := cmd.Flags().GetInt(flagInferenceIterations)
iterations, err := flags.GetInt(flagInferenceIterations)
if err != nil {
return err
}
secs, err := cmd.Flags().GetInt64(flagInferenceSecs)
secs, err := flags.GetInt64(flagInferenceSecs)
if err != nil {
return err
}
headers, err := cmd.Flags().GetStringArray(flagAddHeader)
headers, err := flags.GetStringArray(flagAddHeader)
if err != nil {
return err
}
Expand All @@ -72,7 +75,7 @@ func createModelInfer() *cobra.Command {
return fmt.Errorf("required inline data or from file with -f <file-path>")
}

inferenceClient, err := cli.NewInferenceClient(inferenceHost)
inferenceClient, err := cli.NewInferenceClient(inferenceHost, inferenceHostIsSet)
if err != nil {
return err
}
Expand Down Expand Up @@ -102,15 +105,16 @@ func createModelInfer() *cobra.Command {
},
}

cmdModelInfer.Flags().StringP(flagFile, "f", "", helpFileInference)
cmdModelInfer.Flags().BoolP(flagStickySession, "s", false, helpStickySession)
cmdModelInfer.Flags().String(flagInferenceHost, env.GetString(envInfer, defaultInferHost), helpInferenceHost)
cmdModelInfer.Flags().String(flagInferenceMode, "rest", helpInferenceMode)
cmdModelInfer.Flags().IntP(flagInferenceIterations, "i", 1, helpInferenceIterations)
cmdModelInfer.Flags().Int64P(flagInferenceSecs, "t", 0, helpInferenceSecs)
cmdModelInfer.Flags().Bool(flagShowHeaders, false, helpShowHeaders)
cmdModelInfer.Flags().StringArray(flagAddHeader, []string{}, helpAddHeader)
cmdModelInfer.Flags().String(flagAuthority, "", helpAuthority)
flags := cmd.Flags()
flags.StringP(flagFile, "f", "", helpFileInference)
flags.BoolP(flagStickySession, "s", false, helpStickySession)
flags.String(flagInferenceHost, env.GetString(envInfer, defaultInferHost), helpInferenceHost)
flags.String(flagInferenceMode, "rest", helpInferenceMode)
flags.IntP(flagInferenceIterations, "i", 1, helpInferenceIterations)
flags.Int64P(flagInferenceSecs, "t", 0, helpInferenceSecs)
flags.Bool(flagShowHeaders, false, helpShowHeaders)
flags.StringArray(flagAddHeader, []string{}, helpAddHeader)
flags.String(flagAuthority, "", helpAuthority)

return cmdModelInfer
return cmd
}
18 changes: 11 additions & 7 deletions operator/cmd/seldon/cli/model_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,25 @@ import (
)

func createModelList() *cobra.Command {
cmdModelList := &cobra.Command{
cmd := &cobra.Command{
Use: "list",
Short: "get list of models",
Long: `get the list of all models with their status`,
Args: cobra.MinimumNArgs(0),
RunE: func(cmd *cobra.Command, args []string) error {
schedulerHost, err := cmd.Flags().GetString(flagSchedulerHost)
flags := cmd.Flags()

schedulerHostIsSet := flags.Changed(flagSchedulerHost)
schedulerHost, err := flags.GetString(flagSchedulerHost)
if err != nil {
return err
}
authority, err := cmd.Flags().GetString(flagAuthority)
authority, err := flags.GetString(flagAuthority)
if err != nil {
return err
}

schedulerClient, err := cli.NewSchedulerClient(schedulerHost, authority)
schedulerClient, err := cli.NewSchedulerClient(schedulerHost, schedulerHostIsSet, authority)
if err != nil {
return err
}
Expand All @@ -32,8 +35,9 @@ func createModelList() *cobra.Command {
},
}

cmdModelList.Flags().String(flagSchedulerHost, env.GetString(envScheduler, defaultSchedulerHost), helpSchedulerHost)
cmdModelList.Flags().String(flagAuthority, "", helpAuthority)
flags := cmd.Flags()
flags.String(flagSchedulerHost, env.GetString(envScheduler, defaultSchedulerHost), helpSchedulerHost)
flags.String(flagAuthority, "", helpAuthority)

return cmdModelList
return cmd
}
Loading

0 comments on commit 3293394

Please sign in to comment.