Skip to content

Commit aa3f6fe

Browse files
feat(object-storage) add objectLockEnable flag to bucket create (#1349)
relates to STACKITCLI-342
1 parent 13d8a3b commit aa3f6fe

File tree

5 files changed

+51
-11
lines changed

5 files changed

+51
-11
lines changed

docs/stackit_object-storage_bucket_create.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,16 @@ stackit object-storage bucket create BUCKET_NAME [flags]
1515
```
1616
Create an Object Storage bucket with name "my-bucket"
1717
$ stackit object-storage bucket create my-bucket
18+
19+
Create an Object Storage bucket with enabled object-lock
20+
$ stackit object-storage bucket create my-bucket --object-lock-enabled
1821
```
1922

2023
### Options
2124

2225
```
23-
-h, --help Help for "stackit object-storage bucket create"
26+
-h, --help Help for "stackit object-storage bucket create"
27+
--object-lock-enabled is the object-lock enabled for the bucket
2428
```
2529

2630
### Options inherited from parent commands

internal/cmd/object-storage/bucket/create/create.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"fmt"
66

7+
"github.com/stackitcloud/stackit-cli/internal/pkg/flags"
78
"github.com/stackitcloud/stackit-cli/internal/pkg/types"
89

910
"github.com/stackitcloud/stackit-cli/internal/pkg/args"
@@ -21,12 +22,14 @@ import (
2122
)
2223

2324
const (
24-
bucketNameArg = "BUCKET_NAME"
25+
bucketNameArg = "BUCKET_NAME"
26+
objectLockEnabledFlag = "object-lock-enabled"
2527
)
2628

2729
type inputModel struct {
2830
*globalflags.GlobalFlagModel
29-
BucketName string
31+
BucketName string
32+
ObjectLockEnabled bool
3033
}
3134

3235
func NewCmd(params *types.CmdParams) *cobra.Command {
@@ -39,6 +42,9 @@ func NewCmd(params *types.CmdParams) *cobra.Command {
3942
examples.NewExample(
4043
`Create an Object Storage bucket with name "my-bucket"`,
4144
"$ stackit object-storage bucket create my-bucket"),
45+
examples.NewExample(
46+
`Create an Object Storage bucket with enabled object-lock`,
47+
`$ stackit object-storage bucket create my-bucket --object-lock-enabled`),
4248
),
4349
RunE: func(cmd *cobra.Command, args []string) error {
4450
ctx := context.Background()
@@ -91,9 +97,14 @@ func NewCmd(params *types.CmdParams) *cobra.Command {
9197
return outputResult(params.Printer, model.OutputFormat, model.Async, model.BucketName, resp)
9298
},
9399
}
100+
configureFlags(cmd)
94101
return cmd
95102
}
96103

104+
func configureFlags(cmd *cobra.Command) {
105+
cmd.Flags().Bool(objectLockEnabledFlag, false, "is the object-lock enabled for the bucket")
106+
}
107+
97108
func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inputModel, error) {
98109
bucketName := inputArgs[0]
99110

@@ -103,16 +114,17 @@ func parseInput(p *print.Printer, cmd *cobra.Command, inputArgs []string) (*inpu
103114
}
104115

105116
model := inputModel{
106-
GlobalFlagModel: globalFlags,
107-
BucketName: bucketName,
117+
GlobalFlagModel: globalFlags,
118+
BucketName: bucketName,
119+
ObjectLockEnabled: flags.FlagToBoolValue(p, cmd, objectLockEnabledFlag),
108120
}
109121

110122
p.DebugInputModel(model)
111123
return &model, nil
112124
}
113125

114126
func buildRequest(ctx context.Context, model *inputModel, apiClient *objectstorage.APIClient) objectstorage.ApiCreateBucketRequest {
115-
req := apiClient.DefaultAPI.CreateBucket(ctx, model.ProjectId, model.Region, model.BucketName)
127+
req := apiClient.DefaultAPI.CreateBucket(ctx, model.ProjectId, model.Region, model.BucketName).ObjectLockEnabled(model.ObjectLockEnabled)
116128
return req
117129
}
118130

