Skip to content

Commit a851990

Browse files
committed
[ENH] ✨ Allow to use bucketSize in Mi Gi Ti
1 parent 84fd65b commit a851990

File tree

11 files changed

+94
-25
lines changed

11 files changed

+94
-25
lines changed

api/v1alpha1/bucket_types.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package v1alpha1
1818

1919
import (
2020
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
21+
"k8s.io/apimachinery/pkg/api/resource"
2122
)
2223

2324
// EDIT THIS FILE! THIS IS SCAFFOLDING FOR YOU TO OWN!
@@ -80,11 +81,11 @@ type BucketList struct {
8081
type Quota struct {
8182
// Default quota to apply, mandatory
8283
// +kubebuilder:validation:Required
83-
Default int64 `json:"default"`
84+
Default resource.Quantity `json:"default"`
8485

8586
// Optional override quota, to be used by cluster admin.
8687
// +kubebuilder:validation:Optional
87-
Override int64 `json:"override,omitempty"`
88+
Override resource.Quantity `json:"override,omitempty"`
8889
}
8990

9091
func init() {

config/crd/bases/s3.onyxia.sh_buckets.yaml

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.17.1
6+
controller-gen.kubebuilder.io/version: v0.17.2
77
name: buckets.s3.onyxia.sh
88
spec:
99
group: s3.onyxia.sh
@@ -51,13 +51,19 @@ spec:
5151
description: Quota to apply to the bucket
5252
properties:
5353
default:
54+
anyOf:
55+
- type: integer
56+
- type: string
5457
description: Default quota to apply, mandatory
55-
format: int64
56-
type: integer
58+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
59+
x-kubernetes-int-or-string: true
5760
override:
61+
anyOf:
62+
- type: integer
63+
- type: string
5864
description: Optional override quota, to be used by cluster admin.
59-
format: int64
60-
type: integer
65+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
66+
x-kubernetes-int-or-string: true
6167
required:
6268
- default
6369
type: object

config/crd/bases/s3.onyxia.sh_paths.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.17.1
6+
controller-gen.kubebuilder.io/version: v0.17.2
77
name: paths.s3.onyxia.sh
88
spec:
99
group: s3.onyxia.sh

config/crd/bases/s3.onyxia.sh_policies.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.17.1
6+
controller-gen.kubebuilder.io/version: v0.17.2
77
name: policies.s3.onyxia.sh
88
spec:
99
group: s3.onyxia.sh

config/crd/bases/s3.onyxia.sh_s3instances.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.17.1
6+
controller-gen.kubebuilder.io/version: v0.17.2
77
name: s3instances.s3.onyxia.sh
88
spec:
99
group: s3.onyxia.sh

config/crd/bases/s3.onyxia.sh_s3users.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.17.1
6+
controller-gen.kubebuilder.io/version: v0.17.2
77
name: s3users.s3.onyxia.sh
88
spec:
99
group: s3.onyxia.sh

deploy/charts/s3-operator/Chart.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ type: application
1313
# This is the chart version. This version number should be incremented each time you make changes
1414
# to the chart and its templates, including the app version.
1515
# Versions are expected to follow Semantic Versioning (https://semver.org/)
16-
version: 0.8.0
16+
version: 0.9.0-rc1
1717
# This is the version number of the application being deployed. This version number should be
1818
# incremented each time you make changes to the application. Versions are not expected to
1919
# follow Semantic Versioning. They should reflect the version the application is using.
2020
# It is recommended to use it with quotes.
21-
appVersion: "v0.12.0"
21+
appVersion: "v0.13.0-rc1"

deploy/charts/s3-operator/templates/crds/buckets.yaml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,19 @@ spec:
5656
description: Quota to apply to the bucket
5757
properties:
5858
default:
59+
anyOf:
60+
- type: integer
61+
- type: string
5962
description: Default quota to apply, mandatory
60-
format: int64
61-
type: integer
63+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
64+
x-kubernetes-int-or-string: true
6265
override:
66+
anyOf:
67+
- type: integer
68+
- type: string
6369
description: Optional override quota, to be used by cluster admin.
64-
format: int64
65-
type: integer
70+
pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$
71+
x-kubernetes-int-or-string: true
6672
required:
6773
- default
6874
type: object

internal/controller/bucket/finalizer_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
bucket_controller "github.com/InseeFrLab/s3-operator/internal/controller/bucket"
2626
TestUtils "github.com/InseeFrLab/s3-operator/test/utils"
2727
"github.com/stretchr/testify/assert"
28+
"k8s.io/apimachinery/pkg/api/resource"
2829
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2930
"k8s.io/apimachinery/pkg/types"
3031
ctrl "sigs.k8s.io/controller-runtime"
@@ -50,7 +51,7 @@ func TestHandleDelete(t *testing.T) {
5051
Spec: s3v1alpha1.BucketSpec{
5152
Name: "example-bucket",
5253
S3InstanceRef: "s3-operator/default",
53-
Quota: s3v1alpha1.Quota{Default: 10},
54+
Quota: s3v1alpha1.Quota{Default: *resource.NewQuantity(int64(10), resource.BinarySI)},
5455
},
5556
}
5657

internal/controller/bucket/reconcile.go

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -276,9 +276,45 @@ func (r *BucketReconciler) handleUpdate(
276276
// we reset the quota using the value from CR ("override" is present, "default" if not)
277277

278278
// Choosing between override / default
279-
quotaToResetTo := bucketResource.Spec.Quota.Override
279+
quotaToResetTo, convertionSucceed := bucketResource.Spec.Quota.Override.AsInt64()
280+
if !convertionSucceed {
281+
logger.Error(
282+
err,
283+
"An error occurred while getting quotas override as int64 for ressource",
284+
"bucketName",
285+
bucketResource.Spec.Name,
286+
"NamespacedName",
287+
req.NamespacedName.String(),
288+
)
289+
return r.SetReconciledCondition(
290+
ctx,
291+
req,
292+
bucketResource,
293+
s3v1alpha1.Unreachable,
294+
"An error occurred while creating bucket",
295+
err,
296+
)
297+
}
280298
if quotaToResetTo == 0 {
281-
quotaToResetTo = bucketResource.Spec.Quota.Default
299+
quotaToResetTo, convertionSucceed = bucketResource.Spec.Quota.Default.AsInt64()
300+
if !convertionSucceed {
301+
logger.Error(
302+
err,
303+
"An error occurred while getting default quotas as int64 for ressource",
304+
"bucketName",
305+
bucketResource.Spec.Name,
306+
"NamespacedName",
307+
req.NamespacedName.String(),
308+
)
309+
return r.SetReconciledCondition(
310+
ctx,
311+
req,
312+
bucketResource,
313+
s3v1alpha1.Unreachable,
314+
"An error occurred while creating bucket",
315+
err,
316+
)
317+
}
282318
}
283319

284320
if effectiveQuota != quotaToResetTo {
@@ -428,7 +464,26 @@ func (r *BucketReconciler) handleCreation(
428464
}
429465

430466
// Setting quotas
431-
err = s3Client.SetQuota(bucketResource.Spec.Name, bucketResource.Spec.Quota.Default)
467+
quotas, convertionSucceed := bucketResource.Spec.Quota.Default.AsInt64()
468+
if !convertionSucceed {
469+
logger.Error(
470+
err,
471+
"An error occurred while getting quotas as int64 for ressource",
472+
"bucketName",
473+
bucketResource.Spec.Name,
474+
"NamespacedName",
475+
req.NamespacedName.String(),
476+
)
477+
return r.SetReconciledCondition(
478+
ctx,
479+
req,
480+
bucketResource,
481+
s3v1alpha1.CreationFailure,
482+
"An error occurred while creating bucket",
483+
err,
484+
)
485+
}
486+
err = s3Client.SetQuota(bucketResource.Spec.Name, quotas)
432487
if err != nil {
433488
logger.Error(
434489
err,

0 commit comments

Comments
 (0)