Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ pkg/cli/cluster/charts/
# ignore client-sdk-gen temp directory
hack/github.com/

# ignore OLM bundle directory
bundle
bundle.Dockerfile

# ignore kubeblocks-docs directory
docs/kubeblocks-docs
docs/kubeblocks-docs
70 changes: 69 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ GIT_COMMIT = $(shell git rev-list -1 HEAD)
GIT_VERSION = $(shell git describe --always --abbrev=0 --tag)
GENERATED_CLIENT_PKG = "pkg/client"
GENERATED_DEEP_COPY_FILE = "zz_generated.deepcopy.go"
OPERATOR_SDK_VERSION ?= v1.41.1

# Setting SHELL to bash allows bash commands to be executed by recipes.
# This is a requirement for 'setup-envtest.sh' in the test target.
# Options are set to exit when a recipe line exits non-zero or a piped command fails.
Expand Down Expand Up @@ -106,8 +108,9 @@ manifests: test-go-generate controller-gen ## Generate WebhookConfiguration, Clu
$(MAKE) client-sdk-gen

.PHONY: label-crds
LABEL_CRD_DIR ?= config/crd/bases
label-crds:
@for f in config/crd/bases/*.yaml; do \
@for f in $(LABEL_CRD_DIR)/*.yaml; do \
echo "applying app.kubernetes.io/name=kubeblocks label to $$f"; \
kubectl label --overwrite -f $$f --local=true -o yaml app.kubernetes.io/name=kubeblocks > bin/crd.yaml; \
mv bin/crd.yaml $$f; \
Expand Down Expand Up @@ -457,6 +460,71 @@ mv "$$(echo "$(1)" | sed "s/-$(3)$$//")" $(1) ;\
}
endef

.PHONY: operator-sdk
OPERATOR_SDK = $(LOCALBIN)/operator-sdk
operator-sdk: ## Install the operator-sdk app
ifneq ($(shell $(OPERATOR_SDK) version 2>/dev/null | awk -F '"' '{print $$2}'), $(OPERATOR_SDK_VERSION))
@{ \
set -e ;\
mkdir -p $(LOCALBIN) ;\
OS=$(shell go env GOOS) && ARCH=$(shell go env GOARCH) && \
curl -sSL "https://github.com/operator-framework/operator-sdk/releases/download/${OPERATOR_SDK_VERSION}/operator-sdk_$${OS}_$${ARCH}" -o "$(OPERATOR_SDK)" ;\
chmod +x "$(LOCALBIN)/operator-sdk" ;\
}
endif

##@ OLM Bundle

BUNDLE_VERSION ?= $(VERSION)
BUNDLE_IMG ?= docker.io/apecloud/kubeblocks-bundle:$(BUNDLE_VERSION)
CHANNELS ?= stable
DEFAULT_CHANNEL ?= stable
OPENSHIFT_VERSIONS ?= "v4.17"
BUNDLE_METADATA_OPTS ?= --channels=$(CHANNELS) --default-channel=$(DEFAULT_CHANNEL)

.PHONY: olm-bundle
olm-bundle: test-go-generate controller-gen kustomize operator-sdk ## Generate complete OLM bundle (all-in-one)
@echo "==> Generating OLM bundle for version $(BUNDLE_VERSION)"
set -xeEuo pipefail ;\
CONFIG_TMP_DIR=$$(mktemp -d) ;\
OLM_CRD_DIR=$$(mktemp -d) ;\
trap "rm -rf $${CONFIG_TMP_DIR} $${OLM_CRD_DIR}" EXIT ;\
echo "==> Generating CRDs for bundle in $${OLM_CRD_DIR}" ;\
$(CONTROLLER_GEN) rbac:roleName=manager-role \
crd:generateEmbeddedObjectMeta=true \
webhook \
paths="./cmd/manager/...;./apis/apps/v1;./apis/apps/v1beta1;./apis/trace/v1;./apis/workloads/v1;./apis/dataprotection/...;./apis/operations/...;./apis/parameters/...;./apis/extensions/...;./apis/experimental/...;./controllers/..." \
output:crd:artifacts:config="$${OLM_CRD_DIR}" ;\
$(MAKE) label-crds LABEL_CRD_DIR="$${OLM_CRD_DIR}" --no-print-directory ;\
cp -r config "$${CONFIG_TMP_DIR}" ;\
mkdir -p "$${CONFIG_TMP_DIR}/config/crd/olm-bases" ;\
cp "$${OLM_CRD_DIR}"/*.yaml "$${CONFIG_TMP_DIR}/config/crd/olm-bases/" ;\
echo "resources:" > "$${CONFIG_TMP_DIR}/config/crd/olm-bases/kustomization.yaml" ;\
for f in "$${CONFIG_TMP_DIR}/config/crd/olm-bases"/*.yaml; do \
[ "$$f" = "$${CONFIG_TMP_DIR}/config/crd/olm-bases/kustomization.yaml" ] && continue ;\
echo "- $$(basename $$f)" >> "$${CONFIG_TMP_DIR}/config/crd/olm-bases/kustomization.yaml" ;\
done ;\
echo " - Manager: $(IMG)" ;\
( \
cd "$${CONFIG_TMP_DIR}/config/manager" ;\
$(KUSTOMIZE) edit set image controller="$(IMG)" ;\
) ;\
rm -fr bundle bundle.Dockerfile ;\
($(KUSTOMIZE) build "$${CONFIG_TMP_DIR}/config/olm-manifests") | \
$(OPERATOR_SDK) generate bundle --verbose --overwrite --manifests --metadata \
--package kubeblocks \
--channels $(CHANNELS) \
--default-channel $(DEFAULT_CHANNEL) \
--plugins=go.kubebuilder.io/v4 \
--use-image-digests \
--version "$(BUNDLE_VERSION)" ;\
echo "" >> bundle/metadata/annotations.yaml ;\
echo " # OpenShift annotations." >> bundle/metadata/annotations.yaml ;\
echo " com.redhat.openshift.versions: $(OPENSHIFT_VERSIONS)" >> bundle/metadata/annotations.yaml ;\
rm -rf "$${CONFIG_TMP_DIR}" ;\
$(OPERATOR_SDK) bundle validate --plugins=go.kubebuilder.io/v4 ./bundle ;\
echo "==> Bundle generated successfully at ./bundle"

# NOTE: include must be placed at the end
include docker/docker.mk
include cmd/cmd.mk
57 changes: 29 additions & 28 deletions config/default/kustomization.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,15 @@ bases:
# crd/kustomization.yaml
- ../webhook
# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER'. 'WEBHOOK' components are required.
- ../certmanager
#- ../certmanager
# [PROMETHEUS] To enable prometheus monitor, uncomment all sections with 'PROMETHEUS'.
#- ../prometheus

patchesStrategicMerge:
# Protect the /metrics endpoint by putting it behind auth.
# If you want your controller-manager to expose the /metrics
# endpoint w/o any authn/z, please comment the following line.
- manager_auth_proxy_patch.yaml
#- manager_auth_proxy_patch.yaml

# Mount the controller config file for loading manager configurations
# through a ComponentConfig type
Expand All @@ -46,29 +46,30 @@ patchesStrategicMerge:
# the following config is for teaching kustomize how to do var substitution
vars:
# [CERTMANAGER] To enable cert-manager, uncomment all sections with 'CERTMANAGER' prefix.
- name: CERTIFICATE_NAMESPACE # namespace of the certificate CR
objref:
kind: Certificate
group: cert-manager.io
version: v1
name: serving-cert # this name should match the one in certificate.yaml
fieldref:
fieldpath: metadata.namespace
- name: CERTIFICATE_NAME
objref:
kind: Certificate
group: cert-manager.io
version: v1
name: serving-cert # this name should match the one in certificate.yaml
- name: SERVICE_NAMESPACE # namespace of the service
objref:
kind: Service
version: v1
name: webhook-service
fieldref:
fieldpath: metadata.namespace
- name: SERVICE_NAME
objref:
kind: Service
version: v1
name: webhook-service
#vars:
#- name: CERTIFICATE_NAMESPACE # namespace of the certificate CR
# objref:
# kind: Certificate
# group: cert-manager.io
# version: v1
# name: serving-cert # this name should match the one in certificate.yaml
# fieldref:
# fieldpath: metadata.namespace
#- name: CERTIFICATE_NAME
# objref:
# kind: Certificate
# group: cert-manager.io
# version: v1
# name: serving-cert # this name should match the one in certificate.yaml
#- name: SERVICE_NAMESPACE # namespace of the service
# objref:
# kind: Service
# version: v1
# name: webhook-service
# fieldref:
# fieldpath: metadata.namespace
#- name: SERVICE_NAME
# objref:
# kind: Service
# version: v1
# name: webhook-service
7 changes: 5 additions & 2 deletions config/manager/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,13 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
- manager.yaml

generatorOptions:
disableNameSuffixHash: true

configMapGenerator:
- name: manager-config
files:
- files:
- controller_manager_config.yaml
name: manager-config
11 changes: 11 additions & 0 deletions config/olm-default/kustomization.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
namespace: kubeblocks-system
namePrefix: kubeblocks-

# OLM Bundle configuration
# ../crd/olm-bases is dynamically generated during bundle build (see Makefile)
resources:
- ../crd/olm-bases
- ../rbac
- ../manager
Loading
Loading