internal/cmd/object-storage/bucket/create/create_test.go

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,18 +55,19 @@ func fixtureInputModel(mods ...func(model *inputModel)) *inputModel {
5555
Verbosity: globalflags.VerbosityDefault,
5656
Region: testRegion,
5757
},
58-
BucketName: testBucketName,
58+
BucketName: testBucketName,
59+
ObjectLockEnabled: false,
5960
}
6061
for _, mod := range mods {
6162
mod(model)
6263
}
6364
return model
6465
}
6566

66-
func fixtureRequest(mods ...func(request *objectstorage.ApiCreateBucketRequest)) objectstorage.ApiCreateBucketRequest {
67-
request := testClient.DefaultAPI.CreateBucket(testCtx, testProjectId, testRegion, testBucketName)
67+
func fixtureRequest(mods ...func(request objectstorage.ApiCreateBucketRequest) objectstorage.ApiCreateBucketRequest) objectstorage.ApiCreateBucketRequest {
68+
request := testClient.DefaultAPI.CreateBucket(testCtx, testProjectId, testRegion, testBucketName).ObjectLockEnabled(false)
6869
for _, mod := range mods {
69-
mod(&request)
70+
request = mod(request)
7071
}
7172
return request
7273
}
@@ -134,6 +135,17 @@ func TestParseInput(t *testing.T) {
134135
flagValues: fixtureFlagValues(),
135136
isValid: false,
136137
},
138+
{
139+
description: "enable object-lock",
140+
argValues: fixtureArgValues(),
141+
flagValues: fixtureFlagValues(func(flagValues map[string]string) {
142+
flagValues[objectLockEnabledFlag] = "true"
143+
}),
144+
expectedModel: fixtureInputModel(func(model *inputModel) {
145+
model.ObjectLockEnabled = true
146+
}),
147+
isValid: true,
148+
},
137149
}
138150

139151
for _, tt := range tests {
@@ -154,6 +166,15 @@ func TestBuildRequest(t *testing.T) {
154166
model: fixtureInputModel(),
155167
expectedRequest: fixtureRequest(),
156168
},
169+
{
170+
description: "object-lock enabled",
171+
model: fixtureInputModel(func(model *inputModel) {
172+
model.ObjectLockEnabled = true
173+
}),
174+
expectedRequest: fixtureRequest(func(request objectstorage.ApiCreateBucketRequest) objectstorage.ApiCreateBucketRequest {
175+
return request.ObjectLockEnabled(true)
176+
}),
177+
},
157178
}
158179

159180
for _, tt := range tests {

internal/cmd/object-storage/bucket/describe/describe.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ func outputResult(p *print.Printer, outputFormat string, resp *objectstorage.Get
103103
table.AddSeparator()
104104
table.AddRow("URL (Virtual Hosted Style)", resp.Bucket.UrlVirtualHostedStyle)
105105
table.AddSeparator()
106+
table.AddRow("Object Lock Enabled", resp.Bucket.ObjectLockEnabled)
107+
table.AddSeparator()
106108
err := table.Display(p)
107109
if err != nil {
108110
return fmt.Errorf("render table: %w", err)

internal/cmd/object-storage/bucket/list/list.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,14 +129,15 @@ func outputResult(p *print.Printer, outputFormat, projectLabel string, buckets [
129129
}
130130

131131
table := tables.NewTable()
132-
table.SetHeader("NAME", "REGION", "URL (PATH STYLE)", "URL (VIRTUAL HOSTED STYLE)")
132+
table.SetHeader("NAME", "REGION", "URL (PATH STYLE)", "URL (VIRTUAL HOSTED STYLE)", "OBJECT LOCK ENABLED")
133133
for i := range buckets {
134134
bucket := buckets[i]
135135
table.AddRow(
136136
bucket.Name,
137137
bucket.Region,
138138
bucket.UrlPathStyle,
139139
bucket.UrlVirtualHostedStyle,
140+
bucket.ObjectLockEnabled,
140141
)
141142
}
142143
err := table.Display(p)

0 commit comments

Comments
 (0)