Skip to content

Commit 360e778

Browse files
committed
feat(sfs): change immutable field to enum
relates to STACKITCLI-394
1 parent 7febd14 commit 360e778

3 files changed

Lines changed: 83 additions & 16 deletions

File tree

docs/stackit_beta_sfs_snapshot-policy_list.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@ stackit beta sfs snapshot-policy list [flags]
1616
List all snapshot policies
1717
$ stackit beta sfs snapshot-policy list
1818
19-
List all immutable snapshot policies
20-
$ stackit beta sfs snapshot-policy list --immutable
19+
List only mutable snapshot policies
20+
$ stackit beta sfs snapshot-policy list --immutable mutable-only
21+
22+
List only immutable snapshot policies
23+
$ stackit beta sfs snapshot-policy list --immutable immutable-only
2124
2225
List up to 10 snapshot policies
2326
$ stackit beta sfs snapshot-policy list --limit 10
@@ -26,9 +29,9 @@ stackit beta sfs snapshot-policy list [flags]
2629
### Options
2730

2831
```
29-
-h, --help Help for "stackit beta sfs snapshot-policy list"
30-
--immutable Immutable snapshot policy
31-
--limit int Maximum number of entries to list
32+
-h, --help Help for "stackit beta sfs snapshot-policy list"
33+
--immutable string Immutable snapshot policy, one of ["all" "immutable-only" "mutable-only"] (default "all")
34+
--limit int Maximum number of entries to list
3235
```
3336

3437
### Options inherited from parent commands

internal/cmd/beta/sfs/snapshot-policy/list/list.go

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const (
2929
type inputModel struct {
3030
*globalflags.GlobalFlagModel
3131
Limit *int64
32-
Immutable bool
32+
Immutable *string
3333
}
3434

3535
func NewCmd(params *types.CmdParams) *cobra.Command {
@@ -44,8 +44,12 @@ func NewCmd(params *types.CmdParams) *cobra.Command {
4444
"$ stackit beta sfs snapshot-policy list",
4545
),
4646
examples.NewExample(
47-
`List all immutable snapshot policies`,
48-
"$ stackit beta sfs snapshot-policy list --immutable",
47+
`List only mutable snapshot policies`,
48+
"$ stackit beta sfs snapshot-policy list --immutable mutable-only",
49+
),
50+
examples.NewExample(
51+
`List only immutable snapshot policies`,
52+
"$ stackit beta sfs snapshot-policy list --immutable immutable-only",
4953
),
5054
examples.NewExample(
5155
`List up to 10 snapshot policies`,
@@ -95,8 +99,9 @@ func NewCmd(params *types.CmdParams) *cobra.Command {
9599
}
96100

97101
func configureFlags(cmd *cobra.Command) {
102+
immutableOptions := []string{"all", "immutable-only", "mutable-only"}
103+
cmd.Flags().Var(flags.EnumFlag(true, "all", immutableOptions...), immutableFlag, fmt.Sprintf("Immutable snapshot policy, one of %q", immutableOptions))
98104
cmd.Flags().Int64(limitFlag, 0, "Maximum number of entries to list")
99-
cmd.Flags().Bool(immutableFlag, false, "Immutable snapshot policy")
100105
}
101106

102107
func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel, error) {
@@ -116,7 +121,7 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel,
116121
model := inputModel{
117122
GlobalFlagModel: globalFlags,
118123
Limit: limit,
119-
Immutable: flags.FlagToBoolValue(p, cmd, immutableFlag),
124+
Immutable: flags.FlagToStringPointer(p, cmd, immutableFlag),
120125
}
121126

122127
p.DebugInputModel(model)
@@ -125,8 +130,16 @@ func parseInput(p *print.Printer, cmd *cobra.Command, _ []string) (*inputModel,
125130

126131
func buildRequest(ctx context.Context, model *inputModel, apiClient *sfs.APIClient) sfs.ApiListSnapshotPoliciesRequest {
127132
req := apiClient.DefaultAPI.ListSnapshotPolicies(ctx, model.ProjectId)
128-
if model.Immutable {
129-
req = req.Immutable(true)
133+
134+
if model.Immutable != nil {
135+
switch *model.Immutable {
136+
case "all":
137+
return req
138+
case "mutable-only":
139+
req = req.Immutable(false)
140+
case "immutable-only":
141+
req = req.Immutable(true)
142+
}
130143
}
131144
return req
132145
}

internal/cmd/beta/sfs/snapshot-policy/list/list_test.go

Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,41 @@ func TestParseInput(t *testing.T) {
105105
{
106106
description: "immutable snapshot policies",
107107
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
108-
flagValues[immutableFlag] = "true"
108+
flagValues[immutableFlag] = "immutable-only"
109109
}),
110110
isValid: true,
111111
expectedModel: fixtureInputModel(func(model *inputModel) {
112-
model.Immutable = true
112+
model.Immutable = utils.Ptr("immutable-only")
113+
}),
114+
},
115+
{
116+
description: "mutable snapshot policies",
117+
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
118+
flagValues[immutableFlag] = "mutable-only"
119+
}),
120+
isValid: true,
121+
expectedModel: fixtureInputModel(func(model *inputModel) {
122+
model.Immutable = utils.Ptr("mutable-only")
123+
}),
124+
},
125+
{
126+
description: "all snapshot policies",
127+
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
128+
flagValues[immutableFlag] = "all"
129+
}),
130+
isValid: true,
131+
expectedModel: fixtureInputModel(func(model *inputModel) {
132+
model.Immutable = utils.Ptr("all")
133+
}),
134+
},
135+
{
136+
description: "all snapshot policies - without immutable flag",
137+
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
138+
delete(flagValues, immutableFlag)
139+
}),
140+
isValid: true,
141+
expectedModel: fixtureInputModel(func(model *inputModel) {
142+
model.Immutable = nil
113143
}),
114144
},
115145
}
@@ -132,12 +162,33 @@ func TestBuildRequest(t *testing.T) {
132162
expectedRequest: fixtureRequest(),
133163
},
134164
{
135-
description: "immutable snapshot policies",
165+
description: "only immutable snapshot policies",
136166
model: fixtureInputModel(func(model *inputModel) {
137-
model.Immutable = true
167+
model.Immutable = utils.Ptr("immutable-only")
138168
}),
139169
expectedRequest: fixtureRequest().Immutable(true),
140170
},
171+
{
172+
description: "only mutable snapshot policies",
173+
model: fixtureInputModel(func(model *inputModel) {
174+
model.Immutable = utils.Ptr("mutable-only")
175+
}),
176+
expectedRequest: fixtureRequest().Immutable(false),
177+
},
178+
{
179+
description: "all snapshot policies",
180+
model: fixtureInputModel(func(model *inputModel) {
181+
model.Immutable = utils.Ptr("all")
182+
}),
183+
expectedRequest: fixtureRequest(),
184+
},
185+
{
186+
description: "all snapshot policies - without immutable flag",
187+
model: fixtureInputModel(func(model *inputModel) {
188+
model.Immutable = nil
189+
}),
190+
expectedRequest: fixtureRequest(),
191+
},
141192
}
142193

143194
for _, tt := range tests {

0 commit comments

Comments
 (0)