From 7815564d007624847fc0da6ee8ae0d412dd8d7df Mon Sep 17 00:00:00 2001 From: Martin Polden Date: Thu, 23 Nov 2023 10:27:43 +0100 Subject: Clean up target type restriction --- client/go/internal/cli/cmd/api_key.go | 2 +- client/go/internal/cli/cmd/cert.go | 4 ++-- client/go/internal/cli/cmd/config_test.go | 2 +- client/go/internal/cli/cmd/deploy.go | 4 ++-- client/go/internal/cli/cmd/destroy.go | 2 +- client/go/internal/cli/cmd/destroy_test.go | 2 +- client/go/internal/cli/cmd/log.go | 2 +- client/go/internal/cli/cmd/login.go | 2 +- client/go/internal/cli/cmd/logout.go | 2 +- client/go/internal/cli/cmd/prod.go | 4 ++-- client/go/internal/cli/cmd/root.go | 18 ++++++++++++------ client/go/internal/cli/cmd/waiter.go | 2 +- client/go/internal/vespa/deploy.go | 6 ------ 13 files changed, 26 insertions(+), 26 deletions(-) (limited to 'client') diff --git a/client/go/internal/cli/cmd/api_key.go b/client/go/internal/cli/cmd/api_key.go index ef04532314c..133c9db0d3b 100644 --- a/client/go/internal/cli/cmd/api_key.go +++ b/client/go/internal/cli/cmd/api_key.go @@ -58,7 +58,7 @@ Read more in https://cloud.vespa.ai/en/security/guide`, } func doApiKey(cli *CLI, overwriteKey bool, args []string) error { - targetType, err := cli.targetType(true) + targetType, err := cli.targetType(cloudTargetOnly) if err != nil { return err } diff --git a/client/go/internal/cli/cmd/cert.go b/client/go/internal/cli/cmd/cert.go index 9668e78bd1c..6aa99a01902 100644 --- a/client/go/internal/cli/cmd/cert.go +++ b/client/go/internal/cli/cmd/cert.go @@ -103,7 +103,7 @@ $ vespa auth cert add -a my-tenant.my-app.my-instance path/to/application/packag } func doCert(cli *CLI, overwriteCertificate, skipApplicationPackage bool, args []string) error { - targetType, err := cli.targetType(true) + targetType, err := cli.targetType(cloudTargetOnly) if err != nil { return err } @@ -149,7 +149,7 @@ func doCert(cli *CLI, overwriteCertificate, skipApplicationPackage bool, args [] } func doCertAdd(cli *CLI, overwriteCertificate bool, args []string) error { - target, err := cli.target(targetOptions{cloudExclusive: true}) + target, err := cli.target(targetOptions{supportedType: cloudTargetOnly}) if err != nil { return err } diff --git a/client/go/internal/cli/cmd/config_test.go b/client/go/internal/cli/cmd/config_test.go index 64d7d91fef1..b13f8365f5f 100644 --- a/client/go/internal/cli/cmd/config_test.go +++ b/client/go/internal/cli/cmd/config_test.go @@ -272,7 +272,7 @@ func TestConfigTargetResolving(t *testing.T) { } func assertTargetType(t *testing.T, expected string, cli *CLI) { - targetType, err := cli.targetType(false) + targetType, err := cli.targetType(anyTarget) require.Nil(t, err) assert.Equal(t, expected, targetType.name) } diff --git a/client/go/internal/cli/cmd/deploy.go b/client/go/internal/cli/cmd/deploy.go index dd605237b5f..c9331a540eb 100644 --- a/client/go/internal/cli/cmd/deploy.go +++ b/client/go/internal/cli/cmd/deploy.go @@ -117,7 +117,7 @@ func newPrepareCmd(cli *CLI) *cobra.Command { if err != nil { return fmt.Errorf("could not find application package: %w", err) } - target, err := cli.target(targetOptions{}) + target, err := cli.target(targetOptions{supportedType: localTargetOnly}) if err != nil { return err } @@ -153,7 +153,7 @@ func newActivateCmd(cli *CLI) *cobra.Command { if err != nil { return fmt.Errorf("could not read session id: %w", err) } - target, err := cli.target(targetOptions{}) + target, err := cli.target(targetOptions{supportedType: localTargetOnly}) if err != nil { return err } diff --git a/client/go/internal/cli/cmd/destroy.go b/client/go/internal/cli/cmd/destroy.go index f4822330e05..a7beff2e4b4 100644 --- a/client/go/internal/cli/cmd/destroy.go +++ b/client/go/internal/cli/cmd/destroy.go @@ -37,7 +37,7 @@ $ vespa destroy --force`, DisableAutoGenTag: true, SilenceUsage: true, RunE: func(cmd *cobra.Command, args []string) error { - target, err := cli.target(targetOptions{cloudExclusive: true}) + target, err := cli.target(targetOptions{supportedType: cloudTargetOnly}) if err != nil { return err } diff --git a/client/go/internal/cli/cmd/destroy_test.go b/client/go/internal/cli/cmd/destroy_test.go index bbba593cc5d..c62a54e5925 100644 --- a/client/go/internal/cli/cmd/destroy_test.go +++ b/client/go/internal/cli/cmd/destroy_test.go @@ -57,5 +57,5 @@ func TestDestroy(t *testing.T) { require.Nil(t, cli.Run("config", "set", "target", "local")) require.Nil(t, cli.Run("config", "set", "application", "foo.bar.baz")) require.NotNil(t, cli.Run("destroy", "-z", "prod.aws-us-east-1c")) - assert.Equal(t, "Error: unsupported target local: this command only supports targets cloud and hosted\n", stderr.String()) + assert.Equal(t, "Error: command does not support local target\n", stderr.String()) } diff --git a/client/go/internal/cli/cmd/log.go b/client/go/internal/cli/cmd/log.go index e7178b74a56..77ef7f68130 100644 --- a/client/go/internal/cli/cmd/log.go +++ b/client/go/internal/cli/cmd/log.go @@ -34,7 +34,7 @@ $ vespa log --follow`, SilenceUsage: true, Args: cobra.MaximumNArgs(1), RunE: func(cmd *cobra.Command, args []string) error { - target, err := cli.target(targetOptions{logLevel: levelArg, cloudExclusive: true}) + target, err := cli.target(targetOptions{logLevel: levelArg, supportedType: cloudTargetOnly}) if err != nil { return err } diff --git a/client/go/internal/cli/cmd/login.go b/client/go/internal/cli/cmd/login.go index b380e627203..3d63266afbc 100644 --- a/client/go/internal/cli/cmd/login.go +++ b/client/go/internal/cli/cmd/login.go @@ -31,7 +31,7 @@ This command runs a browser-based authentication flow for the Vespa Cloud contro SilenceUsage: true, RunE: func(cmd *cobra.Command, args []string) error { ctx := cmd.Context() - targetType, err := cli.targetType(true) + targetType, err := cli.targetType(cloudTargetOnly) if err != nil { return err } diff --git a/client/go/internal/cli/cmd/logout.go b/client/go/internal/cli/cmd/logout.go index 6cfa6f5b876..80c3d140816 100644 --- a/client/go/internal/cli/cmd/logout.go +++ b/client/go/internal/cli/cmd/logout.go @@ -15,7 +15,7 @@ func newLogoutCmd(cli *CLI) *cobra.Command { DisableAutoGenTag: true, SilenceUsage: true, RunE: func(cmd *cobra.Command, args []string) error { - targetType, err := cli.targetType(true) + targetType, err := cli.targetType(cloudTargetOnly) if err != nil { return err } diff --git a/client/go/internal/cli/cmd/prod.go b/client/go/internal/cli/cmd/prod.go index 74e4b4c4a1c..d90d89437f9 100644 --- a/client/go/internal/cli/cmd/prod.go +++ b/client/go/internal/cli/cmd/prod.go @@ -53,7 +53,7 @@ https://cloud.vespa.ai/en/reference/deployment`, DisableAutoGenTag: true, SilenceUsage: true, RunE: func(cmd *cobra.Command, args []string) error { - target, err := cli.target(targetOptions{noCertificate: true, cloudExclusive: true}) + target, err := cli.target(targetOptions{noCertificate: true, supportedType: cloudTargetOnly}) if err != nil { return err } @@ -135,7 +135,7 @@ https://cloud.vespa.ai/en/reference/vespa-cloud-api#submission-properties Example: `$ mvn package # when adding custom Java components $ vespa prod deploy`, RunE: func(cmd *cobra.Command, args []string) error { - target, err := cli.target(targetOptions{noCertificate: true, cloudExclusive: true}) + target, err := cli.target(targetOptions{noCertificate: true, supportedType: cloudTargetOnly}) if err != nil { return err } diff --git a/client/go/internal/cli/cmd/root.go b/client/go/internal/cli/cmd/root.go index 004bdc038fe..864fe7d1961 100644 --- a/client/go/internal/cli/cmd/root.go +++ b/client/go/internal/cli/cmd/root.go @@ -33,6 +33,10 @@ const ( targetFlag = "target" colorFlag = "color" quietFlag = "quiet" + + anyTarget = iota + localTargetOnly + cloudTargetOnly ) // CLI holds the Vespa CLI command tree, configuration and dependencies. @@ -74,8 +78,8 @@ type targetOptions struct { logLevel string // noCertificate declares that no client certificate should be required when using this target. noCertificate bool - // cloudExclusive specifies whether to only allow Vespa Cloud and Hosted Vespa targets - cloudExclusive bool + // supportedType specifies what type of target to allow. + supportedType int } type targetType struct { @@ -350,7 +354,7 @@ func (c *CLI) waiter(timeout time.Duration) *Waiter { return &Waiter{Timeout: ti // target creates a target according the configuration of this CLI and given opts. func (c *CLI) target(opts targetOptions) (vespa.Target, error) { - targetType, err := c.targetType(opts.cloudExclusive) + targetType, err := c.targetType(opts.supportedType) if err != nil { return nil, err } @@ -375,7 +379,7 @@ func (c *CLI) target(opts targetOptions) (vespa.Target, error) { } // targetType resolves the real target type and its custom URL (if any) -func (c *CLI) targetType(cloud bool) (targetType, error) { +func (c *CLI) targetType(targetTypeRestriction int) (targetType, error) { v, err := c.config.targetOrURL() if err != nil { return targetType{}, err @@ -388,8 +392,10 @@ func (c *CLI) targetType(cloud bool) (targetType, error) { return targetType{}, err } } - if cloud && tt.name != vespa.TargetCloud && tt.name != vespa.TargetHosted { - return targetType{}, fmt.Errorf("unsupported target %s: this command only supports targets %s and %s", tt.name, vespa.TargetCloud, vespa.TargetHosted) + unsupported := (targetTypeRestriction == cloudTargetOnly && tt.name != vespa.TargetCloud && tt.name != vespa.TargetHosted) || + (targetTypeRestriction == localTargetOnly && tt.name != vespa.TargetLocal && tt.name != vespa.TargetCustom) + if unsupported { + return targetType{}, fmt.Errorf("command does not support %s target", tt.name) } return tt, nil } diff --git a/client/go/internal/cli/cmd/waiter.go b/client/go/internal/cli/cmd/waiter.go index 0cfb3aa76d5..d818359e61c 100644 --- a/client/go/internal/cli/cmd/waiter.go +++ b/client/go/internal/cli/cmd/waiter.go @@ -31,7 +31,7 @@ func (w *Waiter) DeployService(target vespa.Target) (*vespa.Service, error) { // Service returns the service identified by cluster ID, available on target. func (w *Waiter) Service(target vespa.Target, cluster string) (*vespa.Service, error) { - targetType, err := w.cli.targetType(false) + targetType, err := w.cli.targetType(anyTarget) if err != nil { return nil, err } diff --git a/client/go/internal/vespa/deploy.go b/client/go/internal/vespa/deploy.go index 4684e313291..7d90930d5f9 100644 --- a/client/go/internal/vespa/deploy.go +++ b/client/go/internal/vespa/deploy.go @@ -242,9 +242,6 @@ func fetchFilesFromConfigServer(deployment DeploymentOptions, contentURL *url.UR // Prepare deployment and return the session ID func Prepare(deployment DeploymentOptions) (PrepareResult, error) { - if deployment.Target.IsCloud() { - return PrepareResult{}, fmt.Errorf("prepare is not supported with %s target", deployment.Target.Type()) - } sessionURL, err := deployment.url("/application/v2/tenant/default/session") if err != nil { return PrepareResult{}, err @@ -290,9 +287,6 @@ func Prepare(deployment DeploymentOptions) (PrepareResult, error) { // Activate deployment with sessionID from a past prepare func Activate(sessionID int64, deployment DeploymentOptions) error { - if deployment.Target.IsCloud() { - return fmt.Errorf("activate is not supported with %s target", deployment.Target.Type()) - } u, err := deployment.url(fmt.Sprintf("/application/v2/tenant/default/session/%d/active", sessionID)) if err != nil { return err -- cgit v1.2.3