Skip to content

Commit ce54eda

Browse files
authored
cmd: Add ref-id auto-discovery to resource upgrade (#92)
bugfix: Adds RefID auto-discovery for the deployment resource upgrade command when the --ref-id flag is not set.
1 parent f3d09b3 commit ce54eda

File tree

3 files changed

+34
-40
lines changed

3 files changed

+34
-40
lines changed

cmd/deployment/resource/upgrade.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/spf13/cobra"
2424

2525
cmdutil "github.com/elastic/ecctl/cmd/util"
26+
"github.com/elastic/ecctl/pkg/deployment"
2627
"github.com/elastic/ecctl/pkg/deployment/depresource"
2728
"github.com/elastic/ecctl/pkg/ecctl"
2829
)
@@ -37,7 +38,7 @@ var upgradeCmd = &cobra.Command{
3738
resType, _ := cmd.Flags().GetString("type")
3839
refID, _ := cmd.Flags().GetString("ref-id")
3940

40-
res, err := depresource.UpgradeStateless(depresource.UpgradeStatelessParams{
41+
res, err := depresource.UpgradeStateless(deployment.ResourceParams{
4142
API: ecctl.Get().API,
4243
DeploymentID: args[0],
4344
Type: resType,
@@ -70,5 +71,4 @@ func init() {
7071
upgradeCmd.Flags().String("type", "", "Optional stateless deployment type to upgrade (kibana, apm, or appsearch)")
7172
upgradeCmd.MarkFlagRequired("type")
7273
upgradeCmd.Flags().String("ref-id", "", "Optional deployment RefId, if not set, the RefId will be auto-discovered")
73-
upgradeCmd.MarkFlagRequired("ref-id")
7474
}

pkg/deployment/depresource/upgrade_stateless.go

Lines changed: 2 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,48 +18,16 @@
1818
package depresource
1919

2020
import (
21-
"errors"
22-
2321
"github.com/elastic/cloud-sdk-go/pkg/api"
2422
"github.com/elastic/cloud-sdk-go/pkg/client/deployments"
2523
"github.com/elastic/cloud-sdk-go/pkg/models"
26-
"github.com/hashicorp/go-multierror"
2724

28-
"github.com/elastic/ecctl/pkg/deployment/deputil"
29-
"github.com/elastic/ecctl/pkg/util"
25+
"github.com/elastic/ecctl/pkg/deployment"
3026
)
3127

32-
// UpgradeStatelessParams is consumed by UpgradeStateless
33-
type UpgradeStatelessParams struct {
34-
*api.API
35-
36-
DeploymentID string
37-
Type string
38-
RefID string
39-
}
40-
41-
// Validate ensures the parameters are usable by the consuming function.
42-
func (params UpgradeStatelessParams) Validate() error {
43-
var merr = new(multierror.Error)
44-
45-
if params.API == nil {
46-
merr = multierror.Append(merr, util.ErrAPIReq)
47-
}
48-
49-
if len(params.DeploymentID) != 32 {
50-
merr = multierror.Append(merr, deputil.NewInvalidDeploymentIDError(params.DeploymentID))
51-
}
52-
53-
if params.Type == "" {
54-
merr = multierror.Append(merr, errors.New("deployment resource type cannot be empty"))
55-
}
56-
57-
return merr.ErrorOrNil()
58-
}
59-
6028
// UpgradeStateless upgrades a stateless deployment resource like APM, Kibana
6129
// and AppSearch.
62-
func UpgradeStateless(params UpgradeStatelessParams) (*models.DeploymentResourceUpgradeResponse, error) {
30+
func UpgradeStateless(params deployment.ResourceParams) (*models.DeploymentResourceUpgradeResponse, error) {
6331
if err := params.Validate(); err != nil {
6432
return nil, err
6533
}

pkg/deployment/depresource/upgrade_stateless_test.go

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,10 @@ import (
2626
"github.com/elastic/cloud-sdk-go/pkg/api"
2727
"github.com/elastic/cloud-sdk-go/pkg/api/mock"
2828
"github.com/elastic/cloud-sdk-go/pkg/models"
29+
"github.com/elastic/cloud-sdk-go/pkg/util/ec"
2930
"github.com/hashicorp/go-multierror"
3031

32+
"github.com/elastic/ecctl/pkg/deployment"
3133
"github.com/elastic/ecctl/pkg/util"
3234
)
3335

@@ -39,7 +41,7 @@ func TestUpgradeStateless(t *testing.T) {
3941
}
4042
internalErrorBytes, _ := json.MarshalIndent(internalError, "", " ")
4143
type args struct {
42-
params UpgradeStatelessParams
44+
params deployment.ResourceParams
4345
}
4446
tests := []struct {
4547
name string
@@ -54,31 +56,55 @@ func TestUpgradeStateless(t *testing.T) {
5456
util.ErrAPIReq,
5557
errors.New("id \"\" is invalid"),
5658
errors.New("deployment resource type cannot be empty"),
59+
errors.New("failed auto-discovering the resource ref id: api reference is required for command"),
60+
errors.New(`failed auto-discovering the resource ref id: id "" is invalid`),
5761
}},
5862
},
5963
{
6064
name: "fails due to API error",
61-
args: args{params: UpgradeStatelessParams{
65+
args: args{params: deployment.ResourceParams{
6266
API: api.NewMock(mock.New404Response(mock.NewStructBody(internalError))),
6367
DeploymentID: util.ValidClusterID,
68+
RefID: "main-kibana",
6469
Type: "kibana",
6570
}},
6671
err: errors.New(string(internalErrorBytes)),
6772
},
6873
{
6974
name: "succeeds",
70-
args: args{params: UpgradeStatelessParams{
75+
args: args{params: deployment.ResourceParams{
7176
API: api.NewMock(mock.New202Response(mock.NewStringBody(""))),
7277
DeploymentID: util.ValidClusterID,
7378
Type: "kibana",
79+
RefID: "main-kibana",
7480
}},
7581
want: new(models.DeploymentResourceUpgradeResponse),
7682
},
83+
{
84+
name: "succeeds when RefID is not set",
85+
args: args{params: deployment.ResourceParams{
86+
API: api.NewMock(
87+
mock.New200Response(mock.NewStructBody(models.DeploymentGetResponse{
88+
Healthy: ec.Bool(true),
89+
ID: ec.String("3531aaf988594efa87c1aabb7caed337"),
90+
Resources: &models.DeploymentResources{
91+
Elasticsearch: []*models.ElasticsearchResourceInfo{{
92+
ID: ec.String("3531aaf988594efa87c1aabb7caed337"),
93+
RefID: ec.String("elasticsearch"),
94+
}},
95+
},
96+
})),
97+
mock.New200Response(mock.NewStringBody("")),
98+
),
99+
DeploymentID: util.ValidClusterID,
100+
Type: "elasticsearch",
101+
}},
102+
},
77103
}
78104
for _, tt := range tests {
79105
t.Run(tt.name, func(t *testing.T) {
80106
got, err := UpgradeStateless(tt.args.params)
81-
if !reflect.DeepEqual(err, tt.err) {
107+
if tt.err != nil && err.Error() != tt.err.Error() {
82108
t.Errorf("UpgradeStateless() error = %v, wantErr %v", err, tt.err)
83109
return
84110
}

0 commit comments

Comments
 (0)