Skip to content

Commit d7dbeaf

Browse files
committed
fix(opensearch): print valid JSON/YAML output for list cmds
relates to STACKITCLI-269 / #893
1 parent 99f4d2d commit d7dbeaf

File tree

13 files changed

+131
-141
lines changed

13 files changed

+131
-141
lines changed

internal/cmd/opensearch/credentials/create/create_test.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ import (
1515
"github.com/stackitcloud/stackit-sdk-go/services/opensearch"
1616
)
1717

18-
var projectIdFlag = globalflags.ProjectIdFlag
19-
2018
type testCtxKey struct{}
2119

2220
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
@@ -26,8 +24,8 @@ var testInstanceId = uuid.NewString()
2624

2725
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
2826
flagValues := map[string]string{
29-
projectIdFlag: testProjectId,
30-
instanceIdFlag: testInstanceId,
27+
globalflags.ProjectIdFlag: testProjectId,
28+
instanceIdFlag: testInstanceId,
3129
}
3230
for _, mod := range mods {
3331
mod(flagValues)
@@ -89,21 +87,21 @@ func TestParseInput(t *testing.T) {
8987
{
9088
description: "project id missing",
9189
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
92-
delete(flagValues, projectIdFlag)
90+
delete(flagValues, globalflags.ProjectIdFlag)
9391
}),
9492
isValid: false,
9593
},
9694
{
9795
description: "project id invalid 1",
9896
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
99-
flagValues[projectIdFlag] = ""
97+
flagValues[globalflags.ProjectIdFlag] = ""
10098
}),
10199
isValid: false,
102100
},
103101
{
104102
description: "project id invalid 2",
105103
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
106-
flagValues[projectIdFlag] = "invalid-uuid"
104+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
107105
}),
108106
isValid: false,
109107
},

internal/cmd/opensearch/credentials/delete/delete_test.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ import (
1313
"github.com/stackitcloud/stackit-sdk-go/services/opensearch"
1414
)
1515

16-
var projectIdFlag = globalflags.ProjectIdFlag
17-
1816
type testCtxKey struct{}
1917

2018
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
@@ -35,8 +33,8 @@ func fixtureArgValues(mods ...func(argValues []string)) []string {
3533

3634
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
3735
flagValues := map[string]string{
38-
projectIdFlag: testProjectId,
39-
instanceIdFlag: testInstanceId,
36+
globalflags.ProjectIdFlag: testProjectId,
37+
instanceIdFlag: testInstanceId,
4038
}
4139
for _, mod := range mods {
4240
mod(flagValues)
@@ -104,23 +102,23 @@ func TestParseInput(t *testing.T) {
104102
description: "project id missing",
105103
argValues: fixtureArgValues(),
106104
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
107-
delete(flagValues, projectIdFlag)
105+
delete(flagValues, globalflags.ProjectIdFlag)
108106
}),
109107
isValid: false,
110108
},
111109
{
112110
description: "project id invalid 1",
113111
argValues: fixtureArgValues(),
114112
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
115-
flagValues[projectIdFlag] = ""
113+
flagValues[globalflags.ProjectIdFlag] = ""
116114
}),
117115
isValid: false,
118116
},
119117
{
120118
description: "project id invalid 2",
121119
argValues: fixtureArgValues(),
122120
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
123-
flagValues[projectIdFlag] = "invalid-uuid"
121+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
124122
}),
125123
isValid: false,
126124
},

internal/cmd/opensearch/credentials/describe/describe_test.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ import (
1515
"github.com/stackitcloud/stackit-sdk-go/services/opensearch"
1616
)
1717

18-
var projectIdFlag = globalflags.ProjectIdFlag
19-
2018
type testCtxKey struct{}
2119

