Skip to content

Commit 6a7f042

Browse files
bexsoftBenjamin Perezdvaldivia
authored
Fixed logic for add lifecycle rules (#1553)
- Removed support to fixed date lifecycle rules according resolution of #1527 Signed-off-by: Benjamin Perez <benjamin@bexsoft.net> Co-authored-by: Benjamin Perez <benjamin@bexsoft.net> Co-authored-by: Daniel Valdivia <18384552+dvaldivia@users.noreply.github.com>
1 parent 5fd82ca commit 6a7f042

File tree

6 files changed

+113
-71
lines changed

6 files changed

+113
-71
lines changed

models/add_bucket_lifecycle.go

Lines changed: 58 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

portal-ui/src/screens/Console/Buckets/BucketDetails/AddLifecycleModal.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,7 @@ const AddLifecycleModal = ({
166166
}
167167

168168
const lifecycleInsert = {
169+
type: ilmType,
169170
prefix,
170171
tags,
171172
expired_object_delete_marker: expiredObjectDM,

restapi/embedded_spec.go

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

restapi/user_buckets_lifecycle.go

Lines changed: 29 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -161,57 +161,28 @@ func addBucketLifecycle(ctx context.Context, client MinioClient, params user_api
161161

162162
opts := ilm.LifecycleOptions{}
163163

164-
// Verify if transition items are set
165-
if params.Body.ExpiryDate == "" && params.Body.ExpiryDays == 0 {
166-
if params.Body.TransitionDate != "" && params.Body.TransitionDays != 0 {
167-
return errors.New("only one transition configuration can be set (days or date)")
168-
}
169-
170-
if params.Body.ExpiryDate != "" || params.Body.ExpiryDays != 0 {
171-
return errors.New("expiry cannot be set when transition is being configured")
172-
}
173-
174-
if params.Body.NoncurrentversionExpirationDays != 0 {
175-
return errors.New("non current version Expiration Days cannot be set when transition is being configured")
176-
}
177-
178-
if params.Body.TransitionDate != "" {
179-
opts = ilm.LifecycleOptions{
180-
ID: id,
181-
Prefix: params.Body.Prefix,
182-
Status: !params.Body.Disable,
183-
IsTagsSet: params.Body.Tags != "",
184-
Tags: params.Body.Tags,
185-
TransitionDate: params.Body.TransitionDate,
186-
StorageClass: strings.ToUpper(params.Body.StorageClass),
187-
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
188-
NoncurrentVersionTransitionDays: int(params.Body.NoncurrentversionTransitionDays),
189-
NoncurrentVersionTransitionStorageClass: strings.ToUpper(params.Body.NoncurrentversionTransitionStorageClass),
190-
}
191-
} else if params.Body.TransitionDays != 0 {
192-
opts = ilm.LifecycleOptions{
193-
ID: id,
194-
Prefix: params.Body.Prefix,
195-
Status: !params.Body.Disable,
196-
IsTagsSet: params.Body.Tags != "",
197-
Tags: params.Body.Tags,
198-
TransitionDays: strconv.Itoa(int(params.Body.TransitionDays)),
199-
StorageClass: strings.ToUpper(params.Body.StorageClass),
200-
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
201-
NoncurrentVersionTransitionDays: int(params.Body.NoncurrentversionTransitionDays),
202-
NoncurrentVersionTransitionStorageClass: strings.ToUpper(params.Body.NoncurrentversionTransitionStorageClass),
203-
}
204-
}
205-
} else if params.Body.TransitionDate == "" && params.Body.TransitionDays == 0 {
206-
// Verify if expiry items are set
207-
if params.Body.ExpiryDate != "" && params.Body.ExpiryDays != 0 {
164+
// Verify if transition rule is requested
165+
if params.Body.Type == models.AddBucketLifecycleTypeTransition {
166+
if params.Body.TransitionDays == 0 && params.Body.NoncurrentversionTransitionDays == 0 {
208167
return errors.New("only one expiry configuration can be set (days or date)")
209168
}
210169

211-
if params.Body.TransitionDate != "" || params.Body.TransitionDays != 0 {
212-
return errors.New("transition cannot be set when expiry is being configured")
170+
opts = ilm.LifecycleOptions{
171+
ID: id,
172+
Prefix: params.Body.Prefix,
173+
Status: !params.Body.Disable,
174+
IsTagsSet: params.Body.Tags != "",
175+
Tags: params.Body.Tags,
176+
TransitionDays: strconv.Itoa(int(params.Body.TransitionDays)),
177+
StorageClass: strings.ToUpper(params.Body.StorageClass),
178+
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
179+
NoncurrentVersionTransitionDays: int(params.Body.NoncurrentversionTransitionDays),
180+
NoncurrentVersionTransitionStorageClass: strings.ToUpper(params.Body.NoncurrentversionTransitionStorageClass),
181+
IsTransitionDaysSet: params.Body.TransitionDays != 0,
182+
IsNoncurrentVersionTransitionDaysSet: params.Body.NoncurrentversionTransitionDays != 0,
213183
}
214-
184+
} else if params.Body.Type == models.AddBucketLifecycleTypeExpiry {
185+
// Verify if expiry items are set
215186
if params.Body.NoncurrentversionTransitionDays != 0 {
216187
return errors.New("non current version Transition Days cannot be set when expiry is being configured")
217188
}
@@ -220,33 +191,20 @@ func addBucketLifecycle(ctx context.Context, client MinioClient, params user_api
220191
return errors.New("non current version Transition Storage Class cannot be set when expiry is being configured")
221192
}
222193

223-
if params.Body.ExpiryDate != "" {
224-
opts = ilm.LifecycleOptions{
225-
ID: id,
226-
Prefix: params.Body.Prefix,
227-
Status: !params.Body.Disable,
228-
IsTagsSet: params.Body.Tags != "",
229-
Tags: params.Body.Tags,
230-
ExpiryDate: params.Body.ExpiryDate,
231-
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
232-
NoncurrentVersionExpirationDays: int(params.Body.NoncurrentversionExpirationDays),
233-
}
234-
} else if params.Body.ExpiryDays != 0 {
235-
opts = ilm.LifecycleOptions{
236-
ID: id,
237-
Prefix: params.Body.Prefix,
238-
Status: !params.Body.Disable,
239-
IsTagsSet: params.Body.Tags != "",
240-
Tags: params.Body.Tags,
241-
ExpiryDays: strconv.Itoa(int(params.Body.ExpiryDays)),
242-
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
243-
NoncurrentVersionExpirationDays: int(params.Body.NoncurrentversionExpirationDays),
244-
}
194+
opts = ilm.LifecycleOptions{
195+
ID: id,
196+
Prefix: params.Body.Prefix,
197+
Status: !params.Body.Disable,
198+
IsTagsSet: params.Body.Tags != "",
199+
Tags: params.Body.Tags,
200+
ExpiryDays: strconv.Itoa(int(params.Body.ExpiryDays)),
201+
ExpiredObjectDeleteMarker: params.Body.ExpiredObjectDeleteMarker,
202+
NoncurrentVersionExpirationDays: int(params.Body.NoncurrentversionExpirationDays),
245203
}
246204

247205
} else {
248206
// Non set, we return error
249-
return errors.New("no valid configuration is set")
207+
return errors.New("no valid configuration requested")
250208
}
251209

252210
var err2 *probe.Error
@@ -335,7 +293,7 @@ func editBucketLifecycle(ctx context.Context, client MinioClient, params user_ap
335293

336294
} else {
337295
// Non set, we return error
338-
return errors.New("transition and expiry cannot be set for the same rule")
296+
return errors.New("no valid configuration requested")
339297
}
340298

341299
var err2 *probe.Error

restapi/user_buckets_lifecycle_test.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,9 +163,12 @@ func TestSetLifecycleRule(t *testing.T) {
163163
return &mockLifecycle, nil
164164
}
165165

166+
expiryRule := "expiry"
167+
166168
insertMock := user_api.AddBucketLifecycleParams{
167169
BucketName: "testBucket",
168170
Body: &models.AddBucketLifecycle{
171+
Type: expiryRule,
169172
Disable: false,
170173
ExpiredObjectDeleteMarker: false,
171174
ExpiryDays: int32(16),

swagger-console.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3888,6 +3888,12 @@ definitions:
38883888
addBucketLifecycle:
38893889
type: object
38903890
properties:
3891+
type:
3892+
description: ILM Rule type (Expiry or transition)
3893+
type: string
3894+
enum:
3895+
- expiry
3896+
- transition
38913897
prefix:
38923898
description: Non required field, it matches a prefix to perform ILM operations on it
38933899
type: string

0 commit comments

Comments
 (0)