summaryrefslogtreecommitdiffstats
path: root/client
diff options
context:
space:
mode:
authorMartin Polden <mpolden@mpolden.no>2023-11-23 10:27:43 +0100
committerMartin Polden <mpolden@mpolden.no>2023-11-23 10:27:43 +0100
commit7815564d007624847fc0da6ee8ae0d412dd8d7df (patch)
tree47456f7ee51051e4781accec78996ef4e106ed4c /client
parent0fd862c3716249655e16491d477a8ab7a21b5643 (diff)
Clean up target type restriction
Diffstat (limited to 'client')
-rw-r--r--client/go/internal/cli/cmd/api_key.go2
-rw-r--r--client/go/internal/cli/cmd/cert.go4
-rw-r--r--client/go/internal/cli/cmd/config_test.go2
-rw-r--r--client/go/internal/cli/cmd/deploy.go4
-rw-r--r--client/go/internal/cli/cmd/destroy.go2
-rw-r--r--client/go/internal/cli/cmd/destroy_test.go2
-rw-r--r--client/go/internal/cli/cmd/log.go2
-rw-r--r--client/go/internal/cli/cmd/login.go2
-rw-r--r--client/go/internal/cli/cmd/logout.go2
-rw-r--r--client/go/internal/cli/cmd/prod.go4
-rw-r--r--client/go/internal/cli/cmd/root.go18
-rw-r--r--client/go/internal/cli/cmd/waiter.go2
-rw-r--r--client/go/internal/vespa/deploy.go6
13 files changed, 26 insertions, 26 deletions
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