Add retention option on bucket creation (#504)
This also deletes a bucket if it was created and an error occurred
This commit is contained in:
@@ -41,6 +41,9 @@ type MakeBucketRequest struct {
|
||||
// quota
|
||||
Quota *SetBucketQuota `json:"quota,omitempty"`
|
||||
|
||||
// retention
|
||||
Retention *PutBucketRetentionRequest `json:"retention,omitempty"`
|
||||
|
||||
// versioning
|
||||
Versioning bool `json:"versioning,omitempty"`
|
||||
}
|
||||
@@ -57,6 +60,10 @@ func (m *MakeBucketRequest) Validate(formats strfmt.Registry) error {
|
||||
res = append(res, err)
|
||||
}
|
||||
|
||||
if err := m.validateRetention(formats); err != nil {
|
||||
res = append(res, err)
|
||||
}
|
||||
|
||||
if len(res) > 0 {
|
||||
return errors.CompositeValidationError(res...)
|
||||
}
|
||||
@@ -90,6 +97,24 @@ func (m *MakeBucketRequest) validateQuota(formats strfmt.Registry) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *MakeBucketRequest) validateRetention(formats strfmt.Registry) error {
|
||||
|
||||
if swag.IsZero(m.Retention) { // not required
|
||||
return nil
|
||||
}
|
||||
|
||||
if m.Retention != nil {
|
||||
if err := m.Retention.Validate(formats); err != nil {
|
||||
if ve, ok := err.(*errors.Validation); ok {
|
||||
return ve.ValidateName("retention")
|
||||
}
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// MarshalBinary interface implementation
|
||||
func (m *MakeBucketRequest) MarshalBinary() ([]byte, error) {
|
||||
if m == nil {
|
||||
|
||||
@@ -3902,6 +3902,9 @@ func init() {
|
||||
"quota": {
|
||||
"$ref": "#/definitions/setBucketQuota"
|
||||
},
|
||||
"retention": {
|
||||
"$ref": "#/definitions/putBucketRetentionRequest"
|
||||
},
|
||||
"versioning": {
|
||||
"type": "boolean"
|
||||
}
|
||||
@@ -9502,6 +9505,9 @@ func init() {
|
||||
"quota": {
|
||||
"$ref": "#/definitions/setBucketQuota"
|
||||
},
|
||||
"retention": {
|
||||
"$ref": "#/definitions/putBucketRetentionRequest"
|
||||
},
|
||||
"versioning": {
|
||||
"type": "boolean"
|
||||
}
|
||||
|
||||
@@ -323,6 +323,16 @@ func getMakeBucketResponse(session *models.Principal, br *models.MakeBucketReque
|
||||
return prepareError(err)
|
||||
}
|
||||
|
||||
// make sure to delete bucket if an error occurs after bucket was created
|
||||
defer func() {
|
||||
if err != nil {
|
||||
log.Println("error creating bucket:", err)
|
||||
if err := removeBucket(minioClient, *br.Name); err != nil {
|
||||
log.Println("error removing bucket:", err)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
// if it has support for
|
||||
if br.Quota != nil && br.Quota.Enabled != nil && *br.Quota.Enabled {
|
||||
mAdmin, err := newMAdminClient(session)
|
||||
@@ -337,6 +347,14 @@ func getMakeBucketResponse(session *models.Principal, br *models.MakeBucketReque
|
||||
log.Println("error versioning bucket:", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Set Bucket Retention Configuration if defined
|
||||
if br.Retention != nil {
|
||||
err = setBucketRetentionConfig(ctx, minioClient, *br.Name, br.Retention.Mode, br.Retention.Unit, br.Retention.Validity)
|
||||
if err != nil {
|
||||
return prepareError(err)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -2083,6 +2083,9 @@ definitions:
|
||||
type: boolean
|
||||
quota:
|
||||
$ref: "#/definitions/setBucketQuota"
|
||||
retention:
|
||||
$ref: "#/definitions/putBucketRetentionRequest"
|
||||
|
||||
error:
|
||||
type: object
|
||||
required:
|
||||
|
||||
Reference in New Issue
Block a user