diff --git a/.github/workflows/build-release.yaml b/.github/workflows/build-release.yaml index fbea75f..25e6c59 100644 --- a/.github/workflows/build-release.yaml +++ b/.github/workflows/build-release.yaml @@ -58,10 +58,10 @@ jobs: - name: Chart | Push uses: appany/helm-oci-chart-releaser@v0.3.0 with: - name: s3-operator + name: ceph-s3-operator repository: ${{ github.repository }}/helm-charts tag: ${{ github.ref_name }} - path: charts/s3-operator # Default charts/{name} + path: charts/ceph-s3-operator # Default charts/{name} registry: ghcr.io registry_username: ${{ github.repository_owner }} registry_password: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/checks.yaml b/.github/workflows/checks.yaml index 87cfb48..f063a39 100644 --- a/.github/workflows/checks.yaml +++ b/.github/workflows/checks.yaml @@ -41,4 +41,4 @@ jobs: curl -L https://github.com/kudobuilder/kuttl/releases/download/v0.15.0/kubectl-kuttl_0.15.0_linux_x86_64 -o /usr/local/bin/kubectl-kuttl chmod +x /usr/local/bin/kubectl-kuttl - name: Run e2e test - run: make e2e-test IMG=s3-operator:latest + run: make e2e-test IMG=ceph-s3-operator:latest diff --git a/.golangci.yml b/.golangci.yml index 82b098a..457a745 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -9,4 +9,4 @@ linters: - goimports linters-settings: goimports: - local-prefixes: github.com/snapp-incubator/s3-operator + local-prefixes: github.com/snapp-incubator/ceph-s3-operator diff --git a/Makefile b/Makefile index 259b59b..06b74f3 100644 --- a/Makefile +++ b/Makefile @@ -28,8 +28,8 @@ BUNDLE_METADATA_OPTS ?= $(BUNDLE_CHANNELS) $(BUNDLE_DEFAULT_CHANNEL) # This variable is used to construct full image tags for bundle and catalog images. # # For example, running 'make bundle-build bundle-push catalog-build catalog-push' will build and push both -# snappcloud.io/s3-operator-bundle:$VERSION and snappcloud.io/s3-operator-catalog:$VERSION. -IMAGE_TAG_BASE ?= snappcloud.io/s3-operator +# snappcloud.io/ceph-s3-operator-bundle:$VERSION and snappcloud.io/ceph-s3-operator-catalog:$VERSION. +IMAGE_TAG_BASE ?= snappcloud.io/ceph-s3-operator # BUNDLE_IMG defines the image:tag used for the bundle. # You can use it as an arg. (E.g make bundle-build BUNDLE_IMG=/:) @@ -118,7 +118,7 @@ e2e-test: docker-build # Run e2e tests .PHONY: e2e-test-local e2e-test-local: docker-build # Run e2e tests for local development purposes kind load docker-image $(IMG) - kubectl delete pod -n s3-operator-system -l control-plane=controller-manager + kubectl delete pod -n ceph-s3-operator-system -l control-plane=controller-manager kubectl kuttl test --start-kind=false ##@ Build @@ -180,7 +180,7 @@ uninstall: manifests kustomize ## Uninstall CRDs from the K8s cluster specified .PHONY: deploy deploy: manifests kustomize ## Deploy controller to the K8s cluster specified in ~/.kube/config. - cd config/manager && $(KUSTOMIZE) edit set image ghcr.io/snapp-incubator/s3-operator=${IMG} + cd config/manager && $(KUSTOMIZE) edit set image ghcr.io/snapp-incubator/ceph-s3-operator=${IMG} $(KUSTOMIZE) build config/default | kubectl apply -f - .PHONY: undeploy @@ -189,7 +189,7 @@ undeploy: ## Undeploy controller from the K8s cluster specified in ~/.kube/confi .PHONY: deploy-for-e2e-test deploy-for-e2e-test: manifests kustomize ## Deploy controller to the K8s cluster specified in ~/.kube/config customized for e2e tests. - cd config/manager && $(KUSTOMIZE) edit set image ghcr.io/snapp-incubator/s3-operator=${IMG} + cd config/manager && $(KUSTOMIZE) edit set image ghcr.io/snapp-incubator/ceph-s3-operator=${IMG} $(KUSTOMIZE) build config/test | kubectl apply -f - ##@ Build Dependencies @@ -232,7 +232,7 @@ $(ENVTEST): $(LOCALBIN) .PHONY: bundle bundle: manifests kustomize ## Generate bundle manifests and metadata, then validate generated files. operator-sdk generate kustomize manifests -q - cd config/manager && $(KUSTOMIZE) edit set image ghcr.io/snapp-incubator/s3-operator=$(IMG) + cd config/manager && $(KUSTOMIZE) edit set image ghcr.io/snapp-incubator/ceph-s3-operator=$(IMG) $(KUSTOMIZE) build config/manifests | operator-sdk generate bundle $(BUNDLE_GEN_FLAGS) operator-sdk bundle validate ./bundle @@ -324,4 +324,4 @@ $(HELMIFY): $(LOCALBIN) test -s $(LOCALBIN)/helmify || GOBIN=$(LOCALBIN) go install github.com/arttor/helmify/cmd/helmify@v0.4.5 helm: manifests kustomize helmify - $(KUSTOMIZE) build config/default | $(HELMIFY) deploy/charts/s3-operator + $(KUSTOMIZE) build config/default | $(HELMIFY) charts/ceph-s3-operator diff --git a/PROJECT b/PROJECT index 38edb4e..81fba87 100644 --- a/PROJECT +++ b/PROJECT @@ -8,8 +8,8 @@ layout: plugins: manifests.sdk.operatorframework.io/v2: {} scorecard.sdk.operatorframework.io/v2: {} -projectName: s3-operator -repo: github.com/snapp-incubator/s3-operator +projectName: ceph-s3-operator +repo: github.com/snapp-incubator/ceph-s3-operator resources: - api: crdVersion: v1 @@ -18,7 +18,7 @@ resources: domain: snappcloud.io group: s3 kind: S3UserClaim - path: github.com/snapp-incubator/s3-operator/api/v1alpha1 + path: github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1 version: v1alpha1 webhooks: validation: true @@ -29,7 +29,7 @@ resources: domain: snappcloud.io group: s3 kind: S3User - path: github.com/snapp-incubator/s3-operator/api/v1alpha1 + path: github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1 version: v1alpha1 - api: crdVersion: v1 @@ -38,7 +38,7 @@ resources: domain: snappcloud.io group: s3 kind: S3Bucket - path: github.com/snapp-incubator/s3-operator/api/v1alpha1 + path: github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1 version: v1alpha1 webhooks: validation: true diff --git a/README.md b/README.md index 9e93e67..10ce027 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ -# S3 Operator +# Ceph S3 Operator -![License](https://img.shields.io/github/license/snapp-incubator/s3-operator) -![Test](https://github.com/snapp-incubator/s3-operator/actions/workflows/checks.yaml/badge.svg?branch=main) -![Release](https://github.com/snapp-incubator/s3-operator/actions/workflows/build-release.yaml/badge.svg) -![Tag](https://img.shields.io/github/v/tag/snapp-incubator/s3-operator?&logo=git) +![License](https://img.shields.io/github/license/snapp-incubator/ceph-s3-operator) +![Test](https://github.com/snapp-incubator/ceph-s3-operator/actions/workflows/checks.yaml/badge.svg?branch=main) +![Release](https://github.com/snapp-incubator/ceph-s3-operator/actions/workflows/build-release.yaml/badge.svg) +![Tag](https://img.shields.io/github/v/tag/snapp-incubator/ceph-s3-operator?&logo=git) ## Introduction -The 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. +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 @@ -35,7 +35,7 @@ make deploy Deploy using Helm (version 3.8.0 or later), which supports OCI charts. To use the helm chart, edit the `values.yaml` file and set `controllerManagerConfig.configYaml` to your Ceph cluster configuration like [secret.yaml](config/manager/secret.yaml). ```bash -helm upgrade --install s3-operator oci://ghcr.io/snapp-incubator/s3-operator/helm-charts/s3-operator --version v0.3.5 +helm upgrade --install ceph-s3-operator oci://ghcr.io/snapp-incubator/ceph-s3-operator/helm-charts/ceph-s3-operator --version v0.3.5 ``` ### Using OLM @@ -44,19 +44,19 @@ All the operator releases are bundled and pushed to the [Snappcloud hub](https:/ 1. Install [snappcloud hub catalog-source](https://github.com/snapp-incubator/snappcloud-hub/blob/main/catalog-source.yml) -2. Override the `s3-operator-controller-manager-config-override` with your operator configuration. +2. Override the `ceph-s3-operator-controller-manager-config-override` with your operator configuration. 3. Apply the subscription manifest as shown below: ```yaml apiVersion: operators.coreos.com/v1alpha1 kind: Subscription metadata: - name: s3-operator + name: ceph-s3-operator namespace: operators spec: channel: stable-v0 installPlanApproval: Automatic - name: s3-operator + name: ceph-s3-operator source: snappcloud-hub-catalog sourceNamespace: openshift-marketplace config: @@ -73,16 +73,16 @@ All the operator releases are bundled and pushed to the [Snappcloud hub](https:/ items: - key: config.yaml path: config.yaml - secretName: s3-operator-controller-manager-config-override + secretName: ceph-s3-operator-controller-manager-config-override volumeMounts: - - mountPath: /s3-operator/config/ + - mountPath: /ceph-s3-operator/config/ name: config ``` ## Usage and Documentation - CRD Examples: Located in the [samples](config/samples) folder. -- Detailed Documentation: Available on the [wiki](https://github.com/snapp-incubator/s3-operator/wiki). +- Detailed Documentation: Available on the [wiki](https://github.com/snapp-incubator/ceph-s3-operator/wiki). - Design and Decision Insights: Refer to our [design doc](docs/DESIGN.md) for an in-depth understanding. ## Versioning and Release @@ -114,7 +114,7 @@ the chart run: make helm ``` -The chart will be created/updated in `charts/s3-operator` path +The chart will be created/updated in `charts/ceph-s3-operator` path ### Run locally @@ -159,4 +159,4 @@ Contributions are warmly welcomed. Feel free to submit issues or pull requests. ## License -This project is licensed under the [Apache License 2.0](https://github.com/snapp-incubator/s3-operator/blob/main/LICENSE). +This project is licensed under the [Apache License 2.0](https://github.com/snapp-incubator/ceph-s3-operator/blob/main/LICENSE). diff --git a/api/v1alpha1/quota_handler.go b/api/v1alpha1/quota_handler.go index 9d5defe..30a10c8 100644 --- a/api/v1alpha1/quota_handler.go +++ b/api/v1alpha1/quota_handler.go @@ -8,7 +8,7 @@ import ( "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" - "github.com/snapp-incubator/s3-operator/pkg/consts" + "github.com/snapp-incubator/ceph-s3-operator/pkg/consts" ) func CalculateNamespaceUsedQuota(ctx context.Context, uncachedReader client.Reader, diff --git a/api/v1alpha1/s3bucket_webhook.go b/api/v1alpha1/s3bucket_webhook.go index 5166b73..000d402 100644 --- a/api/v1alpha1/s3bucket_webhook.go +++ b/api/v1alpha1/s3bucket_webhook.go @@ -28,7 +28,7 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook" - "github.com/snapp-incubator/s3-operator/pkg/consts" + "github.com/snapp-incubator/ceph-s3-operator/pkg/consts" ) // log is for logging in this package. diff --git a/api/v1alpha1/s3userclaim_webhook.go b/api/v1alpha1/s3userclaim_webhook.go index e7d6258..4fc9768 100644 --- a/api/v1alpha1/s3userclaim_webhook.go +++ b/api/v1alpha1/s3userclaim_webhook.go @@ -33,7 +33,7 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/webhook" - "github.com/snapp-incubator/s3-operator/pkg/consts" + "github.com/snapp-incubator/ceph-s3-operator/pkg/consts" ) const ( diff --git a/api/v1alpha1/s3userclaim_webhook_test.go b/api/v1alpha1/s3userclaim_webhook_test.go index 268e795..8b372ae 100644 --- a/api/v1alpha1/s3userclaim_webhook_test.go +++ b/api/v1alpha1/s3userclaim_webhook_test.go @@ -14,7 +14,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "github.com/snapp-incubator/s3-operator/pkg/consts" + "github.com/snapp-incubator/ceph-s3-operator/pkg/consts" ) var _ = Describe("", Ordered, ContinueOnFailure, func() { diff --git a/api/v1alpha1/webhook_suite_test.go b/api/v1alpha1/webhook_suite_test.go index 410ea2f..40e3fe7 100644 --- a/api/v1alpha1/webhook_suite_test.go +++ b/api/v1alpha1/webhook_suite_test.go @@ -40,7 +40,7 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - "github.com/snapp-incubator/s3-operator/internal/config" + "github.com/snapp-incubator/ceph-s3-operator/internal/config" ) // These tests use Ginkgo (BDD-style Go testing framework). Refer to diff --git a/bundle.Dockerfile b/bundle.Dockerfile index b0c2064..678d636 100644 --- a/bundle.Dockerfile +++ b/bundle.Dockerfile @@ -4,7 +4,7 @@ FROM scratch LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1 LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/ LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/ -LABEL operators.operatorframework.io.bundle.package.v1=s3-operator +LABEL operators.operatorframework.io.bundle.package.v1=ceph-s3-operator LABEL operators.operatorframework.io.bundle.channels.v1=alpha LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.31.0 LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1 diff --git a/charts/s3-operator/.helmignore b/charts/ceph-s3-operator/.helmignore similarity index 100% rename from charts/s3-operator/.helmignore rename to charts/ceph-s3-operator/.helmignore diff --git a/charts/s3-operator/Chart.yaml b/charts/ceph-s3-operator/Chart.yaml similarity index 94% rename from charts/s3-operator/Chart.yaml rename to charts/ceph-s3-operator/Chart.yaml index dd2caa0..cce82cc 100644 --- a/charts/s3-operator/Chart.yaml +++ b/charts/ceph-s3-operator/Chart.yaml @@ -1,5 +1,5 @@ apiVersion: v2 -name: s3-operator +name: ceph-s3-operator description: A Helm chart for Kubernetes # A chart can be either an 'application' or a 'library' chart. # @@ -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.3.0 +version: 0.1.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: "v0.3.4" +appVersion: "0.1.0" diff --git a/charts/s3-operator/templates/_helpers.tpl b/charts/ceph-s3-operator/templates/_helpers.tpl similarity index 72% rename from charts/s3-operator/templates/_helpers.tpl rename to charts/ceph-s3-operator/templates/_helpers.tpl index c9ba877..063b6e6 100644 --- a/charts/s3-operator/templates/_helpers.tpl +++ b/charts/ceph-s3-operator/templates/_helpers.tpl @@ -1,7 +1,7 @@ {{/* Expand the name of the chart. */}} -{{- define "s3-operator.name" -}} +{{- define "ceph-s3-operator.name" -}} {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} {{- end }} @@ -10,7 +10,7 @@ Create a default fully qualified app name. We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). If release name contains chart name it will be used as a full name. */}} -{{- define "s3-operator.fullname" -}} +{{- define "ceph-s3-operator.fullname" -}} {{- if .Values.fullnameOverride }} {{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} {{- else }} @@ -26,16 +26,16 @@ If release name contains chart name it will be used as a full name. {{/* Create chart name and version as used by the chart label. */}} -{{- define "s3-operator.chart" -}} +{{- define "ceph-s3-operator.chart" -}} {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} {{- end }} {{/* Common labels */}} -{{- define "s3-operator.labels" -}} -helm.sh/chart: {{ include "s3-operator.chart" . }} -{{ include "s3-operator.selectorLabels" . }} +{{- define "ceph-s3-operator.labels" -}} +helm.sh/chart: {{ include "ceph-s3-operator.chart" . }} +{{ include "ceph-s3-operator.selectorLabels" . }} {{- if .Chart.AppVersion }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} {{- end }} @@ -45,17 +45,17 @@ app.kubernetes.io/managed-by: {{ .Release.Service }} {{/* Selector labels */}} -{{- define "s3-operator.selectorLabels" -}} -app.kubernetes.io/name: {{ include "s3-operator.name" . }} +{{- define "ceph-s3-operator.selectorLabels" -}} +app.kubernetes.io/name: {{ include "ceph-s3-operator.name" . }} app.kubernetes.io/instance: {{ .Release.Name }} {{- end }} {{/* Create the name of the service account to use */}} -{{- define "s3-operator.serviceAccountName" -}} +{{- define "ceph-s3-operator.serviceAccountName" -}} {{- if .Values.serviceAccount.create }} -{{- default (include "s3-operator.fullname" .) .Values.serviceAccount.name }} +{{- default (include "ceph-s3-operator.fullname" .) .Values.serviceAccount.name }} {{- else }} {{- default "default" .Values.serviceAccount.name }} {{- end }} diff --git a/charts/ceph-s3-operator/templates/clusterresourcequota-updater-binding-rbac.yaml b/charts/ceph-s3-operator/templates/clusterresourcequota-updater-binding-rbac.yaml new file mode 100644 index 0000000..816f528 --- /dev/null +++ b/charts/ceph-s3-operator/templates/clusterresourcequota-updater-binding-rbac.yaml @@ -0,0 +1,14 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ include "ceph-s3-operator.fullname" . }}-clusterresourcequota-updater-binding + labels: + {{- include "ceph-s3-operator.labels" . | nindent 4 }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: '{{ include "ceph-s3-operator.fullname" . }}-clusterresourcequota-updater' +subjects: +- kind: ServiceAccount + name: '{{ include "ceph-s3-operator.fullname" . }}-controller-manager' + namespace: '{{ .Release.Namespace }}' \ No newline at end of file diff --git a/charts/s3-operator/templates/clusterresourcequota-updater-rbac.yaml b/charts/ceph-s3-operator/templates/clusterresourcequota-updater-rbac.yaml similarity index 58% rename from charts/s3-operator/templates/clusterresourcequota-updater-rbac.yaml rename to charts/ceph-s3-operator/templates/clusterresourcequota-updater-rbac.yaml index 12ab4cf..76d6755 100644 --- a/charts/s3-operator/templates/clusterresourcequota-updater-rbac.yaml +++ b/charts/ceph-s3-operator/templates/clusterresourcequota-updater-rbac.yaml @@ -1,9 +1,9 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - name: {{ include "s3-operator.fullname" . }}-clusterresourcequota-updater + name: {{ include "ceph-s3-operator.fullname" . }}-clusterresourcequota-updater labels: - {{- include "s3-operator.labels" . | nindent 4 }} + {{- include "ceph-s3-operator.labels" . | nindent 4 }} rules: - apiGroups: - quota.openshift.io diff --git a/charts/s3-operator/templates/controller-manager-config.yaml b/charts/ceph-s3-operator/templates/controller-manager-config.yaml similarity index 58% rename from charts/s3-operator/templates/controller-manager-config.yaml rename to charts/ceph-s3-operator/templates/controller-manager-config.yaml index d3e7ff1..220d4fd 100644 --- a/charts/s3-operator/templates/controller-manager-config.yaml +++ b/charts/ceph-s3-operator/templates/controller-manager-config.yaml @@ -1,9 +1,9 @@ apiVersion: v1 kind: Secret metadata: - name: {{ include "s3-operator.fullname" . }}-controller-manager-config + name: {{ include "ceph-s3-operator.fullname" . }}-controller-manager-config labels: - {{- include "s3-operator.labels" . | nindent 4 }} + {{- include "ceph-s3-operator.labels" . | nindent 4 }} stringData: config.yaml: {{ required "controllerManagerConfig.configYaml is required" .Values.controllerManagerConfig.configYaml | quote }} \ No newline at end of file diff --git a/charts/s3-operator/templates/deployment.yaml b/charts/ceph-s3-operator/templates/deployment.yaml similarity index 84% rename from charts/s3-operator/templates/deployment.yaml rename to charts/ceph-s3-operator/templates/deployment.yaml index 4768e57..7b87472 100644 --- a/charts/s3-operator/templates/deployment.yaml +++ b/charts/ceph-s3-operator/templates/deployment.yaml @@ -1,24 +1,24 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: {{ include "s3-operator.fullname" . }}-controller-manager + name: {{ include "ceph-s3-operator.fullname" . }}-controller-manager labels: app.kubernetes.io/component: manager - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator control-plane: controller-manager - {{- include "s3-operator.labels" . | nindent 4 }} + {{- include "ceph-s3-operator.labels" . | nindent 4 }} spec: replicas: {{ .Values.controllerManager.replicas }} selector: matchLabels: control-plane: controller-manager - {{- include "s3-operator.selectorLabels" . | nindent 6 }} + {{- include "ceph-s3-operator.selectorLabels" . | nindent 6 }} template: metadata: labels: control-plane: controller-manager - {{- include "s3-operator.selectorLabels" . | nindent 8 }} + {{- include "ceph-s3-operator.selectorLabels" . | nindent 8 }} annotations: kubectl.kubernetes.io/default-container: manager spec: @@ -87,11 +87,11 @@ spec: - mountPath: /tmp/k8s-webhook-server/serving-certs name: cert readOnly: true - - mountPath: /s3-operator/config/ + - mountPath: /ceph-s3-operator/config/ name: config securityContext: runAsNonRoot: true - serviceAccountName: {{ include "s3-operator.fullname" . }}-controller-manager + serviceAccountName: {{ include "ceph-s3-operator.fullname" . }}-controller-manager terminationGracePeriodSeconds: 10 volumes: - name: cert @@ -103,4 +103,4 @@ spec: items: - key: config.yaml path: config.yaml - secretName: {{ include "s3-operator.fullname" . }}-controller-manager-config \ No newline at end of file + secretName: {{ include "ceph-s3-operator.fullname" . }}-controller-manager-config \ No newline at end of file diff --git a/charts/s3-operator/templates/leader-election-rbac.yaml b/charts/ceph-s3-operator/templates/leader-election-rbac.yaml similarity index 53% rename from charts/s3-operator/templates/leader-election-rbac.yaml rename to charts/ceph-s3-operator/templates/leader-election-rbac.yaml index de821b6..e6b31b0 100644 --- a/charts/s3-operator/templates/leader-election-rbac.yaml +++ b/charts/ceph-s3-operator/templates/leader-election-rbac.yaml @@ -1,12 +1,12 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: - name: {{ include "s3-operator.fullname" . }}-leader-election-role + name: {{ include "ceph-s3-operator.fullname" . }}-leader-election-role labels: app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator - {{- include "s3-operator.labels" . | nindent 4 }} + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator + {{- include "ceph-s3-operator.labels" . | nindent 4 }} rules: - apiGroups: - "" @@ -43,17 +43,17 @@ rules: apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: - name: {{ include "s3-operator.fullname" . }}-leader-election-rolebinding + name: {{ include "ceph-s3-operator.fullname" . }}-leader-election-rolebinding labels: app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator - {{- include "s3-operator.labels" . | nindent 4 }} + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator + {{- include "ceph-s3-operator.labels" . | nindent 4 }} roleRef: apiGroup: rbac.authorization.k8s.io kind: Role - name: '{{ include "s3-operator.fullname" . }}-leader-election-role' + name: '{{ include "ceph-s3-operator.fullname" . }}-leader-election-role' subjects: - kind: ServiceAccount - name: '{{ include "s3-operator.fullname" . }}-controller-manager' + name: '{{ include "ceph-s3-operator.fullname" . }}-controller-manager' namespace: '{{ .Release.Namespace }}' \ No newline at end of file diff --git a/charts/s3-operator/templates/manager-rbac.yaml b/charts/ceph-s3-operator/templates/manager-rbac.yaml similarity index 79% rename from charts/s3-operator/templates/manager-rbac.yaml rename to charts/ceph-s3-operator/templates/manager-rbac.yaml index 6ca8e3b..a1100f3 100644 --- a/charts/s3-operator/templates/manager-rbac.yaml +++ b/charts/ceph-s3-operator/templates/manager-rbac.yaml @@ -1,9 +1,9 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - name: {{ include "s3-operator.fullname" . }}-manager-role + name: {{ include "ceph-s3-operator.fullname" . }}-manager-role labels: - {{- include "s3-operator.labels" . | nindent 4 }} + {{- include "ceph-s3-operator.labels" . | nindent 4 }} rules: - apiGroups: - "" @@ -131,17 +131,17 @@ rules: apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: - name: {{ include "s3-operator.fullname" . }}-manager-rolebinding + name: {{ include "ceph-s3-operator.fullname" . }}-manager-rolebinding labels: app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator - {{- include "s3-operator.labels" . | nindent 4 }} + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator + {{- include "ceph-s3-operator.labels" . | nindent 4 }} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole - name: '{{ include "s3-operator.fullname" . }}-manager-role' + name: '{{ include "ceph-s3-operator.fullname" . }}-manager-role' subjects: - kind: ServiceAccount - name: '{{ include "s3-operator.fullname" . }}-controller-manager' + name: '{{ include "ceph-s3-operator.fullname" . }}-controller-manager' namespace: '{{ .Release.Namespace }}' \ No newline at end of file diff --git a/charts/ceph-s3-operator/templates/metrics-reader-rbac.yaml b/charts/ceph-s3-operator/templates/metrics-reader-rbac.yaml new file mode 100644 index 0000000..fff0a92 --- /dev/null +++ b/charts/ceph-s3-operator/templates/metrics-reader-rbac.yaml @@ -0,0 +1,14 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: {{ include "ceph-s3-operator.fullname" . }}-metrics-reader + labels: + app.kubernetes.io/component: kube-rbac-proxy + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator + {{- include "ceph-s3-operator.labels" . | nindent 4 }} +rules: +- nonResourceURLs: + - /metrics + verbs: + - get \ No newline at end of file diff --git a/charts/ceph-s3-operator/templates/metrics-service.yaml b/charts/ceph-s3-operator/templates/metrics-service.yaml new file mode 100644 index 0000000..bb4203d --- /dev/null +++ b/charts/ceph-s3-operator/templates/metrics-service.yaml @@ -0,0 +1,17 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "ceph-s3-operator.fullname" . }}-controller-manager-metrics-service + labels: + app.kubernetes.io/component: kube-rbac-proxy + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator + control-plane: controller-manager + {{- include "ceph-s3-operator.labels" . | nindent 4 }} +spec: + type: {{ .Values.metricsService.type }} + selector: + control-plane: controller-manager + {{- include "ceph-s3-operator.selectorLabels" . | nindent 4 }} + ports: + {{- .Values.metricsService.ports | toYaml | nindent 2 -}} \ No newline at end of file diff --git a/charts/s3-operator/templates/proxy-rbac.yaml b/charts/ceph-s3-operator/templates/proxy-rbac.yaml similarity index 50% rename from charts/s3-operator/templates/proxy-rbac.yaml rename to charts/ceph-s3-operator/templates/proxy-rbac.yaml index 8e8dae7..352344d 100644 --- a/charts/s3-operator/templates/proxy-rbac.yaml +++ b/charts/ceph-s3-operator/templates/proxy-rbac.yaml @@ -1,12 +1,12 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - name: {{ include "s3-operator.fullname" . }}-proxy-role + name: {{ include "ceph-s3-operator.fullname" . }}-proxy-role labels: app.kubernetes.io/component: kube-rbac-proxy - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator - {{- include "s3-operator.labels" . | nindent 4 }} + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator + {{- include "ceph-s3-operator.labels" . | nindent 4 }} rules: - apiGroups: - authentication.k8s.io @@ -24,17 +24,17 @@ rules: apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: - name: {{ include "s3-operator.fullname" . }}-proxy-rolebinding + name: {{ include "ceph-s3-operator.fullname" . }}-proxy-rolebinding labels: app.kubernetes.io/component: kube-rbac-proxy - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator - {{- include "s3-operator.labels" . | nindent 4 }} + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator + {{- include "ceph-s3-operator.labels" . | nindent 4 }} roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole - name: '{{ include "s3-operator.fullname" . }}-proxy-role' + name: '{{ include "ceph-s3-operator.fullname" . }}-proxy-role' subjects: - kind: ServiceAccount - name: '{{ include "s3-operator.fullname" . }}-controller-manager' + name: '{{ include "ceph-s3-operator.fullname" . }}-controller-manager' namespace: '{{ .Release.Namespace }}' \ No newline at end of file diff --git a/charts/ceph-s3-operator/templates/resourcequota-status-updater-binding-rbac.yaml b/charts/ceph-s3-operator/templates/resourcequota-status-updater-binding-rbac.yaml new file mode 100644 index 0000000..821cc5c --- /dev/null +++ b/charts/ceph-s3-operator/templates/resourcequota-status-updater-binding-rbac.yaml @@ -0,0 +1,14 @@ +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: {{ include "ceph-s3-operator.fullname" . }}-resourcequota-status-updater-binding + labels: + {{- include "ceph-s3-operator.labels" . | nindent 4 }} +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: '{{ include "ceph-s3-operator.fullname" . }}-resourcequota-status-updater' +subjects: +- kind: ServiceAccount + name: '{{ include "ceph-s3-operator.fullname" . }}-controller-manager' + namespace: '{{ .Release.Namespace }}' \ No newline at end of file diff --git a/charts/s3-operator/templates/resourcequota-status-updater-rbac.yaml b/charts/ceph-s3-operator/templates/resourcequota-status-updater-rbac.yaml similarity index 55% rename from charts/s3-operator/templates/resourcequota-status-updater-rbac.yaml rename to charts/ceph-s3-operator/templates/resourcequota-status-updater-rbac.yaml index 38e4393..5e399b6 100644 --- a/charts/s3-operator/templates/resourcequota-status-updater-rbac.yaml +++ b/charts/ceph-s3-operator/templates/resourcequota-status-updater-rbac.yaml @@ -1,9 +1,9 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - name: {{ include "s3-operator.fullname" . }}-resourcequota-status-updater + name: {{ include "ceph-s3-operator.fullname" . }}-resourcequota-status-updater labels: - {{- include "s3-operator.labels" . | nindent 4 }} + {{- include "ceph-s3-operator.labels" . | nindent 4 }} rules: - apiGroups: - "" diff --git a/charts/s3-operator/templates/s3bucket-crd.yaml b/charts/ceph-s3-operator/templates/s3bucket-crd.yaml similarity index 98% rename from charts/s3-operator/templates/s3bucket-crd.yaml rename to charts/ceph-s3-operator/templates/s3bucket-crd.yaml index c28f238..a0ec009 100644 --- a/charts/s3-operator/templates/s3bucket-crd.yaml +++ b/charts/ceph-s3-operator/templates/s3bucket-crd.yaml @@ -5,7 +5,7 @@ metadata: annotations: controller-gen.kubebuilder.io/version: v0.11.1 labels: - {{- include "s3-operator.labels" . | nindent 4 }} + {{- include "ceph-s3-operator.labels" . | nindent 4 }} spec: group: s3.snappcloud.io names: diff --git a/charts/s3-operator/templates/s3user-crd.yaml b/charts/ceph-s3-operator/templates/s3user-crd.yaml similarity index 99% rename from charts/s3-operator/templates/s3user-crd.yaml rename to charts/ceph-s3-operator/templates/s3user-crd.yaml index 754b545..b697af9 100644 --- a/charts/s3-operator/templates/s3user-crd.yaml +++ b/charts/ceph-s3-operator/templates/s3user-crd.yaml @@ -5,7 +5,7 @@ metadata: annotations: controller-gen.kubebuilder.io/version: v0.11.1 labels: - {{- include "s3-operator.labels" . | nindent 4 }} + {{- include "ceph-s3-operator.labels" . | nindent 4 }} spec: group: s3.snappcloud.io names: diff --git a/charts/s3-operator/templates/s3userclaim-crd.yaml b/charts/ceph-s3-operator/templates/s3userclaim-crd.yaml similarity index 98% rename from charts/s3-operator/templates/s3userclaim-crd.yaml rename to charts/ceph-s3-operator/templates/s3userclaim-crd.yaml index cb5e2b4..7b6dc3a 100644 --- a/charts/s3-operator/templates/s3userclaim-crd.yaml +++ b/charts/ceph-s3-operator/templates/s3userclaim-crd.yaml @@ -5,7 +5,7 @@ metadata: annotations: controller-gen.kubebuilder.io/version: v0.11.1 labels: - {{- include "s3-operator.labels" . | nindent 4 }} + {{- include "ceph-s3-operator.labels" . | nindent 4 }} spec: group: s3.snappcloud.io names: diff --git a/charts/ceph-s3-operator/templates/selfsigned-issuer.yaml b/charts/ceph-s3-operator/templates/selfsigned-issuer.yaml new file mode 100644 index 0000000..177873c --- /dev/null +++ b/charts/ceph-s3-operator/templates/selfsigned-issuer.yaml @@ -0,0 +1,8 @@ +apiVersion: cert-manager.io/v1 +kind: Issuer +metadata: + name: {{ include "ceph-s3-operator.fullname" . }}-selfsigned-issuer + labels: + {{- include "ceph-s3-operator.labels" . | nindent 4 }} +spec: + selfSigned: {} \ No newline at end of file diff --git a/charts/ceph-s3-operator/templates/serviceaccount.yaml b/charts/ceph-s3-operator/templates/serviceaccount.yaml new file mode 100644 index 0000000..510e8c5 --- /dev/null +++ b/charts/ceph-s3-operator/templates/serviceaccount.yaml @@ -0,0 +1,11 @@ +apiVersion: v1 +kind: ServiceAccount +metadata: + name: {{ include "ceph-s3-operator.fullname" . }}-controller-manager + labels: + app.kubernetes.io/component: rbac + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator + {{- include "ceph-s3-operator.labels" . | nindent 4 }} + annotations: + {{- toYaml .Values.controllerManager.serviceAccount.annotations | nindent 4 }} \ No newline at end of file diff --git a/charts/ceph-s3-operator/templates/serving-cert.yaml b/charts/ceph-s3-operator/templates/serving-cert.yaml new file mode 100644 index 0000000..d06e1eb --- /dev/null +++ b/charts/ceph-s3-operator/templates/serving-cert.yaml @@ -0,0 +1,16 @@ +apiVersion: cert-manager.io/v1 +kind: Certificate +metadata: + name: {{ include "ceph-s3-operator.fullname" . }}-serving-cert + labels: + {{- include "ceph-s3-operator.labels" . | nindent 4 }} +spec: + dnsNames: + - '{{ include "ceph-s3-operator.fullname" . }}-webhook-service.{{ .Release.Namespace + }}.svc' + - '{{ include "ceph-s3-operator.fullname" . }}-webhook-service.{{ .Release.Namespace + }}.svc.{{ .Values.kubernetesClusterDomain }}' + issuerRef: + kind: Issuer + name: '{{ include "ceph-s3-operator.fullname" . }}-selfsigned-issuer' + secretName: webhook-server-cert \ No newline at end of file diff --git a/charts/s3-operator/templates/validating-webhook-configuration.yaml b/charts/ceph-s3-operator/templates/validating-webhook-configuration.yaml similarity index 73% rename from charts/s3-operator/templates/validating-webhook-configuration.yaml rename to charts/ceph-s3-operator/templates/validating-webhook-configuration.yaml index 40151ff..841a51a 100644 --- a/charts/s3-operator/templates/validating-webhook-configuration.yaml +++ b/charts/ceph-s3-operator/templates/validating-webhook-configuration.yaml @@ -1,17 +1,17 @@ apiVersion: admissionregistration.k8s.io/v1 kind: ValidatingWebhookConfiguration metadata: - name: {{ include "s3-operator.fullname" . }}-validating-webhook-configuration + name: {{ include "ceph-s3-operator.fullname" . }}-validating-webhook-configuration annotations: - cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ include "s3-operator.fullname" . }}-serving-cert + cert-manager.io/inject-ca-from: {{ .Release.Namespace }}/{{ include "ceph-s3-operator.fullname" . }}-serving-cert labels: - {{- include "s3-operator.labels" . | nindent 4 }} + {{- include "ceph-s3-operator.labels" . | nindent 4 }} webhooks: - admissionReviewVersions: - v1 clientConfig: service: - name: '{{ include "s3-operator.fullname" . }}-webhook-service' + name: '{{ include "ceph-s3-operator.fullname" . }}-webhook-service' namespace: '{{ .Release.Namespace }}' path: /validate-s3-snappcloud-io-v1alpha1-s3bucket failurePolicy: Fail @@ -31,7 +31,7 @@ webhooks: - v1 clientConfig: service: - name: '{{ include "s3-operator.fullname" . }}-webhook-service' + name: '{{ include "ceph-s3-operator.fullname" . }}-webhook-service' namespace: '{{ .Release.Namespace }}' path: /validate-s3-snappcloud-io-v1alpha1-s3userclaim failurePolicy: Fail diff --git a/charts/ceph-s3-operator/templates/webhook-service.yaml b/charts/ceph-s3-operator/templates/webhook-service.yaml new file mode 100644 index 0000000..ea843be --- /dev/null +++ b/charts/ceph-s3-operator/templates/webhook-service.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ include "ceph-s3-operator.fullname" . }}-webhook-service + labels: + app.kubernetes.io/component: webhook + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator + {{- include "ceph-s3-operator.labels" . | nindent 4 }} +spec: + type: {{ .Values.webhookService.type }} + selector: + control-plane: controller-manager + {{- include "ceph-s3-operator.selectorLabels" . | nindent 4 }} + ports: + {{- .Values.webhookService.ports | toYaml | nindent 2 -}} \ No newline at end of file diff --git a/charts/s3-operator/values.yaml b/charts/ceph-s3-operator/values.yaml similarity index 91% rename from charts/s3-operator/values.yaml rename to charts/ceph-s3-operator/values.yaml index fbaf3c3..9ca6b08 100644 --- a/charts/s3-operator/values.yaml +++ b/charts/ceph-s3-operator/values.yaml @@ -22,7 +22,7 @@ controllerManager: memory: 64Mi manager: args: - - --config=/s3-operator/config/config.yaml + - --config=/ceph-s3-operator/config/config.yaml - --health-probe-bind-address=:8081 - --metrics-bind-address=127.0.0.1:8080 - --leader-elect @@ -32,7 +32,7 @@ controllerManager: drop: - ALL image: - repository: ghcr.io/snapp-incubator/s3-operator + repository: ghcr.io/snapp-incubator/ceph-s3-operator tag: latest resources: limits: diff --git a/charts/s3-operator/templates/clusterresourcequota-updater-binding-rbac.yaml b/charts/s3-operator/templates/clusterresourcequota-updater-binding-rbac.yaml deleted file mode 100644 index 2730a01..0000000 --- a/charts/s3-operator/templates/clusterresourcequota-updater-binding-rbac.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: {{ include "s3-operator.fullname" . }}-clusterresourcequota-updater-binding - labels: - {{- include "s3-operator.labels" . | nindent 4 }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: '{{ include "s3-operator.fullname" . }}-clusterresourcequota-updater' -subjects: -- kind: ServiceAccount - name: '{{ include "s3-operator.fullname" . }}-controller-manager' - namespace: '{{ .Release.Namespace }}' \ No newline at end of file diff --git a/charts/s3-operator/templates/metrics-reader-rbac.yaml b/charts/s3-operator/templates/metrics-reader-rbac.yaml deleted file mode 100644 index 70b501e..0000000 --- a/charts/s3-operator/templates/metrics-reader-rbac.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRole -metadata: - name: {{ include "s3-operator.fullname" . }}-metrics-reader - labels: - app.kubernetes.io/component: kube-rbac-proxy - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator - {{- include "s3-operator.labels" . | nindent 4 }} -rules: -- nonResourceURLs: - - /metrics - verbs: - - get \ No newline at end of file diff --git a/charts/s3-operator/templates/metrics-service.yaml b/charts/s3-operator/templates/metrics-service.yaml deleted file mode 100644 index 81633fa..0000000 --- a/charts/s3-operator/templates/metrics-service.yaml +++ /dev/null @@ -1,17 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "s3-operator.fullname" . }}-controller-manager-metrics-service - labels: - app.kubernetes.io/component: kube-rbac-proxy - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator - control-plane: controller-manager - {{- include "s3-operator.labels" . | nindent 4 }} -spec: - type: {{ .Values.metricsService.type }} - selector: - control-plane: controller-manager - {{- include "s3-operator.selectorLabels" . | nindent 4 }} - ports: - {{- .Values.metricsService.ports | toYaml | nindent 2 -}} \ No newline at end of file diff --git a/charts/s3-operator/templates/resourcequota-status-updater-binding-rbac.yaml b/charts/s3-operator/templates/resourcequota-status-updater-binding-rbac.yaml deleted file mode 100644 index aa69916..0000000 --- a/charts/s3-operator/templates/resourcequota-status-updater-binding-rbac.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: rbac.authorization.k8s.io/v1 -kind: ClusterRoleBinding -metadata: - name: {{ include "s3-operator.fullname" . }}-resourcequota-status-updater-binding - labels: - {{- include "s3-operator.labels" . | nindent 4 }} -roleRef: - apiGroup: rbac.authorization.k8s.io - kind: ClusterRole - name: '{{ include "s3-operator.fullname" . }}-resourcequota-status-updater' -subjects: -- kind: ServiceAccount - name: '{{ include "s3-operator.fullname" . }}-controller-manager' - namespace: '{{ .Release.Namespace }}' \ No newline at end of file diff --git a/charts/s3-operator/templates/selfsigned-issuer.yaml b/charts/s3-operator/templates/selfsigned-issuer.yaml deleted file mode 100644 index ad912e3..0000000 --- a/charts/s3-operator/templates/selfsigned-issuer.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: cert-manager.io/v1 -kind: Issuer -metadata: - name: {{ include "s3-operator.fullname" . }}-selfsigned-issuer - labels: - {{- include "s3-operator.labels" . | nindent 4 }} -spec: - selfSigned: {} \ No newline at end of file diff --git a/charts/s3-operator/templates/serviceaccount.yaml b/charts/s3-operator/templates/serviceaccount.yaml deleted file mode 100644 index c29c4b8..0000000 --- a/charts/s3-operator/templates/serviceaccount.yaml +++ /dev/null @@ -1,11 +0,0 @@ -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "s3-operator.fullname" . }}-controller-manager - labels: - app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator - {{- include "s3-operator.labels" . | nindent 4 }} - annotations: - {{- toYaml .Values.controllerManager.serviceAccount.annotations | nindent 4 }} \ No newline at end of file diff --git a/charts/s3-operator/templates/serving-cert.yaml b/charts/s3-operator/templates/serving-cert.yaml deleted file mode 100644 index 14d06b5..0000000 --- a/charts/s3-operator/templates/serving-cert.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: cert-manager.io/v1 -kind: Certificate -metadata: - name: {{ include "s3-operator.fullname" . }}-serving-cert - labels: - {{- include "s3-operator.labels" . | nindent 4 }} -spec: - dnsNames: - - '{{ include "s3-operator.fullname" . }}-webhook-service.{{ .Release.Namespace }}.svc' - - '{{ include "s3-operator.fullname" . }}-webhook-service.{{ .Release.Namespace }}.svc.{{ - .Values.kubernetesClusterDomain }}' - issuerRef: - kind: Issuer - name: '{{ include "s3-operator.fullname" . }}-selfsigned-issuer' - secretName: webhook-server-cert \ No newline at end of file diff --git a/charts/s3-operator/templates/webhook-service.yaml b/charts/s3-operator/templates/webhook-service.yaml deleted file mode 100644 index efe5434..0000000 --- a/charts/s3-operator/templates/webhook-service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "s3-operator.fullname" . }}-webhook-service - labels: - app.kubernetes.io/component: webhook - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator - {{- include "s3-operator.labels" . | nindent 4 }} -spec: - type: {{ .Values.webhookService.type }} - selector: - control-plane: controller-manager - {{- include "s3-operator.selectorLabels" . | nindent 4 }} - ports: - {{- .Values.webhookService.ports | toYaml | nindent 2 -}} \ No newline at end of file diff --git a/config/certmanager/certificate.yaml b/config/certmanager/certificate.yaml index b291e2e..19a4785 100644 --- a/config/certmanager/certificate.yaml +++ b/config/certmanager/certificate.yaml @@ -8,8 +8,8 @@ metadata: app.kubernetes.io/name: issuer app.kubernetes.io/instance: selfsigned-issuer app.kubernetes.io/component: certificate - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: selfsigned-issuer namespace: system @@ -23,8 +23,8 @@ metadata: app.kubernetes.io/name: certificate app.kubernetes.io/instance: serving-cert app.kubernetes.io/component: certificate - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: serving-cert # this name should match the one appeared in kustomizeconfig.yaml namespace: system diff --git a/config/default/kustomization.yaml b/config/default/kustomization.yaml index 2a9b879..feade89 100644 --- a/config/default/kustomization.yaml +++ b/config/default/kustomization.yaml @@ -1,12 +1,12 @@ # Adds namespace to all resources. -namespace: s3-operator-system +namespace: ceph-s3-operator-system # Value of this field is prepended to the # names of all resources, e.g. a deployment named # "wordpress" becomes "alices-wordpress". # Note that it should also match with the prefix (text before '-') of the namespace # field above. -namePrefix: s3-operator- +namePrefix: ceph-s3-operator- # Labels to add to all resources and selectors. #commonLabels: diff --git a/config/default/manager_auth_proxy_patch.yaml b/config/default/manager_auth_proxy_patch.yaml index f038695..024edad 100644 --- a/config/default/manager_auth_proxy_patch.yaml +++ b/config/default/manager_auth_proxy_patch.yaml @@ -50,7 +50,7 @@ spec: memory: 64Mi - name: manager args: - - "--config=/s3-operator/config/config.yaml" + - "--config=/ceph-s3-operator/config/config.yaml" - "--health-probe-bind-address=:8081" - "--metrics-bind-address=127.0.0.1:8080" - "--leader-elect" diff --git a/config/default/webhookcainjection_patch.yaml b/config/default/webhookcainjection_patch.yaml index e5a2b7b..2dec88c 100644 --- a/config/default/webhookcainjection_patch.yaml +++ b/config/default/webhookcainjection_patch.yaml @@ -7,8 +7,8 @@ metadata: app.kubernetes.io/name: validatingwebhookconfiguration app.kubernetes.io/instance: validating-webhook-configuration app.kubernetes.io/component: webhook - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: validating-webhook-configuration annotations: diff --git a/config/manager/manager.yaml b/config/manager/manager.yaml index 4d83302..e4bf36e 100644 --- a/config/manager/manager.yaml +++ b/config/manager/manager.yaml @@ -6,8 +6,8 @@ metadata: app.kubernetes.io/name: namespace app.kubernetes.io/instance: system app.kubernetes.io/component: manager - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: system --- @@ -21,8 +21,8 @@ metadata: app.kubernetes.io/name: deployment app.kubernetes.io/instance: controller-manager app.kubernetes.io/component: manager - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize spec: selector: @@ -69,12 +69,12 @@ spec: - command: - /manager args: - - --config=/s3-operator/config/config.yaml + - --config=/ceph-s3-operator/config/config.yaml - --leader-elect volumeMounts: - - mountPath: /s3-operator/config/ + - mountPath: /ceph-s3-operator/config/ name: config - image: ghcr.io/snapp-incubator/s3-operator:latest + image: ghcr.io/snapp-incubator/ceph-s3-operator:latest name: manager securityContext: allowPrivilegeEscalation: false diff --git a/config/manifests/bases/ceph-s3-operator.clusterserviceversion.yaml b/config/manifests/bases/ceph-s3-operator.clusterserviceversion.yaml new file mode 100644 index 0000000..9d807a5 --- /dev/null +++ b/config/manifests/bases/ceph-s3-operator.clusterserviceversion.yaml @@ -0,0 +1,78 @@ +apiVersion: operators.coreos.com/v1alpha1 +kind: ClusterServiceVersion +metadata: + annotations: + alm-examples: '[]' + capabilities: Basic Install + name: ceph-s3-operator.v0.0.0 + namespace: placeholder +spec: + apiservicedefinitions: {} + customresourcedefinitions: + owned: + - description: S3Bucket is the Schema for the s3buckets API + displayName: S3 Bucket + kind: S3Bucket + name: s3buckets.s3.snappcloud.io + version: v1alpha1 + - displayName: S3 User Claim + kind: S3UserClaim + name: s3userclaims.s3.snappcloud.io + version: v1alpha1 + - 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. + + + > **Important Note:** When creating new users, utilize **S3UserClaim** instead of S3User, as the latter is reserved exclusively for operator functionality. + + ## Key Features + + 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). + displayName: Ceph S3 Operator + icon: + - base64data: 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 + mediatype: image/png + install: + spec: + deployments: null + strategy: "" + installModes: + - supported: false + type: OwnNamespace + - supported: false + type: SingleNamespace + - supported: false + type: MultiNamespace + - supported: true + type: AllNamespaces + keywords: + - 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 + provider: + name: Snappcloud + url: https://github.com/snapp-incubator + version: 0.0.0 diff --git a/config/manifests/bases/s3-operator.clusterserviceversion.yaml b/config/manifests/bases/s3-operator.clusterserviceversion.yaml deleted file mode 100644 index 6df230d..0000000 --- a/config/manifests/bases/s3-operator.clusterserviceversion.yaml +++ /dev/null @@ -1,78 +0,0 @@ -apiVersion: operators.coreos.com/v1alpha1 -kind: ClusterServiceVersion -metadata: - annotations: - alm-examples: '[]' - capabilities: Basic Install - name: s3-operator.v0.0.0 - namespace: placeholder -spec: - apiservicedefinitions: {} - customresourcedefinitions: - owned: - - description: S3Bucket is the Schema for the s3buckets API - displayName: S3 Bucket - kind: S3Bucket - name: s3buckets.s3.snappcloud.io - version: v1alpha1 - - displayName: S3 User Claim - kind: S3UserClaim - name: s3userclaims.s3.snappcloud.io - version: v1alpha1 - - displayName: S3 User - kind: S3User - name: s3users.s3.snappcloud.io - version: v1alpha1 - description: | - The S3 Operator streamlines operations with Ceph storage, employed as an S3-compatible system. - - - > **Important Note:** When creating new users, utilize **S3UserClaim** instead of S3User, as the latter is reserved exclusively for operator functionality. - - ## Key Features - - 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/s3-operator), the [Readme](https://github.com/snapp-incubator/s3-operator#readme) in the main branch, and the [design details](https://github.com/snapp-incubator/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/s3-operator/). - - ## License - - S3 Operator is licensed under the [GNU General Public License v3.0](https://github.com/snapp-incubator/s3-operator/blob/main/LICENSE). - displayName: S3 Operator - icon: - - base64data: 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MTuMl1DbSxQ3DseXaVGZ/wCImgD+crSvib8Kf+CpH/BfL9oPwh+ztq41Lw94m/Z01rwRYa6gYWV7NJPHay3NpIQBNbR3EzwiVMo7ROULLgn79/4Nyv28vgp4f/Yh0n/gn38f9asfAHxi+B11qHh3XPDmuTx2F08cV5NLFcQJOyeamyQRuULFXQkgK6Fv3p8CfsafsrfC74rWnxv+G3gHRtA8VWGgx+F7a/0+2W3eHRoXEkdjGke2NIFcAhFUYIrwX9rL/gkx/wAE5v24/FsXxA/ak+EuieKdfiRIzqjLLaXskcYwiTXFpJDLKqjhVkZgo4GBQB/Nt/wXE/b9+C37SP8AwUL/AGPv2aP2e9Tg8YWfgj4v+H7/AMS65pbi502z1G6u4orLTRdxlonuWiS5lljViUVVzzuC/wBrdfEnhL/gm3+wZ4E8EeD/AIb+D/hR4c07Q/AOsp4i0C0hs0VLLV4wAl+p+89yAAPOkLOcDJ4FfbdABRRRQB//0f7+KKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/S/v4ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA/9P+/iiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/2Q== - mediatype: image/png - install: - spec: - deployments: null - strategy: "" - installModes: - - supported: false - type: OwnNamespace - - supported: false - type: SingleNamespace - - supported: false - type: MultiNamespace - - supported: true - type: AllNamespaces - keywords: - - s3 - - ceph - links: - - name: User Documentation - url: https://docs.snappcloud.io/docs/storage/object-store/s3-operator - - name: Github Repository - url: https://github.com/snapp-incubator/s3-operator - maturity: alpha - provider: - name: Snappcloud - url: https://github.com/snapp-incubator - version: 0.0.0 diff --git a/config/manifests/kustomization.yaml b/config/manifests/kustomization.yaml index 5d4b73c..7b33c9b 100644 --- a/config/manifests/kustomization.yaml +++ b/config/manifests/kustomization.yaml @@ -1,7 +1,7 @@ # These resources constitute the fully configured set of manifests # used to generate the 'manifests/' directory in a bundle. resources: -- bases/s3-operator.clusterserviceversion.yaml +- bases/ceph-s3-operator.clusterserviceversion.yaml - ../default - ../samples - ../scorecard diff --git a/config/prometheus/monitor.yaml b/config/prometheus/monitor.yaml index 03e7372..d3663be 100644 --- a/config/prometheus/monitor.yaml +++ b/config/prometheus/monitor.yaml @@ -8,8 +8,8 @@ metadata: app.kubernetes.io/name: servicemonitor app.kubernetes.io/instance: controller-manager-metrics-monitor app.kubernetes.io/component: metrics - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: controller-manager-metrics-monitor namespace: system diff --git a/config/rbac/auth_proxy_client_clusterrole.yaml b/config/rbac/auth_proxy_client_clusterrole.yaml index 6f8f5e1..1b06f6c 100644 --- a/config/rbac/auth_proxy_client_clusterrole.yaml +++ b/config/rbac/auth_proxy_client_clusterrole.yaml @@ -5,8 +5,8 @@ metadata: app.kubernetes.io/name: clusterrole app.kubernetes.io/instance: metrics-reader app.kubernetes.io/component: kube-rbac-proxy - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: metrics-reader rules: diff --git a/config/rbac/auth_proxy_role.yaml b/config/rbac/auth_proxy_role.yaml index 5276e30..b90f616 100644 --- a/config/rbac/auth_proxy_role.yaml +++ b/config/rbac/auth_proxy_role.yaml @@ -5,8 +5,8 @@ metadata: app.kubernetes.io/name: clusterrole app.kubernetes.io/instance: proxy-role app.kubernetes.io/component: kube-rbac-proxy - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: proxy-role rules: diff --git a/config/rbac/auth_proxy_role_binding.yaml b/config/rbac/auth_proxy_role_binding.yaml index 28f0acd..ed9744a 100644 --- a/config/rbac/auth_proxy_role_binding.yaml +++ b/config/rbac/auth_proxy_role_binding.yaml @@ -5,8 +5,8 @@ metadata: app.kubernetes.io/name: clusterrolebinding app.kubernetes.io/instance: proxy-rolebinding app.kubernetes.io/component: kube-rbac-proxy - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: proxy-rolebinding roleRef: diff --git a/config/rbac/auth_proxy_service.yaml b/config/rbac/auth_proxy_service.yaml index 5c4de26..3b8b620 100644 --- a/config/rbac/auth_proxy_service.yaml +++ b/config/rbac/auth_proxy_service.yaml @@ -6,8 +6,8 @@ metadata: app.kubernetes.io/name: service app.kubernetes.io/instance: controller-manager-metrics-service app.kubernetes.io/component: kube-rbac-proxy - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: controller-manager-metrics-service namespace: system diff --git a/config/rbac/leader_election_role.yaml b/config/rbac/leader_election_role.yaml index f03ce8f..120bcb6 100644 --- a/config/rbac/leader_election_role.yaml +++ b/config/rbac/leader_election_role.yaml @@ -6,8 +6,8 @@ metadata: app.kubernetes.io/name: role app.kubernetes.io/instance: leader-election-role app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: leader-election-role rules: diff --git a/config/rbac/leader_election_role_binding.yaml b/config/rbac/leader_election_role_binding.yaml index d08ed73..2a6df4b 100644 --- a/config/rbac/leader_election_role_binding.yaml +++ b/config/rbac/leader_election_role_binding.yaml @@ -5,8 +5,8 @@ metadata: app.kubernetes.io/name: rolebinding app.kubernetes.io/instance: leader-election-rolebinding app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: leader-election-rolebinding roleRef: diff --git a/config/rbac/role_binding.yaml b/config/rbac/role_binding.yaml index aee04f4..d535301 100644 --- a/config/rbac/role_binding.yaml +++ b/config/rbac/role_binding.yaml @@ -5,8 +5,8 @@ metadata: app.kubernetes.io/name: clusterrolebinding app.kubernetes.io/instance: manager-rolebinding app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: manager-rolebinding roleRef: diff --git a/config/rbac/s3bucket_editor_role.yaml b/config/rbac/s3bucket_editor_role.yaml index 4ee16bc..4197dd7 100644 --- a/config/rbac/s3bucket_editor_role.yaml +++ b/config/rbac/s3bucket_editor_role.yaml @@ -6,8 +6,8 @@ metadata: app.kubernetes.io/name: clusterrole app.kubernetes.io/instance: s3bucket-editor-role app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: s3bucket-editor-role rules: diff --git a/config/rbac/s3bucket_viewer_role.yaml b/config/rbac/s3bucket_viewer_role.yaml index 2bec153..6f122f7 100644 --- a/config/rbac/s3bucket_viewer_role.yaml +++ b/config/rbac/s3bucket_viewer_role.yaml @@ -6,8 +6,8 @@ metadata: app.kubernetes.io/name: clusterrole app.kubernetes.io/instance: s3bucket-viewer-role app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: s3bucket-viewer-role rules: diff --git a/config/rbac/s3user_editor_role.yaml b/config/rbac/s3user_editor_role.yaml index 50450b5..77c4a9a 100644 --- a/config/rbac/s3user_editor_role.yaml +++ b/config/rbac/s3user_editor_role.yaml @@ -6,8 +6,8 @@ metadata: app.kubernetes.io/name: clusterrole app.kubernetes.io/instance: s3user-editor-role app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: s3user-editor-role rules: diff --git a/config/rbac/s3user_viewer_role.yaml b/config/rbac/s3user_viewer_role.yaml index 8b37c79..756182f 100644 --- a/config/rbac/s3user_viewer_role.yaml +++ b/config/rbac/s3user_viewer_role.yaml @@ -6,8 +6,8 @@ metadata: app.kubernetes.io/name: clusterrole app.kubernetes.io/instance: s3user-viewer-role app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: s3user-viewer-role rules: diff --git a/config/rbac/s3userclaim_editor_role.yaml b/config/rbac/s3userclaim_editor_role.yaml index 00ab463..c146d05 100644 --- a/config/rbac/s3userclaim_editor_role.yaml +++ b/config/rbac/s3userclaim_editor_role.yaml @@ -6,8 +6,8 @@ metadata: app.kubernetes.io/name: clusterrole app.kubernetes.io/instance: s3userclaim-editor-role app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: s3userclaim-editor-role rules: diff --git a/config/rbac/s3userclaim_viewer_role.yaml b/config/rbac/s3userclaim_viewer_role.yaml index ae320b4..3076b89 100644 --- a/config/rbac/s3userclaim_viewer_role.yaml +++ b/config/rbac/s3userclaim_viewer_role.yaml @@ -6,8 +6,8 @@ metadata: app.kubernetes.io/name: clusterrole app.kubernetes.io/instance: s3userclaim-viewer-role app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: s3userclaim-viewer-role rules: diff --git a/config/rbac/service_account.yaml b/config/rbac/service_account.yaml index 9cf3648..c4cfd46 100644 --- a/config/rbac/service_account.yaml +++ b/config/rbac/service_account.yaml @@ -5,8 +5,8 @@ metadata: app.kubernetes.io/name: serviceaccount app.kubernetes.io/instance: controller-manager app.kubernetes.io/component: rbac - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: controller-manager namespace: system diff --git a/config/samples/s3_v1alpha1_s3bucket.yaml b/config/samples/s3_v1alpha1_s3bucket.yaml index fdda2f8..2b4c959 100644 --- a/config/samples/s3_v1alpha1_s3bucket.yaml +++ b/config/samples/s3_v1alpha1_s3bucket.yaml @@ -4,9 +4,9 @@ metadata: labels: app.kubernetes.io/name: s3bucket app.kubernetes.io/instance: s3bucket-sample - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize - app.kubernetes.io/created-by: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator name: s3bucket-sample spec: s3UserRef: s3userclaim-sample diff --git a/config/samples/s3_v1alpha1_s3user.yaml b/config/samples/s3_v1alpha1_s3user.yaml index b48134f..b57d8c2 100644 --- a/config/samples/s3_v1alpha1_s3user.yaml +++ b/config/samples/s3_v1alpha1_s3user.yaml @@ -4,9 +4,9 @@ metadata: labels: app.kubernetes.io/name: s3user app.kubernetes.io/instance: s3user-sample - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize - app.kubernetes.io/created-by: s3-operator + 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 8c04c52..7e3e357 100644 --- a/config/samples/s3_v1alpha1_s3userclaim.yaml +++ b/config/samples/s3_v1alpha1_s3userclaim.yaml @@ -2,7 +2,7 @@ apiVersion: s3.snappcloud.io/v1alpha1 kind: S3UserClaim metadata: name: s3userclaim-sample - namespace: s3-operator-test + namespace: ceph-s3-operator-test spec: s3UserClass: ceph-default readonlySecret: s3-sample-readonly-secret diff --git a/config/test/kustomization.yaml b/config/test/kustomization.yaml index fbe032c..8cdceb0 100644 --- a/config/test/kustomization.yaml +++ b/config/test/kustomization.yaml @@ -13,10 +13,10 @@ patchesJson6902: group: apps version: v1 kind: Deployment - name: s3-operator-controller-manager + name: ceph-s3-operator-controller-manager path: deployment-patch.yaml - target: version: v1 kind: Secret - name: s3-operator-controller-manager-config + name: ceph-s3-operator-controller-manager-config path: secret-patch.yaml diff --git a/config/webhook/service.yaml b/config/webhook/service.yaml index c691c58..cf6362d 100644 --- a/config/webhook/service.yaml +++ b/config/webhook/service.yaml @@ -6,8 +6,8 @@ metadata: app.kubernetes.io/name: service app.kubernetes.io/instance: webhook-service app.kubernetes.io/component: webhook - app.kubernetes.io/created-by: s3-operator - app.kubernetes.io/part-of: s3-operator + app.kubernetes.io/created-by: ceph-s3-operator + app.kubernetes.io/part-of: ceph-s3-operator app.kubernetes.io/managed-by: kustomize name: webhook-service namespace: system diff --git a/docs/DESIGN.md b/docs/DESIGN.md index fc041ab..b07067c 100644 --- a/docs/DESIGN.md +++ b/docs/DESIGN.md @@ -1,4 +1,4 @@ -# S3 Operator Design +# Ceph S3 Operator Design ## Decisions: diff --git a/go.mod b/go.mod index 27be4c7..cd99b73 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/snapp-incubator/s3-operator +module github.com/snapp-incubator/ceph-s3-operator go 1.20 diff --git a/internal/controllers/s3bucket/cleaner.go b/internal/controllers/s3bucket/cleaner.go index ec5aff4..acc5bbb 100644 --- a/internal/controllers/s3bucket/cleaner.go +++ b/internal/controllers/s3bucket/cleaner.go @@ -9,7 +9,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - "github.com/snapp-incubator/s3-operator/pkg/consts" + "github.com/snapp-incubator/ceph-s3-operator/pkg/consts" ) // Cleanup cleans up the provisioned resources for the s3Bucket object diff --git a/internal/controllers/s3bucket/controller.go b/internal/controllers/s3bucket/controller.go index 15c7fe4..aec6ed2 100644 --- a/internal/controllers/s3bucket/controller.go +++ b/internal/controllers/s3bucket/controller.go @@ -20,7 +20,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/predicate" - s3v1alpha1 "github.com/snapp-incubator/s3-operator/api/v1alpha1" + s3v1alpha1 "github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1" ) // SetupWithManager sets up the controller with the Manager. diff --git a/internal/controllers/s3bucket/handler.go b/internal/controllers/s3bucket/handler.go index fbd956c..b53cdb6 100644 --- a/internal/controllers/s3bucket/handler.go +++ b/internal/controllers/s3bucket/handler.go @@ -17,10 +17,10 @@ import ( corev1 "k8s.io/api/core/v1" - s3v1alpha1 "github.com/snapp-incubator/s3-operator/api/v1alpha1" - "github.com/snapp-incubator/s3-operator/internal/config" - "github.com/snapp-incubator/s3-operator/internal/s3_agent" - "github.com/snapp-incubator/s3-operator/pkg/consts" + s3v1alpha1 "github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1" + "github.com/snapp-incubator/ceph-s3-operator/internal/config" + "github.com/snapp-incubator/ceph-s3-operator/internal/s3_agent" + "github.com/snapp-incubator/ceph-s3-operator/pkg/consts" ) // S3BucketReconciler reconciles a S3Bucket object diff --git a/internal/controllers/s3bucket/provisioner.go b/internal/controllers/s3bucket/provisioner.go index 6cae2fa..c37cc16 100644 --- a/internal/controllers/s3bucket/provisioner.go +++ b/internal/controllers/s3bucket/provisioner.go @@ -9,8 +9,8 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - s3v1alpha1 "github.com/snapp-incubator/s3-operator/api/v1alpha1" - "github.com/snapp-incubator/s3-operator/pkg/consts" + s3v1alpha1 "github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1" + "github.com/snapp-incubator/ceph-s3-operator/pkg/consts" ) // Provision provisions the required resources for the s3UserClaim object diff --git a/internal/controllers/s3userclaim/cleaner.go b/internal/controllers/s3userclaim/cleaner.go index 26dbb67..2cbcc7a 100644 --- a/internal/controllers/s3userclaim/cleaner.go +++ b/internal/controllers/s3userclaim/cleaner.go @@ -12,8 +12,8 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - s3v1alpha1 "github.com/snapp-incubator/s3-operator/api/v1alpha1" - "github.com/snapp-incubator/s3-operator/pkg/consts" + s3v1alpha1 "github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1" + "github.com/snapp-incubator/ceph-s3-operator/pkg/consts" ) // Cleanup cleans up the provisioned resources for the s3UserClaim object diff --git a/internal/controllers/s3userclaim/controller.go b/internal/controllers/s3userclaim/controller.go index 7458a2a..b1cca17 100644 --- a/internal/controllers/s3userclaim/controller.go +++ b/internal/controllers/s3userclaim/controller.go @@ -10,8 +10,8 @@ import ( "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/controller-runtime/pkg/source" - s3v1alpha1 "github.com/snapp-incubator/s3-operator/api/v1alpha1" - "github.com/snapp-incubator/s3-operator/internal/predicates" + s3v1alpha1 "github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1" + "github.com/snapp-incubator/ceph-s3-operator/internal/predicates" ) // SetupWithManager sets up the controller with the Manager. diff --git a/internal/controllers/s3userclaim/handler.go b/internal/controllers/s3userclaim/handler.go index 4447830..cdf14e3 100644 --- a/internal/controllers/s3userclaim/handler.go +++ b/internal/controllers/s3userclaim/handler.go @@ -33,8 +33,8 @@ import ( "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/manager" - s3v1alpha1 "github.com/snapp-incubator/s3-operator/api/v1alpha1" - "github.com/snapp-incubator/s3-operator/internal/config" + s3v1alpha1 "github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1" + "github.com/snapp-incubator/ceph-s3-operator/internal/config" ) type Reconciler struct { diff --git a/internal/controllers/s3userclaim/provisioner.go b/internal/controllers/s3userclaim/provisioner.go index 8637a7d..c56e247 100644 --- a/internal/controllers/s3userclaim/provisioner.go +++ b/internal/controllers/s3userclaim/provisioner.go @@ -20,8 +20,8 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" "sigs.k8s.io/controller-runtime/pkg/controller/controllerutil" - s3v1alpha1 "github.com/snapp-incubator/s3-operator/api/v1alpha1" - "github.com/snapp-incubator/s3-operator/pkg/consts" + s3v1alpha1 "github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1" + "github.com/snapp-incubator/ceph-s3-operator/pkg/consts" ) // Provision provisions the required resources for the s3UserClaim object diff --git a/internal/controllers/s3userclaim/s3userclaim_test.go b/internal/controllers/s3userclaim/s3userclaim_test.go index 94177a8..2ba90d5 100644 --- a/internal/controllers/s3userclaim/s3userclaim_test.go +++ b/internal/controllers/s3userclaim/s3userclaim_test.go @@ -32,10 +32,10 @@ import ( "k8s.io/apimachinery/pkg/types" "k8s.io/client-go/tools/reference" - s3v1alpha1 "github.com/snapp-incubator/s3-operator/api/v1alpha1" - "github.com/snapp-incubator/s3-operator/internal/config" - "github.com/snapp-incubator/s3-operator/internal/s3_agent" - "github.com/snapp-incubator/s3-operator/pkg/consts" + s3v1alpha1 "github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1" + "github.com/snapp-incubator/ceph-s3-operator/internal/config" + "github.com/snapp-incubator/ceph-s3-operator/internal/s3_agent" + "github.com/snapp-incubator/ceph-s3-operator/pkg/consts" ) var _ = Describe("S3UserClaim Controller", func() { diff --git a/internal/controllers/s3userclaim/suite_test.go b/internal/controllers/s3userclaim/suite_test.go index d96082a..31760b8 100644 --- a/internal/controllers/s3userclaim/suite_test.go +++ b/internal/controllers/s3userclaim/suite_test.go @@ -35,8 +35,8 @@ import ( logf "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/log/zap" - s3v1alpha1 "github.com/snapp-incubator/s3-operator/api/v1alpha1" - "github.com/snapp-incubator/s3-operator/internal/config" + s3v1alpha1 "github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1" + "github.com/snapp-incubator/ceph-s3-operator/internal/config" //+kubebuilder:scaffold:imports ) diff --git a/internal/s3_agent/s3_agent.go b/internal/s3_agent/s3_agent.go index 77a4521..dfcd659 100644 --- a/internal/s3_agent/s3_agent.go +++ b/internal/s3_agent/s3_agent.go @@ -12,7 +12,7 @@ import ( "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" - "github.com/snapp-incubator/s3-operator/pkg/consts" + "github.com/snapp-incubator/ceph-s3-operator/pkg/consts" ) // S3Agent wraps the s3.S3 structure to allow for wrapper methods diff --git a/kuttl-test.yaml b/kuttl-test.yaml index eecd6dc..753a2da 100644 --- a/kuttl-test.yaml +++ b/kuttl-test.yaml @@ -8,4 +8,4 @@ testDirs: timeout: 240 # Load the necessary container images as cache kindContainers: -- s3-operator +- ceph-s3-operator diff --git a/main.go b/main.go index 10d2723..ea3d0a0 100644 --- a/main.go +++ b/main.go @@ -34,10 +34,10 @@ import ( "sigs.k8s.io/controller-runtime/pkg/healthz" "sigs.k8s.io/controller-runtime/pkg/log/zap" - s3v1alpha1 "github.com/snapp-incubator/s3-operator/api/v1alpha1" - "github.com/snapp-incubator/s3-operator/internal/config" - "github.com/snapp-incubator/s3-operator/internal/controllers/s3bucket" - "github.com/snapp-incubator/s3-operator/internal/controllers/s3userclaim" + s3v1alpha1 "github.com/snapp-incubator/ceph-s3-operator/api/v1alpha1" + "github.com/snapp-incubator/ceph-s3-operator/internal/config" + "github.com/snapp-incubator/ceph-s3-operator/internal/controllers/s3bucket" + "github.com/snapp-incubator/ceph-s3-operator/internal/controllers/s3userclaim" //+kubebuilder:scaffold:imports ) diff --git a/testing/Dockerfile b/testing/Dockerfile index 5ec388c..72ae4b3 100644 --- a/testing/Dockerfile +++ b/testing/Dockerfile @@ -29,8 +29,8 @@ ENV GO111MODULE=on ENV GOPATH /go ENV GODEBUG=cgocheck=2 ENV GOCACHE=/go/cache -WORKDIR /opt/s3-operator -VOLUME /opt/s3-operator +WORKDIR /opt/ceph-s3-operator +VOLUME /opt/ceph-s3-operator COPY micro-osd.sh / COPY entrypoint.sh / diff --git a/testing/e2e/01-assert.yaml b/testing/e2e/01-assert.yaml index 051e8db..a5c65b0 100644 --- a/testing/e2e/01-assert.yaml +++ b/testing/e2e/01-assert.yaml @@ -2,7 +2,7 @@ apiVersion: apps/v1 kind: Deployment metadata: name: ceph-cluster - namespace: s3-operator-system + namespace: ceph-s3-operator-system status: readyReplicas: 1 @@ -11,7 +11,7 @@ status: apiVersion: apps/v1 kind: Deployment metadata: - name: s3-operator-controller-manager - namespace: s3-operator-system + name: ceph-s3-operator-controller-manager + namespace: ceph-s3-operator-system status: readyReplicas: 1 \ No newline at end of file diff --git a/testing/e2e/01-install-ceph-operator.yaml b/testing/e2e/01-install-ceph-operator.yaml index 53522eb..ee216c8 100644 --- a/testing/e2e/01-install-ceph-operator.yaml +++ b/testing/e2e/01-install-ceph-operator.yaml @@ -7,13 +7,13 @@ commands: ignoreFailure: true - command: kubectl create namespace s3-test2 ignoreFailure: true - # Create namespace s3-operator-system - - command: kubectl create namespace s3-operator-system + # Create namespace ceph-s3-operator-system + - command: kubectl create namespace ceph-s3-operator-system ignoreFailure: true # Setup local ceph cluster - - command: kubectl apply -f ./ceph-manifest -n s3-operator-system + - command: kubectl apply -f ./ceph-manifest -n ceph-s3-operator-system # Setup the operator - - command: make -C ../../ deploy-for-e2e-test IMG=s3-operator:latest + - command: make -C ../../ deploy-for-e2e-test IMG=ceph-s3-operator:latest # The namespace should have the team label for the cluster resource quota - command: kubectl label namespace s3-test snappcloud.io/team=myteam - command: kubectl label namespace s3-test2 snappcloud.io/team=myteam \ No newline at end of file diff --git a/testing/e2e/03-create-bucket.yaml b/testing/e2e/03-create-bucket.yaml index 8435dde..3cf1495 100644 --- a/testing/e2e/03-create-bucket.yaml +++ b/testing/e2e/03-create-bucket.yaml @@ -35,6 +35,6 @@ apiVersion: kuttl.dev/v1beta1 kind: TestStep commands: # Forward the ceph-cluster port on the host - - command: kubectl port-forward -n s3-operator-system deployment/ceph-cluster 8000:80 + - command: kubectl port-forward -n ceph-s3-operator-system deployment/ceph-cluster 8000:80 background: true skipLogOutput: true \ No newline at end of file