2220
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
@@ -37,8 +35,8 @@ func fixtureArgValues(mods ...func(argValues []string)) []string {
3735

3836
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
3937
flagValues := map[string]string{
40-
projectIdFlag: testProjectId,
41-
instanceIdFlag: testInstanceId,
38+
globalflags.ProjectIdFlag: testProjectId,
39+
instanceIdFlag: testInstanceId,
4240
}
4341
for _, mod := range mods {
4442
mod(flagValues)
@@ -106,23 +104,23 @@ func TestParseInput(t *testing.T) {
106104
description: "project id missing",
107105
argValues: fixtureArgValues(),
108106
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
109-
delete(flagValues, projectIdFlag)
107+
delete(flagValues, globalflags.ProjectIdFlag)
110108
}),
111109
isValid: false,
112110
},
113111
{
114112
description: "project id invalid 1",
115113
argValues: fixtureArgValues(),
116114
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
117-
flagValues[projectIdFlag] = ""
115+
flagValues[globalflags.ProjectIdFlag] = ""
118116
}),
119117
isValid: false,
120118
},
121119
{
122120
description: "project id invalid 2",
123121
argValues: fixtureArgValues(),
124122
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
125-
flagValues[projectIdFlag] = "invalid-uuid"
123+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
126124
}),
127125
isValid: false,
128126
},

internal/cmd/opensearch/credentials/list/list.go

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -67,22 +67,20 @@ func NewCmd(params *params.CmdParams) *cobra.Command {
6767
if err != nil {
6868
return fmt.Errorf("list OpenSearch credentials: %w", err)
6969
}
70-
credentials := *resp.CredentialsList
71-
if len(credentials) == 0 {
72-
instanceLabel, err := opensearchUtils.GetInstanceName(ctx, apiClient, model.ProjectId, model.InstanceId)
73-
if err != nil {
74-
params.Printer.Debug(print.ErrorLevel, "get instance name: %v", err)
75-
instanceLabel = model.InstanceId
76-
}
77-
params.Printer.Info("No credentials found for instance %q\n", instanceLabel)
78-
return nil
70+
credentials := resp.GetCredentialsList()
71+
72+
instanceLabel, err := opensearchUtils.GetInstanceName(ctx, apiClient, model.ProjectId, model.InstanceId)
73+
if err != nil {
74+
params.Printer.Debug(print.ErrorLevel, "get instance name: %v", err)
75+
instanceLabel = model.InstanceId
7976
}
8077

8178
// Truncate output
8279
if model.Limit != nil && len(credentials) > int(*model.Limit) {
8380
credentials = credentials[:*model.Limit]
8481
}
85-
return outputResult(params.Printer, model.OutputFormat, credentials)
82+
83+
return outputResult(params.Printer, model.OutputFormat, instanceLabel, credentials)
8684
},
8785
}
8886
configureFlags(cmd)
@@ -126,8 +124,13 @@ func buildRequest(ctx context.Context, model *inputModel, apiClient *opensearch.
126124
return req
127125
}
128126

