From bb24a68f1c7a522238b2cc8e1c4c8fc2a9ac9d2d Mon Sep 17 00:00:00 2001 From: Jonas Schlecht Date: Tue, 18 Aug 2026 08:49:12 +0200 Subject: [PATCH] chore(logme,mariadb,opensearch,rabbitmq,redis): deprecate planName and version flags, remove planId validation --- docs/stackit_logme_instance_create.md | 5 ---- docs/stackit_logme_instance_update.md | 2 -- docs/stackit_mariadb_instance_create.md | 5 ---- docs/stackit_mariadb_instance_update.md | 2 -- docs/stackit_opensearch_instance_create.md | 5 ---- docs/stackit_opensearch_instance_update.md | 2 -- docs/stackit_rabbitmq_instance_create.md | 5 ---- docs/stackit_rabbitmq_instance_update.md | 2 -- docs/stackit_redis_instance_create.md | 5 ---- docs/stackit_redis_instance_update.md | 2 -- internal/cmd/logme/instance/create/create.go | 29 ++++++++---------- internal/cmd/logme/instance/update/update.go | 28 ++++++++--------- .../cmd/mariadb/instance/create/create.go | 29 ++++++++---------- .../cmd/mariadb/instance/update/update.go | 28 ++++++++--------- .../cmd/opensearch/instance/create/create.go | 30 +++++++++---------- .../cmd/opensearch/instance/update/update.go | 27 +++++++++-------- .../cmd/rabbitmq/instance/create/create.go | 30 +++++++++---------- .../cmd/rabbitmq/instance/update/update.go | 29 +++++++++--------- internal/cmd/redis/instance/create/create.go | 29 ++++++++---------- internal/cmd/redis/instance/update/update.go | 28 ++++++++--------- internal/pkg/errors/errors.go | 7 ++--- internal/pkg/services/logme/utils/utils.go | 16 +--------- internal/pkg/services/mariadb/utils/utils.go | 16 +--------- .../pkg/services/opensearch/utils/utils.go | 16 +--------- internal/pkg/services/rabbitmq/utils/utils.go | 16 +--------- internal/pkg/services/redis/utils/utils.go | 16 +--------- 26 files changed, 141 insertions(+), 268 deletions(-) diff --git a/docs/stackit_logme_instance_create.md b/docs/stackit_logme_instance_create.md index cf71af87a..fa004da6f 100644 --- a/docs/stackit_logme_instance_create.md +++ b/docs/stackit_logme_instance_create.md @@ -13,9 +13,6 @@ stackit logme instance create [flags] ### Examples ``` - Create a LogMe instance with name "my-instance" and specify plan by name and version - $ stackit logme instance create --name my-instance --plan-name stackit-logme2-1.2.50-replica --version 2 - Create a LogMe instance with name "my-instance" and specify plan by ID $ stackit logme instance create --name my-instance --plan-id xxx @@ -35,9 +32,7 @@ stackit logme instance create [flags] --monitoring-instance-id string Monitoring instance ID -n, --name string Instance name --plan-id string Plan ID - --plan-name string Plan name --syslog strings Syslog - --version string Instance LogMe version ``` ### Options inherited from parent commands diff --git a/docs/stackit_logme_instance_update.md b/docs/stackit_logme_instance_update.md index 11e3c6963..e9b40bd34 100644 --- a/docs/stackit_logme_instance_update.md +++ b/docs/stackit_logme_instance_update.md @@ -32,9 +32,7 @@ stackit logme instance update INSTANCE_ID [flags] --monitoring-instance-id string Monitoring instance ID -n, --name string Instance name --plan-id string Plan ID - --plan-name string Plan name --syslog strings Syslog - --version string Instance LogMe version ``` ### Options inherited from parent commands diff --git a/docs/stackit_mariadb_instance_create.md b/docs/stackit_mariadb_instance_create.md index 2fc227325..ddaa1fb2b 100644 --- a/docs/stackit_mariadb_instance_create.md +++ b/docs/stackit_mariadb_instance_create.md @@ -13,9 +13,6 @@ stackit mariadb instance create [flags] ### Examples ``` - Create a MariaDB instance with name "my-instance" and specify plan by name and version - $ stackit mariadb instance create --name my-instance --plan-name stackit-mariadb-1.2.10-replica --version 10.6 - Create a MariaDB instance with name "my-instance" and specify plan by ID $ stackit mariadb instance create --name my-instance --plan-id xxx @@ -35,9 +32,7 @@ stackit mariadb instance create [flags] --monitoring-instance-id string Monitoring instance ID -n, --name string Instance name --plan-id string Plan ID - --plan-name string Plan name --syslog strings Syslog - --version string Instance MariaDB version ``` ### Options inherited from parent commands diff --git a/docs/stackit_mariadb_instance_update.md b/docs/stackit_mariadb_instance_update.md index 8032fc982..afd011d99 100644 --- a/docs/stackit_mariadb_instance_update.md +++ b/docs/stackit_mariadb_instance_update.md @@ -31,9 +31,7 @@ stackit mariadb instance update INSTANCE_ID [flags] --metrics-prefix string Metrics prefix --monitoring-instance-id string Monitoring instance ID --plan-id string Plan ID - --plan-name string Plan name --syslog strings Syslog - --version string Instance MariaDB version ``` ### Options inherited from parent commands diff --git a/docs/stackit_opensearch_instance_create.md b/docs/stackit_opensearch_instance_create.md index 8e3534d0a..7f143ddf9 100644 --- a/docs/stackit_opensearch_instance_create.md +++ b/docs/stackit_opensearch_instance_create.md @@ -13,9 +13,6 @@ stackit opensearch instance create [flags] ### Examples ``` - Create an OpenSearch instance with name "my-instance" and specify plan by name and version - $ stackit opensearch instance create --name my-instance --plan-name stackit-opensearch-1.2.10-replica --version 2 - Create an OpenSearch instance with name "my-instance" and specify plan by ID $ stackit opensearch instance create --name my-instance --plan-id xxx @@ -35,10 +32,8 @@ stackit opensearch instance create [flags] --monitoring-instance-id string Monitoring instance ID -n, --name string Instance name --plan-id string Plan ID - --plan-name string Plan name --plugin strings Plugins (multiple of: [repository-s3, repository-azure, analysis-phonetic]) (default []) --syslog strings Syslog - --version string Instance OpenSearch version ``` ### Options inherited from parent commands diff --git a/docs/stackit_opensearch_instance_update.md b/docs/stackit_opensearch_instance_update.md index 508f46a05..4b7de6255 100644 --- a/docs/stackit_opensearch_instance_update.md +++ b/docs/stackit_opensearch_instance_update.md @@ -31,10 +31,8 @@ stackit opensearch instance update INSTANCE_ID [flags] --metrics-prefix string Metrics prefix --monitoring-instance-id string Monitoring instance ID --plan-id string Plan ID - --plan-name string Plan name --plugin strings Plugins (multiple of: [repository-s3, repository-azure, analysis-phonetic]) (default []) --syslog strings Syslog - --version string Instance OpenSearch version ``` ### Options inherited from parent commands diff --git a/docs/stackit_rabbitmq_instance_create.md b/docs/stackit_rabbitmq_instance_create.md index 92d74caa0..e2d77ae08 100644 --- a/docs/stackit_rabbitmq_instance_create.md +++ b/docs/stackit_rabbitmq_instance_create.md @@ -13,9 +13,6 @@ stackit rabbitmq instance create [flags] ### Examples ``` - Create a RabbitMQ instance with name "my-instance" and specify plan by name and version - $ stackit rabbitmq instance create --name my-instance --plan-name stackit-rabbitmq-1.2.10-replica --version 3.10 - Create a RabbitMQ instance with name "my-instance" and specify plan by ID $ stackit rabbitmq instance create --name my-instance --plan-id xxx @@ -35,10 +32,8 @@ stackit rabbitmq instance create [flags] --monitoring-instance-id string Monitoring instance ID -n, --name string Instance name --plan-id string Plan ID - --plan-name string Plan name --plugin strings Plugins (multiple of: [rabbitmq_consistent_hash_exchange, rabbitmq_federation, rabbitmq_federation_management, rabbitmq_mqtt, rabbitmq_sharding, rabbitmq_shovel, rabbitmq_shovel_management, rabbitmq_stomp, rabbitmq_tracing, rabbitmq_event_exchange]) (default []) --syslog strings Syslog - --version string Instance RabbitMQ version ``` ### Options inherited from parent commands diff --git a/docs/stackit_rabbitmq_instance_update.md b/docs/stackit_rabbitmq_instance_update.md index 1cc196bae..2a476479c 100644 --- a/docs/stackit_rabbitmq_instance_update.md +++ b/docs/stackit_rabbitmq_instance_update.md @@ -31,10 +31,8 @@ stackit rabbitmq instance update INSTANCE_ID [flags] --metrics-prefix string Metrics prefix --monitoring-instance-id string Monitoring instance ID --plan-id string Plan ID - --plan-name string Plan name --plugin strings Plugins (multiple of: [rabbitmq_consistent_hash_exchange, rabbitmq_federation, rabbitmq_federation_management, rabbitmq_mqtt, rabbitmq_sharding, rabbitmq_shovel, rabbitmq_shovel_management, rabbitmq_stomp, rabbitmq_tracing, rabbitmq_event_exchange]) (default []) --syslog strings Syslog - --version string Instance RabbitMQ version ``` ### Options inherited from parent commands diff --git a/docs/stackit_redis_instance_create.md b/docs/stackit_redis_instance_create.md index 590138129..8ef7f5345 100644 --- a/docs/stackit_redis_instance_create.md +++ b/docs/stackit_redis_instance_create.md @@ -13,9 +13,6 @@ stackit redis instance create [flags] ### Examples ``` - Create a Redis instance with name "my-instance" and specify plan by name and version - $ stackit redis instance create --name my-instance --plan-name stackit-redis-1.2.10-replica --version 6 - Create a Redis instance with name "my-instance" and specify plan by ID $ stackit redis instance create --name my-instance --plan-id xxx @@ -35,9 +32,7 @@ stackit redis instance create [flags] --monitoring-instance-id string Monitoring instance ID -n, --name string Instance name --plan-id string Plan ID - --plan-name string Plan name --syslog strings Syslog - --version string Instance Redis version ``` ### Options inherited from parent commands diff --git a/docs/stackit_redis_instance_update.md b/docs/stackit_redis_instance_update.md index 362b7e37b..96215ae7c 100644 --- a/docs/stackit_redis_instance_update.md +++ b/docs/stackit_redis_instance_update.md @@ -31,9 +31,7 @@ stackit redis instance update INSTANCE_ID [flags] --metrics-prefix string Metrics prefix --monitoring-instance-id string Monitoring instance ID --plan-id string Plan ID - --plan-name string Plan name --syslog strings Syslog - --version string Instance Redis version ``` ### Options inherited from parent commands diff --git a/internal/cmd/logme/instance/create/create.go b/internal/cmd/logme/instance/create/create.go index ab8e2df2c..ac46140ed 100644 --- a/internal/cmd/logme/instance/create/create.go +++ b/internal/cmd/logme/instance/create/create.go @@ -35,8 +35,8 @@ const ( sgwAclFlag = "acl" syslogFlag = "syslog" planIdFlag = "plan-id" - planNameFlag = "plan-name" - versionFlag = "version" + planNameFlag = "plan-name" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. + versionFlag = "version" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. ) type inputModel struct { @@ -62,9 +62,6 @@ func NewCmd(params *types.CmdParams) *cobra.Command { Long: "Creates a LogMe instance.", Args: args.NoArgs, Example: examples.Build( - examples.NewExample( - `Create a LogMe instance with name "my-instance" and specify plan by name and version`, - "$ stackit logme instance create --name my-instance --plan-name stackit-logme2-1.2.50-replica --version 2"), examples.NewExample( `Create a LogMe instance with name "my-instance" and specify plan by ID`, "$ stackit logme instance create --name my-instance --plan-id xxx"), @@ -145,6 +142,11 @@ func configureFlags(cmd *cobra.Command) { err := flags.MarkFlagsRequired(cmd, instanceNameFlag) cobra.CheckErr(err) + + err = cmd.Flags().MarkDeprecated(planNameFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) + err = cmd.Flags().MarkDeprecated(versionFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) } func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) { @@ -191,15 +193,14 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient logme.Defaul req := apiClient.CreateInstance(ctx, model.ProjectId, model.Region) var planId *string - var err error - - offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() - if err != nil { - return req, fmt.Errorf("get LogMe offerings: %w", err) - } if model.PlanId == nil { - planId, err = logmeUtils.LoadPlanId(model.PlanName, model.Version, offerings) + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. + offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() + if err != nil { + return req, fmt.Errorf("get LogMe offerings: %w", err) + } + planId, err = logmeUtils.LoadPlanId(model.PlanName, model.Version, offerings) //nolint:staticcheck // deprecated but still supported until 2027-02-28 if err != nil { var dsaInvalidPlanError *cliErr.DSAInvalidPlanError if !errors.As(err, &dsaInvalidPlanError) { @@ -208,10 +209,6 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient logme.Defaul return req, err } } else { - err := logmeUtils.ValidatePlanId(*model.PlanId, offerings) - if err != nil { - return req, err - } planId = model.PlanId } diff --git a/internal/cmd/logme/instance/update/update.go b/internal/cmd/logme/instance/update/update.go index d931acbd4..983047fba 100644 --- a/internal/cmd/logme/instance/update/update.go +++ b/internal/cmd/logme/instance/update/update.go @@ -36,8 +36,8 @@ const ( sgwAclFlag = "acl" syslogFlag = "syslog" planIdFlag = "plan-id" - planNameFlag = "plan-name" - versionFlag = "version" + planNameFlag = "plan-name" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. + versionFlag = "version" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. ) type inputModel struct { @@ -146,6 +146,11 @@ func configureFlags(cmd *cobra.Command) { cmd.Flags().String(planNameFlag, "", "Plan name") cmd.Flags().String(versionFlag, "", "Instance LogMe version") cmd.Flags().StringP(instanceNameFlag, "n", "", "Instance name") + + err := cmd.Flags().MarkDeprecated(planNameFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) + err = cmd.Flags().MarkDeprecated(versionFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) } func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inputModel, error) { @@ -206,15 +211,14 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient logme.Defaul req := apiClient.PartialUpdateInstance(ctx, model.ProjectId, model.Region, model.InstanceId) var planId *string - var err error - - offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() - if err != nil { - return req, fmt.Errorf("get LogMe offerings: %w", err) - } if model.PlanId == nil && model.PlanName != "" && model.Version != "" { - planId, err = logmeUtils.LoadPlanId(model.PlanName, model.Version, offerings) + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. + offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() + if err != nil { + return req, fmt.Errorf("get LogMe offerings: %w", err) + } + planId, err = logmeUtils.LoadPlanId(model.PlanName, model.Version, offerings) //nolint:staticcheck // deprecated but still supported until 2027-02-28 if err != nil { var dsaInvalidPlanError *cliErr.DSAInvalidPlanError if !errors.As(err, &dsaInvalidPlanError) { @@ -224,12 +228,6 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient logme.Defaul } } else { // planId is not required for update operation - if model.PlanId != nil { - err := logmeUtils.ValidatePlanId(*model.PlanId, offerings) - if err != nil { - return req, err - } - } planId = model.PlanId } diff --git a/internal/cmd/mariadb/instance/create/create.go b/internal/cmd/mariadb/instance/create/create.go index 5d37101ce..45d9643c5 100644 --- a/internal/cmd/mariadb/instance/create/create.go +++ b/internal/cmd/mariadb/instance/create/create.go @@ -35,8 +35,8 @@ const ( sgwAclFlag = "acl" syslogFlag = "syslog" planIdFlag = "plan-id" - planNameFlag = "plan-name" - versionFlag = "version" + planNameFlag = "plan-name" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. + versionFlag = "version" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. ) type inputModel struct { @@ -62,9 +62,6 @@ func NewCmd(params *types.CmdParams) *cobra.Command { Long: "Creates a MariaDB instance.", Args: args.NoArgs, Example: examples.Build( - examples.NewExample( - `Create a MariaDB instance with name "my-instance" and specify plan by name and version`, - "$ stackit mariadb instance create --name my-instance --plan-name stackit-mariadb-1.2.10-replica --version 10.6"), examples.NewExample( `Create a MariaDB instance with name "my-instance" and specify plan by ID`, "$ stackit mariadb instance create --name my-instance --plan-id xxx"), @@ -144,6 +141,11 @@ func configureFlags(cmd *cobra.Command) { err := flags.MarkFlagsRequired(cmd, instanceNameFlag) cobra.CheckErr(err) + + err = cmd.Flags().MarkDeprecated(planNameFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) + err = cmd.Flags().MarkDeprecated(versionFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) } func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) { @@ -190,15 +192,14 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient mariadb.Defa req := apiClient.CreateInstance(ctx, model.ProjectId, model.Region) var planId *string - var err error - - offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() - if err != nil { - return req, fmt.Errorf("get MariaDB offerings: %w", err) - } if model.PlanId == nil { - planId, err = mariadbUtils.LoadPlanId(model.PlanName, model.Version, offerings) + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. + offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() + if err != nil { + return req, fmt.Errorf("get MariaDB offerings: %w", err) + } + planId, err = mariadbUtils.LoadPlanId(model.PlanName, model.Version, offerings) //nolint:staticcheck // deprecated but still supported until 2027-02-28 if err != nil { var dsaInvalidPlanError *cliErr.DSAInvalidPlanError if !errors.As(err, &dsaInvalidPlanError) { @@ -207,10 +208,6 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient mariadb.Defa return req, err } } else { - err := mariadbUtils.ValidatePlanId(*model.PlanId, offerings) - if err != nil { - return req, err - } planId = model.PlanId } var sgwAcl *string diff --git a/internal/cmd/mariadb/instance/update/update.go b/internal/cmd/mariadb/instance/update/update.go index 58ea171b6..d7ec4e563 100644 --- a/internal/cmd/mariadb/instance/update/update.go +++ b/internal/cmd/mariadb/instance/update/update.go @@ -35,8 +35,8 @@ const ( sgwAclFlag = "acl" syslogFlag = "syslog" planIdFlag = "plan-id" - planNameFlag = "plan-name" - versionFlag = "version" + planNameFlag = "plan-name" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. + versionFlag = "version" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. ) type inputModel struct { @@ -143,6 +143,11 @@ func configureFlags(cmd *cobra.Command) { cmd.Flags().Var(flags.UUIDFlag(), planIdFlag, "Plan ID") cmd.Flags().String(planNameFlag, "", "Plan name") cmd.Flags().String(versionFlag, "", "Instance MariaDB version") + + err := cmd.Flags().MarkDeprecated(planNameFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) + err = cmd.Flags().MarkDeprecated(versionFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) } func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inputModel, error) { @@ -201,15 +206,14 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient mariadb.Defa req := apiClient.PartialUpdateInstance(ctx, model.ProjectId, model.Region, model.InstanceId) var planId *string - var err error - - offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() - if err != nil { - return req, fmt.Errorf("get MariaDB offerings: %w", err) - } if model.PlanId == nil && model.PlanName != "" && model.Version != "" { - planId, err = mariadbUtils.LoadPlanId(model.PlanName, model.Version, offerings) + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. + offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() + if err != nil { + return req, fmt.Errorf("get MariaDB offerings: %w", err) + } + planId, err = mariadbUtils.LoadPlanId(model.PlanName, model.Version, offerings) //nolint:staticcheck // deprecated but still supported until 2027-02-28 if err != nil { var dsaInvalidPlanError *cliErr.DSAInvalidPlanError if !errors.As(err, &dsaInvalidPlanError) { @@ -219,12 +223,6 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient mariadb.Defa } } else { // planId is not required for update operation - if model.PlanId != nil { - err := mariadbUtils.ValidatePlanId(*model.PlanId, offerings) - if err != nil { - return req, err - } - } planId = model.PlanId } diff --git a/internal/cmd/opensearch/instance/create/create.go b/internal/cmd/opensearch/instance/create/create.go index b7694de96..49f7c511d 100644 --- a/internal/cmd/opensearch/instance/create/create.go +++ b/internal/cmd/opensearch/instance/create/create.go @@ -35,8 +35,8 @@ const ( sgwAclFlag = "acl" syslogFlag = "syslog" planIdFlag = "plan-id" - planNameFlag = "plan-name" - versionFlag = "version" + planNameFlag = "plan-name" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. + versionFlag = "version" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. ) var flagPlugins = flags.StringEnumSliceFlag("plugin", opensearch.AllowedInstanceParametersPluginsInnerEnumValues, "Plugins") @@ -65,9 +65,6 @@ func NewCmd(params *types.CmdParams) *cobra.Command { Long: "Creates an OpenSearch instance.", Args: args.NoArgs, Example: examples.Build( - examples.NewExample( - `Create an OpenSearch instance with name "my-instance" and specify plan by name and version`, - "$ stackit opensearch instance create --name my-instance --plan-name stackit-opensearch-1.2.10-replica --version 2"), examples.NewExample( `Create an OpenSearch instance with name "my-instance" and specify plan by ID`, "$ stackit opensearch instance create --name my-instance --plan-id xxx"), @@ -148,6 +145,11 @@ func configureFlags(cmd *cobra.Command) { err := flags.MarkFlagsRequired(cmd, instanceNameFlag) cobra.CheckErr(err) + + err = cmd.Flags().MarkDeprecated(planNameFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) + err = cmd.Flags().MarkDeprecated(versionFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) } func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) { @@ -193,6 +195,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, type openSearchClient interface { CreateInstance(ctx context.Context, projectId, region string) opensearch.ApiCreateInstanceRequest + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. ListOfferings(ctx context.Context, projectId, region string) opensearch.ApiListOfferingsRequest } @@ -200,15 +203,14 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient openSearchCl req := apiClient.CreateInstance(ctx, model.ProjectId, model.Region) var planId string - var err error - - offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() - if err != nil { - return req, fmt.Errorf("get OpenSearch offerings: %w", err) - } if model.PlanId == "" { - planId, err = opensearchUtils.LoadPlanId(model.PlanName, model.Version, offerings) + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. + offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() //nolint:staticcheck // deprecated but still supported until 2027-02-28 + if err != nil { + return req, fmt.Errorf("get OpenSearch offerings: %w", err) + } + planId, err = opensearchUtils.LoadPlanId(model.PlanName, model.Version, offerings) //nolint:staticcheck // deprecated but still supported until 2027-02-28 if err != nil { var dsaInvalidPlanError *cliErr.DSAInvalidPlanError if !errors.As(err, &dsaInvalidPlanError) { @@ -217,10 +219,6 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient openSearchCl return req, err } } else { - err := opensearchUtils.ValidatePlanId(model.PlanId, offerings) - if err != nil { - return req, err - } planId = model.PlanId } diff --git a/internal/cmd/opensearch/instance/update/update.go b/internal/cmd/opensearch/instance/update/update.go index e5772dc63..7e9ae7d1a 100644 --- a/internal/cmd/opensearch/instance/update/update.go +++ b/internal/cmd/opensearch/instance/update/update.go @@ -36,8 +36,8 @@ const ( sgwAclFlag = "acl" syslogFlag = "syslog" planIdFlag = "plan-id" - planNameFlag = "plan-name" - versionFlag = "version" + planNameFlag = "plan-name" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. + versionFlag = "version" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. ) var flagPlugins = flags.StringEnumSliceFlag( @@ -152,6 +152,11 @@ func configureFlags(cmd *cobra.Command) { cmd.Flags().Var(flags.UUIDFlag(), planIdFlag, "Plan ID") cmd.Flags().String(planNameFlag, "", "Plan name") cmd.Flags().String(versionFlag, "", "Instance OpenSearch version") + + err := cmd.Flags().MarkDeprecated(planNameFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) + err = cmd.Flags().MarkDeprecated(versionFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) } func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inputModel, error) { @@ -210,6 +215,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu type openSearchClient interface { PartialUpdateInstance(ctx context.Context, projectId, region, instanceId string) opensearch.ApiPartialUpdateInstanceRequest + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. ListOfferings(ctx context.Context, projectId, region string) opensearch.ApiListOfferingsRequest } @@ -217,15 +223,14 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient openSearchCl req := apiClient.PartialUpdateInstance(ctx, model.ProjectId, model.Region, model.InstanceId) var planId *string - var err error - - offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() - if err != nil { - return req, fmt.Errorf("get OpenSearch offerings: %w", err) - } if model.PlanId == nil && model.PlanName != "" && model.Version != "" { - foundPlanId, err := opensearchUtils.LoadPlanId(model.PlanName, model.Version, offerings) + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. + offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() //nolint:staticcheck // deprecated but still supported until 2027-02-28 + if err != nil { + return req, fmt.Errorf("get OpenSearch offerings: %w", err) + } + foundPlanId, err := opensearchUtils.LoadPlanId(model.PlanName, model.Version, offerings) //nolint:staticcheck // deprecated but still supported until 2027-02-28 if err != nil { var dsaInvalidPlanError *cliErr.DSAInvalidPlanError if !errors.As(err, &dsaInvalidPlanError) { @@ -236,10 +241,6 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient openSearchCl planId = &foundPlanId } else if model.PlanId != nil { // planId is not required for update operation - err := opensearchUtils.ValidatePlanId(*model.PlanId, offerings) - if err != nil { - return req, err - } planId = model.PlanId } diff --git a/internal/cmd/rabbitmq/instance/create/create.go b/internal/cmd/rabbitmq/instance/create/create.go index 8be9c6a37..a71c522f9 100644 --- a/internal/cmd/rabbitmq/instance/create/create.go +++ b/internal/cmd/rabbitmq/instance/create/create.go @@ -35,8 +35,8 @@ const ( sgwAclFlag = "acl" syslogFlag = "syslog" planIdFlag = "plan-id" - planNameFlag = "plan-name" - versionFlag = "version" + planNameFlag = "plan-name" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. + versionFlag = "version" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. ) var flagPlugins = flags.StringEnumSliceFlag( @@ -69,9 +69,6 @@ func NewCmd(params *types.CmdParams) *cobra.Command { Long: "Creates a RabbitMQ instance.", Args: args.NoArgs, Example: examples.Build( - examples.NewExample( - `Create a RabbitMQ instance with name "my-instance" and specify plan by name and version`, - "$ stackit rabbitmq instance create --name my-instance --plan-name stackit-rabbitmq-1.2.10-replica --version 3.10"), examples.NewExample( `Create a RabbitMQ instance with name "my-instance" and specify plan by ID`, "$ stackit rabbitmq instance create --name my-instance --plan-id xxx"), @@ -153,6 +150,11 @@ func configureFlags(cmd *cobra.Command) { err := flags.MarkFlagsRequired(cmd, instanceNameFlag) cobra.CheckErr(err) + + err = cmd.Flags().MarkDeprecated(planNameFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) + err = cmd.Flags().MarkDeprecated(versionFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) } func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) { @@ -198,6 +200,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, type rabbitMQClient interface { CreateInstance(ctx context.Context, projectId, region string) rabbitmq.ApiCreateInstanceRequest + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. ListOfferings(ctx context.Context, projectId, region string) rabbitmq.ApiListOfferingsRequest } @@ -205,15 +208,14 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient rabbitMQClie req := apiClient.CreateInstance(ctx, model.ProjectId, model.Region) var planId string - var err error - - offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() - if err != nil { - return req, fmt.Errorf("get RabbitMQ offerings: %w", err) - } if model.PlanId == nil { - foundPlanId, err := rabbitmqUtils.LoadPlanId(model.PlanName, model.Version, offerings) + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. + offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() //nolint:staticcheck // deprecated but still supported until 2027-02-28 + if err != nil { + return req, fmt.Errorf("get RabbitMQ offerings: %w", err) + } + foundPlanId, err := rabbitmqUtils.LoadPlanId(model.PlanName, model.Version, offerings) //nolint:staticcheck // deprecated but still supported until 2027-02-28 if err != nil { var dsaInvalidPlanError *cliErr.DSAInvalidPlanError if !errors.As(err, &dsaInvalidPlanError) { @@ -223,10 +225,6 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient rabbitMQClie } planId = *foundPlanId } else { - err := rabbitmqUtils.ValidatePlanId(*model.PlanId, offerings) - if err != nil { - return req, err - } planId = *model.PlanId } diff --git a/internal/cmd/rabbitmq/instance/update/update.go b/internal/cmd/rabbitmq/instance/update/update.go index 60582d027..a6afc586d 100644 --- a/internal/cmd/rabbitmq/instance/update/update.go +++ b/internal/cmd/rabbitmq/instance/update/update.go @@ -36,8 +36,8 @@ const ( sgwAclFlag = "acl" syslogFlag = "syslog" planIdFlag = "plan-id" - planNameFlag = "plan-name" - versionFlag = "version" + planNameFlag = "plan-name" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. + versionFlag = "version" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. ) var flagPlugins = flags.StringEnumSliceFlag( @@ -152,6 +152,11 @@ func configureFlags(cmd *cobra.Command) { cmd.Flags().Var(flags.UUIDFlag(), planIdFlag, "Plan ID") cmd.Flags().String(planNameFlag, "", "Plan name") cmd.Flags().String(versionFlag, "", "Instance RabbitMQ version") + + err := cmd.Flags().MarkDeprecated(planNameFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) + err = cmd.Flags().MarkDeprecated(versionFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) } func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inputModel, error) { @@ -210,6 +215,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu type rabbitMQClient interface { PartialUpdateInstance(ctx context.Context, projectId, regionId, instanceId string) rabbitmq.ApiPartialUpdateInstanceRequest + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. ListOfferings(ctx context.Context, projectId, regionId string) rabbitmq.ApiListOfferingsRequest } @@ -217,15 +223,14 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient rabbitMQClie req := apiClient.PartialUpdateInstance(ctx, model.ProjectId, model.Region, model.InstanceId) var planId *string - var err error - - offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() - if err != nil { - return req, fmt.Errorf("get RabbitMQ offerings: %w", err) - } if model.PlanId == nil && model.PlanName != "" && model.Version != "" { - planId, err = rabbitmqUtils.LoadPlanId(model.PlanName, model.Version, offerings) + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. + offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() //nolint:staticcheck // deprecated but still supported until 2027-02-28 + if err != nil { + return req, fmt.Errorf("get RabbitMQ offerings: %w", err) + } + planId, err = rabbitmqUtils.LoadPlanId(model.PlanName, model.Version, offerings) //nolint:staticcheck // deprecated but still supported until 2027-02-28 if err != nil { var dsaInvalidPlanError *cliErr.DSAInvalidPlanError if !errors.As(err, &dsaInvalidPlanError) { @@ -235,12 +240,6 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient rabbitMQClie } } else { // planId is not required for update operation - if model.PlanId != nil { - err := rabbitmqUtils.ValidatePlanId(*model.PlanId, offerings) - if err != nil { - return req, err - } - } planId = model.PlanId } diff --git a/internal/cmd/redis/instance/create/create.go b/internal/cmd/redis/instance/create/create.go index ebcf4a828..30c7f7bee 100644 --- a/internal/cmd/redis/instance/create/create.go +++ b/internal/cmd/redis/instance/create/create.go @@ -35,8 +35,8 @@ const ( sgwAclFlag = "acl" syslogFlag = "syslog" planIdFlag = "plan-id" - planNameFlag = "plan-name" - versionFlag = "version" + planNameFlag = "plan-name" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. + versionFlag = "version" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. ) type inputModel struct { @@ -62,9 +62,6 @@ func NewCmd(params *types.CmdParams) *cobra.Command { Long: "Creates a Redis instance.", Args: args.NoArgs, Example: examples.Build( - examples.NewExample( - `Create a Redis instance with name "my-instance" and specify plan by name and version`, - "$ stackit redis instance create --name my-instance --plan-name stackit-redis-1.2.10-replica --version 6"), examples.NewExample( `Create a Redis instance with name "my-instance" and specify plan by ID`, "$ stackit redis instance create --name my-instance --plan-id xxx"), @@ -145,6 +142,11 @@ func configureFlags(cmd *cobra.Command) { err := flags.MarkFlagsRequired(cmd, instanceNameFlag) cobra.CheckErr(err) + + err = cmd.Flags().MarkDeprecated(planNameFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) + err = cmd.Flags().MarkDeprecated(versionFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) } func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) { @@ -191,15 +193,14 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient redis.Defaul req := apiClient.CreateInstance(ctx, model.ProjectId, model.Region) var planId string - var err error - - offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() - if err != nil { - return req, fmt.Errorf("get Redis offerings: %w", err) - } if model.PlanId == nil { - foundPlanId, err := redisUtils.LoadPlanId(model.PlanName, model.Version, offerings) + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. + offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() + if err != nil { + return req, fmt.Errorf("get Redis offerings: %w", err) + } + foundPlanId, err := redisUtils.LoadPlanId(model.PlanName, model.Version, offerings) //nolint:staticcheck // deprecated but still supported until 2027-02-28 if err != nil { var dsaInvalidPlanError *cliErr.DSAInvalidPlanError if !errors.As(err, &dsaInvalidPlanError) { @@ -209,10 +210,6 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient redis.Defaul } planId = *foundPlanId } else { - err := redisUtils.ValidatePlanId(*model.PlanId, offerings) - if err != nil { - return req, err - } planId = *model.PlanId } diff --git a/internal/cmd/redis/instance/update/update.go b/internal/cmd/redis/instance/update/update.go index 170089ad1..f71ddd848 100644 --- a/internal/cmd/redis/instance/update/update.go +++ b/internal/cmd/redis/instance/update/update.go @@ -35,8 +35,8 @@ const ( sgwAclFlag = "acl" syslogFlag = "syslog" planIdFlag = "plan-id" - planNameFlag = "plan-name" - versionFlag = "version" + planNameFlag = "plan-name" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. + versionFlag = "version" // Deprecated: Will be removed after 2027-02-28. Use --plan-id instead. ) type inputModel struct { @@ -143,6 +143,11 @@ func configureFlags(cmd *cobra.Command) { cmd.Flags().Var(flags.UUIDFlag(), planIdFlag, "Plan ID") cmd.Flags().String(planNameFlag, "", "Plan name") cmd.Flags().String(versionFlag, "", "Instance Redis version") + + err := cmd.Flags().MarkDeprecated(planNameFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) + err = cmd.Flags().MarkDeprecated(versionFlag, "Will be removed after 2027-02-28. Use the --plan-id flag instead.") + cobra.CheckErr(err) } func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inputModel, error) { @@ -201,15 +206,14 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient redis.Defaul req := apiClient.PartialUpdateInstance(ctx, model.ProjectId, model.Region, model.InstanceId) var planId *string - var err error - - offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() - if err != nil { - return req, fmt.Errorf("get Redis offerings: %w", err) - } if model.PlanId == nil && model.PlanName != "" && model.Version != "" { - planId, err = redisUtils.LoadPlanId(model.PlanName, model.Version, offerings) + // Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. + offerings, err := apiClient.ListOfferings(ctx, model.ProjectId, model.Region).Execute() + if err != nil { + return req, fmt.Errorf("get Redis offerings: %w", err) + } + planId, err = redisUtils.LoadPlanId(model.PlanName, model.Version, offerings) //nolint:staticcheck // deprecated but still supported until 2027-02-28 if err != nil { var dsaInvalidPlanError *cliErr.DSAInvalidPlanError if !errors.As(err, &dsaInvalidPlanError) { @@ -219,12 +223,6 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient redis.Defaul } } else { // planId is not required for update operation - if model.PlanId != nil { - err := redisUtils.ValidatePlanId(*model.PlanId, offerings) - if err != nil { - return req, err - } - } planId = model.PlanId } diff --git a/internal/pkg/errors/errors.go b/internal/pkg/errors/errors.go index d690259ea..7c992927f 100644 --- a/internal/pkg/errors/errors.go +++ b/internal/pkg/errors/errors.go @@ -97,14 +97,11 @@ For more details on the available plans, run: For more details on the available plans, run: $ stackit %s plans` - DSA_INVALID_INPUT_PLAN = `the instance plan was not correctly provided. + DSA_INVALID_INPUT_PLAN = `the instance plan was not correctly provided. -Either provide the plan ID: +Provide the plan ID: $ %[1]s --plan-id [flags] -or provide plan name and version: - $ %[1]s --plan-name --version [flags] - For more details on the available plans, run: $ stackit %[2]s plans` diff --git a/internal/pkg/services/logme/utils/utils.go b/internal/pkg/services/logme/utils/utils.go index 723210164..cd2a597c4 100644 --- a/internal/pkg/services/logme/utils/utils.go +++ b/internal/pkg/services/logme/utils/utils.go @@ -14,21 +14,7 @@ const ( service = "logme" ) -func ValidatePlanId(planId string, offerings *logme.ListOfferingsResponse) error { - for _, offer := range offerings.Offerings { - for _, plan := range offer.Plans { - if strings.EqualFold(plan.Id, planId) { - return nil - } - } - } - - return &errors.DSAInvalidPlanError{ - Service: service, - Details: fmt.Sprintf("You provided plan ID %q, which is invalid.", planId), - } -} - +// Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. func LoadPlanId(planName, version string, offerings *logme.ListOfferingsResponse) (*string, error) { availableVersions := "" availablePlanNames := "" diff --git a/internal/pkg/services/mariadb/utils/utils.go b/internal/pkg/services/mariadb/utils/utils.go index 5169990d2..ec8262526 100644 --- a/internal/pkg/services/mariadb/utils/utils.go +++ b/internal/pkg/services/mariadb/utils/utils.go @@ -14,21 +14,7 @@ const ( service = "mariadb" ) -func ValidatePlanId(planId string, offerings *mariadb.ListOfferingsResponse) error { - for _, offer := range offerings.Offerings { - for _, plan := range offer.Plans { - if strings.EqualFold(plan.Id, planId) { - return nil - } - } - } - - return &errors.DSAInvalidPlanError{ - Service: service, - Details: fmt.Sprintf("You provided plan ID %q, which is invalid.", planId), - } -} - +// Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. func LoadPlanId(planName, version string, offerings *mariadb.ListOfferingsResponse) (*string, error) { availableVersions := "" availablePlanNames := "" diff --git a/internal/pkg/services/opensearch/utils/utils.go b/internal/pkg/services/opensearch/utils/utils.go index 9bc51b92b..454d9b252 100644 --- a/internal/pkg/services/opensearch/utils/utils.go +++ b/internal/pkg/services/opensearch/utils/utils.go @@ -14,21 +14,7 @@ const ( service = "opensearch" ) -func ValidatePlanId(planId string, offerings *opensearch.ListOfferingsResponse) error { - for _, offer := range offerings.Offerings { - for _, plan := range offer.Plans { - if strings.EqualFold(plan.Id, planId) { - return nil - } - } - } - - return &errors.DSAInvalidPlanError{ - Service: service, - Details: fmt.Sprintf("You provided plan ID %q, which is invalid.", planId), - } -} - +// Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. func LoadPlanId(planName, version string, offerings *opensearch.ListOfferingsResponse) (string, error) { availableVersions := "" availablePlanNames := "" diff --git a/internal/pkg/services/rabbitmq/utils/utils.go b/internal/pkg/services/rabbitmq/utils/utils.go index 4d33c2cfb..6daa8126e 100644 --- a/internal/pkg/services/rabbitmq/utils/utils.go +++ b/internal/pkg/services/rabbitmq/utils/utils.go @@ -14,21 +14,7 @@ const ( service = "rabbitmq" ) -func ValidatePlanId(planId string, offerings *rabbitmq.ListOfferingsResponse) error { - for _, offer := range offerings.GetOfferings() { - for _, plan := range offer.Plans { - if strings.EqualFold(plan.Id, planId) { - return nil - } - } - } - - return &errors.DSAInvalidPlanError{ - Service: service, - Details: fmt.Sprintf("You provided plan ID %q, which is invalid.", planId), - } -} - +// Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. func LoadPlanId(planName, version string, offerings *rabbitmq.ListOfferingsResponse) (*string, error) { availableVersions := "" availablePlanNames := "" diff --git a/internal/pkg/services/redis/utils/utils.go b/internal/pkg/services/redis/utils/utils.go index 6a21566c5..a4c05eeb0 100644 --- a/internal/pkg/services/redis/utils/utils.go +++ b/internal/pkg/services/redis/utils/utils.go @@ -14,21 +14,7 @@ const ( service = "redis" ) -func ValidatePlanId(planId string, offerings *redis.ListOfferingsResponse) error { - for _, offer := range offerings.GetOfferings() { - for _, plan := range offer.Plans { - if strings.EqualFold(plan.Id, planId) { - return nil - } - } - } - - return &errors.DSAInvalidPlanError{ - Service: service, - Details: fmt.Sprintf("You provided plan ID %q, which is invalid.", planId), - } -} - +// Deprecated: resolving a plan by --plan-name/--version will be removed after 2027-02-28. Use --plan-id instead. func LoadPlanId(planName, version string, offerings *redis.ListOfferingsResponse) (*string, error) { availableVersions := "" availablePlanNames := ""