Skip to content

Commit

Permalink
Add support for 'Prefix' field in Bucket Spec (#129)
Browse files Browse the repository at this point in the history
  • Loading branch information
nolancon authored Jan 9, 2024
1 parent 98de5dd commit 31f7709
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 5 deletions.
6 changes: 6 additions & 0 deletions apis/provider-ceph/v1alpha1/lifecycleconfiguration_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,12 @@ type LifecycleRule struct {
// Specifies when an Amazon S3 object transitions to a specified storage class.
// +optional
Transitions []Transition `json:"transitions,omitempty"`

// Prefix identifying one or more objects to which the rule applies.
// Deprecated: Use Filter instead.
// This field is still supported as it is a required field in PutBucketLifecycle v1.
// +optional
Prefix *string `json:"prefix,omitempty"`
}

// AbortIncompleteMultipartUpload specifies the days since the initiation of an incomplete multipart upload
Expand Down
5 changes: 5 additions & 0 deletions apis/provider-ceph/v1alpha1/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions internal/s3/lifecycleconfig_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@ func GenerateLifecycleRules(in []v1alpha1.LifecycleRule) []types.LifecycleRule {
ID: local.ID,
Status: types.ExpirationStatus(local.Status),
}
if local.Prefix != nil {
rule.Prefix = local.Prefix //nolint:staticcheck // Support deprecated field.
}
if local.AbortIncompleteMultipartUpload != nil {
rule.AbortIncompleteMultipartUpload = &types.AbortIncompleteMultipartUpload{
DaysAfterInitiation: local.AbortIncompleteMultipartUpload.DaysAfterInitiation,
Expand Down
19 changes: 14 additions & 5 deletions internal/s3/lifecycleconfig_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (

func TestGenerateLifecycleConfigurationInput(t *testing.T) {
bucketname := "bucket"
filterPrefix := "someprefix/"
prefix := "someprefix/"
days90 := int32(90)
days365 := int32(365)
days3650 := int32(3650)
Expand All @@ -41,6 +41,7 @@ func TestGenerateLifecycleConfigurationInput(t *testing.T) {
Rules: []v1alpha1.LifecycleRule{
{
Status: "Enabled",
Prefix: &prefix,
Expiration: &v1alpha1.LifecycleExpiration{
Days: &days365,
},
Expand All @@ -55,6 +56,7 @@ func TestGenerateLifecycleConfigurationInput(t *testing.T) {
Rules: []types.LifecycleRule{
{
Status: "Enabled",
Prefix: &prefix,
Expiration: &types.LifecycleExpiration{
Days: days365,
},
Expand All @@ -72,11 +74,12 @@ func TestGenerateLifecycleConfigurationInput(t *testing.T) {
Rules: []v1alpha1.LifecycleRule{
{
Status: "Enabled",
Prefix: &prefix,
Expiration: &v1alpha1.LifecycleExpiration{
Days: &days3650,
},
Filter: &v1alpha1.LifecycleRuleFilter{
Prefix: &filterPrefix,
Prefix: &prefix,
},
Transitions: []v1alpha1.Transition{
{
Expand All @@ -87,6 +90,8 @@ func TestGenerateLifecycleConfigurationInput(t *testing.T) {
},
{
Status: "Enabled",
Prefix: &prefix,

Expiration: &v1alpha1.LifecycleExpiration{
Days: &days3650,
},
Expand All @@ -99,11 +104,12 @@ func TestGenerateLifecycleConfigurationInput(t *testing.T) {
},
{
Status: "Enabled",
Prefix: &prefix,
Expiration: &v1alpha1.LifecycleExpiration{
Days: &days365,
},
Filter: &v1alpha1.LifecycleRuleFilter{
Prefix: &filterPrefix,
Prefix: &prefix,
},
Transitions: []v1alpha1.Transition{
{
Expand All @@ -122,11 +128,12 @@ func TestGenerateLifecycleConfigurationInput(t *testing.T) {
Rules: []types.LifecycleRule{
{
Status: "Enabled",
Prefix: &prefix,
Expiration: &types.LifecycleExpiration{
Days: days3650,
},
Filter: &types.LifecycleRuleFilterMemberPrefix{
Value: filterPrefix,
Value: prefix,
},
Transitions: []types.Transition{
{
Expand All @@ -137,6 +144,7 @@ func TestGenerateLifecycleConfigurationInput(t *testing.T) {
},
{
Status: "Enabled",
Prefix: &prefix,
Expiration: &types.LifecycleExpiration{
Days: days3650,
},
Expand All @@ -150,11 +158,12 @@ func TestGenerateLifecycleConfigurationInput(t *testing.T) {
},
{
Status: "Enabled",
Prefix: &prefix,
Expiration: &types.LifecycleExpiration{
Days: days365,
},
Filter: &types.LifecycleRuleFilterMemberPrefix{
Value: filterPrefix,
Value: prefix,
},
Transitions: []types.Transition{
{
Expand Down
6 changes: 6 additions & 0 deletions package/crds/provider-ceph.ceph.crossplane.io_buckets.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,12 @@ spec:
- storageClass
type: object
type: array
prefix:
description: 'Prefix identifying one or more objects
to which the rule applies. Deprecated: Use Filter
instead. This field is still supported as it is a
required field in PutBucketLifecycle v1.'
type: string
status:
description: "If 'Enabled', the rule is currently being
applied. If 'Disabled', the rule is not currently
Expand Down

0 comments on commit 31f7709

Please sign in to comment.