129-
func outputResult(p *print.Printer, outputFormat string, credentials []opensearch.CredentialsListItem) error {
127+
func outputResult(p *print.Printer, outputFormat, instanceLabel string, credentials []opensearch.CredentialsListItem) error {
130128
return p.OutputResult(outputFormat, credentials, func() error {
129+
if len(credentials) == 0 {
130+
p.Outputf("No credentials found for instance %q\n", instanceLabel)
131+
return nil
132+
}
133+
131134
table := tables.NewTable()
132135
table.SetHeader("ID")
133136
for i := range credentials {

internal/cmd/opensearch/credentials/list/list_test.go

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,6 @@ import (
1616
"github.com/stackitcloud/stackit-sdk-go/services/opensearch"
1717
)
1818

19-
var projectIdFlag = globalflags.ProjectIdFlag
20-
2119
type testCtxKey struct{}
2220

2321
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
@@ -27,9 +25,9 @@ var testInstanceId = uuid.NewString()
2725

2826
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
2927
flagValues := map[string]string{
30-
projectIdFlag: testProjectId,
31-
instanceIdFlag: testInstanceId,
32-
limitFlag: "10",
28+
globalflags.ProjectIdFlag: testProjectId,
29+
instanceIdFlag: testInstanceId,
30+
limitFlag: "10",
3331
}
3432
for _, mod := range mods {
3533
mod(flagValues)
@@ -82,21 +80,21 @@ func TestParseInput(t *testing.T) {
8280
{
8381
description: "project id missing",
8482
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
85-
delete(flagValues, projectIdFlag)
83+
delete(flagValues, globalflags.ProjectIdFlag)
8684
}),
8785
isValid: false,
8886
},
8987
{
9088
description: "project id invalid 1",
9189
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
92-
flagValues[projectIdFlag] = ""
90+
flagValues[globalflags.ProjectIdFlag] = ""
9391
}),
9492
isValid: false,
9593
},
9694
{
9795
description: "project id invalid 2",
9896
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
99-
flagValues[projectIdFlag] = "invalid-uuid"
97+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
10098
}),
10199
isValid: false,
102100
},
@@ -174,8 +172,9 @@ func TestBuildRequest(t *testing.T) {
174172

175173
func TestOutputResult(t *testing.T) {
176174
type args struct {
177-
outputFormat string
178-
credentials []opensearch.CredentialsListItem
175+
outputFormat string
176+
instanceLabel string
177+
credentials []opensearch.CredentialsListItem
179178
}
180179
tests := []struct {
181180
name string
@@ -206,7 +205,7 @@ func TestOutputResult(t *testing.T) {
206205
p.Cmd = NewCmd(&params.CmdParams{Printer: p})
207206
for _, tt := range tests {
208207
t.Run(tt.name, func(t *testing.T) {
209-
if err := outputResult(p, tt.args.outputFormat, tt.args.credentials); (err != nil) != tt.wantErr {
208+
if err := outputResult(p, tt.args.outputFormat, tt.args.instanceLabel, tt.args.credentials); (err != nil) != tt.wantErr {
210209
t.Errorf("outputResult() error = %v, wantErr %v", err, tt.wantErr)
211210
}
212211
})

internal/cmd/opensearch/instance/create/create_test.go

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ import (
1818
"github.com/stackitcloud/stackit-sdk-go/services/opensearch"
1919
)
2020

21-
var projectIdFlag = globalflags.ProjectIdFlag
22-
2321
type testCtxKey struct{}
2422

2523
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
@@ -47,17 +45,17 @@ var testMonitoringInstanceId = uuid.NewString()
4745

4846
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
4947
flagValues := map[string]string{
50-
projectIdFlag: testProjectId,
51-
instanceNameFlag: "example-name",
52-
enableMonitoringFlag: "true",
53-
graphiteFlag: "example-graphite",
54-
metricsFrequencyFlag: "100",
55-
metricsPrefixFlag: "example-prefix",
56-
monitoringInstanceIdFlag: testMonitoringInstanceId,
57-
pluginFlag: "example-plugin",
58-
sgwAclFlag: "198.51.100.14/24",
59-
syslogFlag: "example-syslog",
60-
planIdFlag: testPlanId,
48+
globalflags.ProjectIdFlag: testProjectId,
49+
instanceNameFlag: "example-name",
50+
enableMonitoringFlag: "true",
51+
graphiteFlag: "example-graphite",
52+
metricsFrequencyFlag: "100",
53+
metricsPrefixFlag: "example-prefix",
54+
monitoringInstanceIdFlag: testMonitoringInstanceId,
55+
pluginFlag: "example-plugin",
56+
sgwAclFlag: "198.51.100.14/24",
57+
syslogFlag: "example-syslog",
58+
planIdFlag: testPlanId,
6159
}
6260
for _, mod := range mods {
6361
mod(flagValues)
@@ -149,9 +147,9 @@ func TestParseInput(t *testing.T) {
149147
{
150148
description: "required fields only",
151149
flagValues: map[string]string{
152-
projectIdFlag: testProjectId,
153-
instanceNameFlag: "example-name",
154-
planIdFlag: testPlanId,
150+
globalflags.ProjectIdFlag: testProjectId,
151+
instanceNameFlag: "example-name",
152+
planIdFlag: testPlanId,
155153
},
156154
isValid: true,
157155
expectedModel: &inputModel{
@@ -166,13 +164,13 @@ func TestParseInput(t *testing.T) {
166164
{
167165
description: "zero values",
168166
flagValues: map[string]string{
169-
projectIdFlag: testProjectId,
170-
planIdFlag: testPlanId,
171-
instanceNameFlag: "",
172-
enableMonitoringFlag: "false",
173-
graphiteFlag: "",
174-
metricsFrequencyFlag: "0",
175-
metricsPrefixFlag: "",
167+
globalflags.ProjectIdFlag: testProjectId,
168+
planIdFlag: testPlanId,
169+
instanceNameFlag: "",
170+
enableMonitoringFlag: "false",
171+
graphiteFlag: "",
172+
metricsFrequencyFlag: "0",
173+
metricsPrefixFlag: "",
176174
},
177175
isValid: true,
178176
expectedModel: &inputModel{
@@ -191,21 +189,21 @@ func TestParseInput(t *testing.T) {
191189
{
192190
description: "project id missing",
193191
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
194-
delete(flagValues, projectIdFlag)
192+
delete(flagValues, globalflags.ProjectIdFlag)
195193
}),
196194
isValid: false,
197195
},
198196
{
199197
description: "project id invalid 1",
200198
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
201-
flagValues[projectIdFlag] = ""
199+
flagValues[globalflags.ProjectIdFlag] = ""
202200
}),
203201
isValid: false,
204202
},
205203
{
206204
description: "project id invalid 2",
207205
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
208-
flagValues[projectIdFlag] = "invalid-uuid"
206+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
209207
}),
210208
isValid: false,
211209
},

internal/cmd/opensearch/instance/delete/delete_test.go

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ import (
1313
"github.com/stackitcloud/stackit-sdk-go/services/opensearch"
1414
)
1515

16-
var projectIdFlag = globalflags.ProjectIdFlag
17-
1816
type testCtxKey struct{}
1917

2018
var testCtx = context.WithValue(context.Background(), testCtxKey{}, "foo")
@@ -34,7 +32,7 @@ func fixtureArgValues(mods ...func(argValues []string)) []string {
3432

3533
func fixtureFlagValues(mods ...func(flagValues map[string]string)) map[string]string {
3634
flagValues := map[string]string{
37-
projectIdFlag: testProjectId,
35+
globalflags.ProjectIdFlag: testProjectId,
3836
}
3937
for _, mod := range mods {
4038
mod(flagValues)
@@ -101,23 +99,23 @@ func TestParseInput(t *testing.T) {
10199
description: "project id missing",
102100
argValues: fixtureArgValues(),
103101
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
104-
delete(flagValues, projectIdFlag)
102+
delete(flagValues, globalflags.ProjectIdFlag)
105103
}),
106104
isValid: false,
107105
},
108106
{
109107
description: "project id invalid 1",
110108
argValues: fixtureArgValues(),
111109
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
112-
flagValues[projectIdFlag] = ""
110+
flagValues[globalflags.ProjectIdFlag] = ""
113111
}),
114112
isValid: false,
115113
},
116114
{
117115
description: "project id invalid 2",
118116
argValues: fixtureArgValues(),
119117
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
120-
flagValues[projectIdFlag] = "invalid-uuid"
118+
flagValues[globalflags.ProjectIdFlag] = "invalid-uuid"
121119
}),
122120
isValid: false,
123121
},

0 commit comments

Comments
 (0)