diff --git a/api/v1alpha1/s3bucket_types.go b/api/v1alpha1/s3bucket_types.go index 2b6f733..9356dbe 100644 --- a/api/v1alpha1/s3bucket_types.go +++ b/api/v1alpha1/s3bucket_types.go @@ -52,7 +52,7 @@ type S3BucketStatus struct { // +kubebuilder:printcolumn:name="S3USERREF",type=string,JSONPath=`.spec.s3UserRef` // +kubebuilder:resource:shortName=s3b -// S3Bucket is the Schema for the s3buckets API +// S3 Bucket Instance type S3Bucket struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/api/v1alpha1/s3user_types.go b/api/v1alpha1/s3user_types.go index 071e1fd..534f244 100644 --- a/api/v1alpha1/s3user_types.go +++ b/api/v1alpha1/s3user_types.go @@ -48,6 +48,7 @@ type S3UserStatus struct { // +kubebuilder:printcolumn:name="MAX BUCKETS",type=string,JSONPath=`.spec.quota.maxBuckets` // +kubebuilder:printcolumn:name="AGE",type=date,JSONPath=`.metadata.creationTimestamp` +// S3 User is created by the S3 User Claim instance. It's not applicable for the operator user. type S3User struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/api/v1alpha1/s3userclaim_types.go b/api/v1alpha1/s3userclaim_types.go index c9e0071..9719bac 100644 --- a/api/v1alpha1/s3userclaim_types.go +++ b/api/v1alpha1/s3userclaim_types.go @@ -61,6 +61,7 @@ type S3UserClaimStatus struct { // +kubebuilder:printcolumn:name="AGE",type=date,JSONPath=`.metadata.creationTimestamp` // +kubebuilder:resource:shortName=s3u +// S3 User Claim Instance type S3UserClaim struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` diff --git a/charts/ceph-s3-operator/Chart.yaml b/charts/ceph-s3-operator/Chart.yaml index cce82cc..e76cb6a 100644 --- a/charts/ceph-s3-operator/Chart.yaml +++ b/charts/ceph-s3-operator/Chart.yaml @@ -13,9 +13,9 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 +version: 0.3.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: "0.1.0" +appVersion: "v0.3.6" diff --git a/config/crd/bases/s3.snappcloud.io_s3buckets.yaml b/config/crd/bases/s3.snappcloud.io_s3buckets.yaml index f41d1a6..c40144f 100644 --- a/config/crd/bases/s3.snappcloud.io_s3buckets.yaml +++ b/config/crd/bases/s3.snappcloud.io_s3buckets.yaml @@ -24,7 +24,7 @@ spec: name: v1alpha1 schema: openAPIV3Schema: - description: S3Bucket is the Schema for the s3buckets API + description: S3 Bucket Instance properties: apiVersion: description: 'APIVersion defines the versioned schema of this representation diff --git a/config/crd/bases/s3.snappcloud.io_s3userclaims.yaml b/config/crd/bases/s3.snappcloud.io_s3userclaims.yaml index 5970506..9007ad2 100644 --- a/config/crd/bases/s3.snappcloud.io_s3userclaims.yaml +++ b/config/crd/bases/s3.snappcloud.io_s3userclaims.yaml @@ -39,6 +39,7 @@ spec: name: v1alpha1 schema: openAPIV3Schema: + description: S3 User Claim Instance properties: apiVersion: description: 'APIVersion defines the versioned schema of this representation diff --git a/config/crd/bases/s3.snappcloud.io_s3users.yaml b/config/crd/bases/s3.snappcloud.io_s3users.yaml index 490c42f..d19daac 100644 --- a/config/crd/bases/s3.snappcloud.io_s3users.yaml +++ b/config/crd/bases/s3.snappcloud.io_s3users.yaml @@ -40,6 +40,8 @@ spec: name: v1alpha1 schema: openAPIV3Schema: + description: S3 User is created by the S3 User Claim instance. It's not applicable + for the operator user. properties: apiVersion: description: 'APIVersion defines the versioned schema of this representation diff --git a/config/manifests/bases/ceph-s3-operator.clusterserviceversion.yaml b/config/manifests/bases/ceph-s3-operator.clusterserviceversion.yaml index 9d807a5..ef48d11 100644 --- a/config/manifests/bases/ceph-s3-operator.clusterserviceversion.yaml +++ b/config/manifests/bases/ceph-s3-operator.clusterserviceversion.yaml @@ -4,62 +4,66 @@ metadata: annotations: alm-examples: '[]' capabilities: Basic Install + categories: Storage + description: Provision and manage users and buckets in S3 object storage created + with Ceph RGW on Kubernetes and OpenShift. + repository: https://github.com/snapp-incubator/ceph-s3-operator + support: Snappcloud name: ceph-s3-operator.v0.0.0 namespace: placeholder spec: apiservicedefinitions: {} customresourcedefinitions: owned: - - description: S3Bucket is the Schema for the s3buckets API + - description: S3 Bucket Instance displayName: S3 Bucket kind: S3Bucket name: s3buckets.s3.snappcloud.io version: v1alpha1 - - displayName: S3 User Claim + - description: S3 User Claim Instance + displayName: S3 User Claim kind: S3UserClaim name: s3userclaims.s3.snappcloud.io version: v1alpha1 - - displayName: S3 User + - description: S3 User is created by the S3 User Claim instance. It's not applicable + for the operator user. + displayName: S3 User kind: S3User name: s3users.s3.snappcloud.io version: v1alpha1 description: | - The Ceph S3 Operator streamlines operations with Ceph storage, employed as an S3-compatible system. + The Ceph S3 Operator, an open-source endeavor, is crafted to streamline the management of S3 users and buckets within a Ceph cluster environment. It enhances efficiency and simplifies processes, rendering S3 usage on Ceph clusters more straightforward and user-friendly. + ## Features - > **Important Note:** When creating new users, utilize **S3UserClaim** instead of S3User, as the latter is reserved exclusively for operator functionality. + - S3 User Management + - Bucket Management + - Subuser Support + - Bucket policy Support + - Quota Management + - Webhook Integration + - E2E Testing + - Helm Chart and OLM Support - ## Key Features + ## Usage and Documentation - 1. User management, including creation and removal, via S3UserClaim. - 2. Configurable user quotas. - 3. Bucket management, including creation and removal. - - ## Documentation - - For detailed information, consult the [user-doc](https://docs.snappcloud.io/docs/storage/object-store/ceph-s3-operator), the [Readme](https://github.com/snapp-incubator/ceph-s3-operator#readme) in the main branch, and the [design details](https://github.com/snapp-incubator/ceph-s3-operator/blob/main/docs/DESIGN.md). - - ## Contribution - - We encourage you to contribute by either submitting an issue or creating a pull request on the operator's [Github repository](https://github.com/snapp-incubator/ceph-s3-operator/). - - ## License - - Ceph S3 Operator is licensed under the [GNU General Public License v3.0](https://github.com/snapp-incubator/ceph-s3-operator/blob/main/LICENSE). + - CRD Examples: Located in the [samples](https://github.com/snapp-incubator/ceph-s3-operator/tree/main/config/samples) folder. + - Detailed Documentation: Available on the [wiki](https://github.com/snapp-incubator/ceph-s3-operator/wiki). + - Design and Decision Insights: Refer to our [design doc](https://github.com/snapp-incubator/ceph-s3-operator/blob/main/docs/DESIGN.md) for an in-depth understanding. displayName: Ceph S3 Operator icon: - - base64data: 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 + - base64data: iVBORw0KGgoAAAANSUhEUgAAAFAAAAAoCAMAAABevo0zAAABaFBMVEVHcEwBBikABTMAABsAACAAACQAAifr//8BCCwCCi7q/v79//8CEzz////n+/v7///p/fwACzgACTYDFz8NGTgAABUJDzAADToTKkYjR18WMEvu//81bnny//8LIEYAAC5u7ddOpqL4//8AAA9cv7VHkZMqMExo28orXW1s4tAoVGViy78RJkJt69XK9PI+gIaOo6/a//8cPlUUHj17/+fY6uwWLFAZNlAMFDS80dZBiIza4eQxZXJv8NoeJEFNUWdl18dsf5OousQ5P1gEDTE6eYFjd4vt7++6xMuQlKHf//9Xs6xWW3F/kaJlaHxTraearLiPp7JPYnvi9vYhNlhW18tKnJtIWnV8gZE7SWacn6tj0cPW1toAASmwxMxQz8JbbYVv5dLNztPQ+Pa/6+pMs69e4NHK3OBxdYdWaoBftbCSsLiwsrtex7o2dH2Km6t19t6np7NZl510ipx5traV6eCU2NSi6eKkA5MiAAAAAXRSTlMAQObYZgAABRJJREFUSMell2dX20gUhiPNaJCEiiVZlnuRe8PGvYGbwDY2hoXQe01CS0/+/o4gm91z9sPK7P2ic1we335fv3nzb5v72wRWn2ff9da7q6tf86dlfd4n2P7x9htr9vvzNlb3DbsuvyQHTgKSxFX28mXRJ7CvBQo+3+aBFgjIiuTKJThFIQOk//yd6BFeBWRtYv1A0pSKN2okQqnd6Eku6lJIWelu68IrgDaPvq6Q2knrotSgOzmXPV51lZIRL6eRb+vir7BnANo87BYpuxuOYnoj44x/enImW0Q0XWqAqiJzedHGzga0eYQDUkqlSzlgR8ge96bsRy6KsifowsWuX5PWRdtMQHbOtydLrWQ25CQIhlJbd61xFFDGCYSpZDZS1eSPojALUBBXScl7kcxRFEPD6b7q9BbCkwlgDAa6I9l0VeNOzcpYBQp6T5ISF0kvoBmKmPJr9/1i7Oui3kYUw1D2u+CjU6pse1irQNaz/VaudrI5gL8ea+pXC4uLV4trC9v65TIyiZHgBkee46AtAgVxneRCSyGKphlwOHe98Muurn37wMBOuztZr6zUfTaLQM92hUxkOxmcPwOusosvtoaN3YIGjV/0ZtNO8oMuWASKm6QyXlqBDM0gAFbv8/k/TMvn7z+oADE0RkaCK6S/7LMI1PcCruRREacLLk8nlAqhGlbDYQjDxHRaNH8HtoIRhcyLFoHlCtlY2sUFhW1e5AcxRMU+Xz70EdUX+Xmxj4moeJR0BbZ0i8Aex92VEpBBjsEDYT8eUH1+7ef3n33H/NBBDAcErhUVKq0E3m5bBK5LXCaBI4Z9Pgbh8iB2fHV2drYTOmg6IDjgl7HvqOCqcf53FoFdycjQuGdQkX8fphlj+fqo0Cjc7LgJAsHiFHuIs2i3a8qpReBqoLC0gcxvjfj9GlTtZ2et3cTNjlOFxRgKmzzKHYxwXM8qkKymoyaQUPd5/vSLM3p7u3O7E8p8qc/zgzYuCo0y6V3rQBwyBZAZ8mGtNs1/q7p2bnZuzp7sd/lJ7MHMIXaeOuGUoUXgR4lzNTLIwF2zDCEIo7Q3tdQo3LrDAEJKf2+OeGrFqVkuyinHRXDbGFSMb4cBiF3/gI3bG/hlcUJBNcZPzEYcm20jWG/s3Etjf+YPR5d8vQi+ff9hR3m+ORrxlwSeyEwnPkNjP49ex4kYgtg/bj5gv4z6/TVuyf7hcXPkMEfSG4z4rY/ey3JomNUEADoAgYpXHxb2oAEIAgCCoQnH83Jo+mZbX25cTQdsD3D34Oo0D8MOdfgZOMwSP2WPKuSW5fX1vGA3gmOcLHP82mqteRne5/tqkR8B5mXBPkmc9QX71wmIQkykDvljfrAM6SF+NmsIV6SGT4Bi7tfZjhS+lw0KGTTVHr13qA4IJ/hpHqnaOJt2S5WyxzbLGe2SWusiGLJjJyFQmWgoVFWfC4LPaPCooGm9Wc7oHMvqW6SWiC89pnDODBTKZVLpDG0gimh1go9VadZDj6WIZ4/UCuPgpxSeGGd87MVyBCBnAUQ/hZyyvP7Mm00s+VZlSVkJoWranYl3VoodL73RSTprXo7EYklgZ5Zzc+Kmn5Q4FC1FqYi36j7KpErxx5Qsv07OPQvO8jmWbv5EjnOHouNWYCXnUmTS/0rB+SyJxfq5H8trReMKflmRT07ISrf5Wklshm3zieXNc5df0UiZUyoH3d72/xHtJlLwiKKtOextbvbqZd889u4//lb8CZ2u3ta/QUPvAAAAAElFTkSuQmCC mediatype: image/png install: spec: deployments: null strategy: "" installModes: - - supported: false + - supported: true type: OwnNamespace - - supported: false + - supported: true type: SingleNamespace - - supported: false + - supported: true type: MultiNamespace - supported: true type: AllNamespaces @@ -67,11 +71,13 @@ spec: - s3 - ceph links: - - name: User Documentation - url: https://docs.snappcloud.io/docs/storage/object-store/ceph-s3-operator - - name: Github Repository - url: https://github.com/snapp-incubator/ceph-s3-operator - maturity: alpha + - name: Documentation + url: https://github.com/snapp-incubator/ceph-s3-operator/wiki + maintainers: + - email: cloud-platform@snapp.cab + name: Snappcloud Platform Tea + maturity: stable + minKubeVersion: 1.23.0 provider: name: Snappcloud url: https://github.com/snapp-incubator diff --git a/config/samples/s3_v1alpha1_s3bucket.yaml b/config/samples/s3_v1alpha1_s3bucket.yaml index 2b4c959..f449745 100644 --- a/config/samples/s3_v1alpha1_s3bucket.yaml +++ b/config/samples/s3_v1alpha1_s3bucket.yaml @@ -1,13 +1,13 @@ apiVersion: s3.snappcloud.io/v1alpha1 kind: S3Bucket metadata: - labels: - app.kubernetes.io/name: s3bucket - app.kubernetes.io/instance: s3bucket-sample - app.kubernetes.io/part-of: ceph-s3-operator - app.kubernetes.io/managed-by: kustomize - app.kubernetes.io/created-by: ceph-s3-operator name: s3bucket-sample + namespace: ceph-s3-operator-test spec: s3UserRef: s3userclaim-sample s3DeletionPolicy: delete + s3SubuserBinding: + - name: subuser1 + access: write + - name: subuser2 + access: read diff --git a/config/samples/s3_v1alpha1_s3user.yaml b/config/samples/s3_v1alpha1_s3user.yaml index b57d8c2..95baaff 100644 --- a/config/samples/s3_v1alpha1_s3user.yaml +++ b/config/samples/s3_v1alpha1_s3user.yaml @@ -1,12 +1,6 @@ apiVersion: s3.snappcloud.io/v1alpha1 kind: S3User metadata: - labels: - app.kubernetes.io/name: s3user - app.kubernetes.io/instance: s3user-sample - app.kubernetes.io/part-of: ceph-s3-operator - app.kubernetes.io/managed-by: kustomize - app.kubernetes.io/created-by: ceph-s3-operator name: s3user-sample spec: # TODO(user): Add fields here diff --git a/config/samples/s3_v1alpha1_s3userclaim.yaml b/config/samples/s3_v1alpha1_s3userclaim.yaml index 7e3e357..ced26f8 100644 --- a/config/samples/s3_v1alpha1_s3userclaim.yaml +++ b/config/samples/s3_v1alpha1_s3userclaim.yaml @@ -11,3 +11,6 @@ spec: maxSize: 1000 maxObjects: 1000 maxBuckets: 5 + subusers: + - subuser1 + - subuser2 \ No newline at end of file