Skip to content

Commit 5177e5d

Browse files
committed
fix(iaas): adapt to new sdk labels type
1 parent 5ca3240 commit 5177e5d

4 files changed

Lines changed: 67 additions & 10 deletions

File tree

‎internal/cmd/project/update/update.go‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ type inputModel struct {
3434
*globalflags.GlobalFlagModel
3535
ParentId *string
3636
Name *string
37-
Labels *map[string]string
37+
Labels *map[string]*string
3838
}
3939

4040
func NewCmd(params *types.CmdParams) *cobra.Command {
@@ -107,7 +107,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel,
107107
return nil, &errors.ProjectIdError{}
108108
}
109109

110-
labels := flags.FlagToStringToStringPointer(p, cmd, labelFlag)
110+
labels := flags.FlagToStringToStringPointerPointer(p, cmd, labelFlag)
111111
parentId := flags.FlagToStringPointer(p, cmd, parentIdFlag)
112112
name := flags.FlagToStringPointer(p, cmd, nameFlag)
113113

@@ -126,10 +126,10 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel,
126126
}
127127
}
128128

129-
if !labelValueRegex.MatchString(value) {
129+
if value == nil || !labelValueRegex.MatchString(*value) {
130130
return nil, &errors.FlagValidationError{
131131
Flag: labelFlag,
132-
Details: fmt.Sprintf("label value %s for key %s didn't match the required regex expression %s", value, key, labelValueRegex),
132+
Details: fmt.Sprintf("label value %v for key %s didn't match the required regex expression %s", value, key, labelValueRegex),
133133
}
134134
}
135135
}

‎internal/cmd/project/update/update_test.go‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,9 +101,9 @@ func TestParseInput(t *testing.T) {
101101
labelValues: []string{"key=value", "foo=bar"},
102102
expectedModel: fixtureInputModel(
103103
func(model *inputModel) {
104-
model.Labels = &map[string]string{
105-
"key": "value",
106-
"foo": "bar",
104+
model.Labels = &map[string]*string{
105+
"key": utils.Ptr("value"),
106+
"foo": utils.Ptr("bar"),
107107
}
108108
}),
109109
isValid: true,
@@ -114,9 +114,9 @@ func TestParseInput(t *testing.T) {
114114
labelValues: []string{"key=value,foo=bar"},
115115
expectedModel: fixtureInputModel(
116116
func(model *inputModel) {
117-
model.Labels = &map[string]string{
118-
"key": "value",
119-
"foo": "bar",
117+
model.Labels = &map[string]*string{
118+
"key": utils.Ptr("value"),
119+
"foo": utils.Ptr("bar"),
120120
}
121121
}),
122122
isValid: true,

‎internal/pkg/flags/flag_to_value.go‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,26 @@ func FlagToStringToStringPointer(p *print.Printer, cmd *cobra.Command, flag stri
7676
return nil
7777
}
7878

79+
// FlagToStringToStringPointerPointer returns a pointer to the flag's value as a map of string pointers.
80+
// Returns nil if the flag is not set, cannot be converted, or does not exist.
81+
func FlagToStringToStringPointerPointer(p *print.Printer, cmd *cobra.Command, flag string) *map[string]*string { //nolint:gocritic //convenient for setting the SDK payload
82+
value, err := cmd.Flags().GetStringToString(flag)
83+
if err != nil {
84+
p.Debug(print.ErrorLevel, "convert flag to string to string pointer pointer: %v", err)
85+
return nil
86+
}
87+
if !cmd.Flag(flag).Changed {
88+
return nil
89+
}
90+
91+
pointerValue := make(map[string]*string, len(value))
92+
for key, item := range value {
93+
item := item
94+
pointerValue[key] = &item
95+
}
96+
return &pointerValue
97+
}
98+
7999
func FlagToStringToAny(p *print.Printer, cmd *cobra.Command, flag string) map[string]any {
80100
value, err := cmd.Flags().GetStringToString(flag)
81101
r := make(map[string]any, len(value))

‎internal/pkg/flags/flag_to_value_test.go‎

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,43 @@ func TestFlagToStringToStringPointer(t *testing.T) {
7373
}
7474
}
7575

76+
func TestFlagToStringToStringPointerPointer(t *testing.T) {
77+
const flagName = "labels"
78+
79+
tests := []struct {
80+
name string
81+
flagValue *string
82+
want *map[string]*string
83+
}{
84+
{name: "flag unset"},
85+
{
86+
name: "flag set",
87+
flagValue: utils.Ptr("foo=bar,label1=value1"),
88+
want: &map[string]*string{
89+
"foo": utils.Ptr("bar"),
90+
"label1": utils.Ptr("value1"),
91+
},
92+
},
93+
}
94+
95+
for _, tt := range tests {
96+
t.Run(tt.name, func(t *testing.T) {
97+
params := testparams.NewTestParams()
98+
cmd := &cobra.Command{Use: "test"}
99+
cmd.Flags().StringToString(flagName, nil, "Labels")
100+
if tt.flagValue != nil {
101+
if err := cmd.Flags().Set(flagName, *tt.flagValue); err != nil {
102+
t.Fatal(err)
103+
}
104+
}
105+
106+
if got := FlagToStringToStringPointerPointer(params.Printer, cmd, flagName); !reflect.DeepEqual(got, tt.want) {
107+
t.Errorf("FlagToStringToStringPointerPointer() = %v, want %v", got, tt.want)
108+
}
109+
})
110+
}
111+
}
112+
76113
func TestFlagToStringArrayValue(t *testing.T) {
77114
const flagName = "geofencing"
78115
tests := []struct {

0 commit comments

Comments
 (0)