Skip to content

Commit 5cc2d0b

Browse files
committed
feat: template helm chart
Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
1 parent 34a249f commit 5cc2d0b

File tree

9 files changed

+562
-0
lines changed

9 files changed

+562
-0
lines changed

helm/operator/Chart.yaml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
apiVersion: v2
2+
name: josdk-operator
3+
description: >
4+
Generic Helm chart template for deploying a Java Operator SDK based operator.
5+
Copy and customise this chart for your own operator: adjust the values, extend
6+
the ClusterRole rules with your CRD API groups, and optionally add your own
7+
templates.
8+
type: application
9+
version: 0.1.0
10+
# Set to the version of your operator image.
11+
appVersion: "latest"
12+
keywords:
13+
- operator
14+
- kubernetes
15+
- java-operator-sdk
16+
home: https://javaoperatorsdk.io
17+
sources:
18+
- https://github.com/operator-framework/java-operator-sdk

helm/operator/templates/NOTES.txt

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
Thank you for installing {{ .Chart.Name }} ({{ .Chart.AppVersion }}).
2+
3+
Release: {{ .Release.Name }}
4+
Namespace: {{ include "josdk-operator.namespace" . }}
5+
6+
Operator deployment: {{ include "josdk-operator.fullname" . }}
7+
8+
{{- if .Values.josdkConfig.enabled }}
9+
10+
ConfigLoader properties are mounted from ConfigMap
11+
{{ include "josdk-operator.configMapName" . }}
12+
at {{ .Values.josdkConfig.mountPath }}/josdk.properties.
13+
14+
Wire it up in your operator main class:
15+
16+
ConfigLoader loader = new ConfigLoader(
17+
PropertiesConfigProvider.fromFile(
18+
Path.of("{{ .Values.josdkConfig.mountPath }}/josdk.properties")));
19+
{{- end }}
20+
21+
{{- if .Values.log4j2.enabled }}
22+
23+
Log4j2 configuration is mounted from ConfigMap
24+
{{ include "josdk-operator.log4j2ConfigMapName" . }}
25+
at {{ .Values.log4j2.mountPath }}/log4j2.xml.
26+
27+
Root log level: {{ .Values.log4j2.rootLevel }}
28+
{{- if .Values.log4j2.loggers }}
29+
Per-logger overrides:
30+
{{- range $logger, $level := .Values.log4j2.loggers }}
31+
{{ $logger }} -> {{ $level }}
32+
{{- end }}
33+
{{- end }}
34+
35+
The JVM flag -Dlog4j2.configurationFile={{ .Values.log4j2.mountPath }}/log4j2.xml
36+
has been added to JAVA_TOOL_OPTIONS automatically.
37+
{{- end }}
38+
39+
To change the log level at runtime without redeploying, update the ConfigMap:
40+
41+
kubectl edit configmap {{ include "josdk-operator.log4j2ConfigMapName" . }} \
42+
-n {{ include "josdk-operator.namespace" . }}
43+
44+
Log4j2 will pick up the change within 30 seconds (monitorInterval="30" in the
45+
default configuration).
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
{{/*
2+
Expand the name of the chart.
3+
*/}}
4+
{{- define "josdk-operator.name" -}}
5+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
6+
{{- end }}
7+
8+
{{/*
9+
Create a default fully qualified app name.
10+
*/}}
11+
{{- define "josdk-operator.fullname" -}}
12+
{{- if .Values.fullnameOverride }}
13+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
14+
{{- else }}
15+
{{- $name := default .Chart.Name .Values.nameOverride }}
16+
{{- if contains $name .Release.Name }}
17+
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
18+
{{- else }}
19+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
20+
{{- end }}
21+
{{- end }}
22+
{{- end }}
23+
24+
{{/*
25+
Chart label.
26+
*/}}
27+
{{- define "josdk-operator.chart" -}}
28+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
29+
{{- end }}
30+
31+
{{/*
32+
Common labels applied to every resource.
33+
*/}}
34+
{{- define "josdk-operator.labels" -}}
35+
helm.sh/chart: {{ include "josdk-operator.chart" . }}
36+
{{ include "josdk-operator.selectorLabels" . }}
37+
{{- if .Chart.AppVersion }}
38+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
39+
{{- end }}
40+
app.kubernetes.io/managed-by: {{ .Release.Service }}
41+
{{- end }}
42+
43+
{{/*
44+
Selector labels used in Deployment and Service selectors.
45+
*/}}
46+
{{- define "josdk-operator.selectorLabels" -}}
47+
app.kubernetes.io/name: {{ include "josdk-operator.name" . }}
48+
app.kubernetes.io/instance: {{ .Release.Name }}
49+
{{- end }}
50+
51+
{{/*
52+
ServiceAccount name.
53+
*/}}
54+
{{- define "josdk-operator.serviceAccountName" -}}
55+
{{- if .Values.serviceAccount.create }}
56+
{{- default (include "josdk-operator.fullname" .) .Values.serviceAccount.name }}
57+
{{- else }}
58+
{{- default "default" .Values.serviceAccount.name }}
59+
{{- end }}
60+
{{- end }}
61+
62+
{{/*
63+
Deployment namespace.
64+
*/}}
65+
{{- define "josdk-operator.namespace" -}}
66+
{{- default .Release.Namespace .Values.namespace }}
67+
{{- end }}
68+
69+
{{/*
70+
Name of the JOSDK config ConfigMap.
71+
*/}}
72+
{{- define "josdk-operator.configMapName" -}}
73+
{{- default (printf "%s-config" (include "josdk-operator.fullname" .)) .Values.josdkConfig.configMapName }}
74+
{{- end }}
75+
76+
{{/*
77+
Name of the log4j2 ConfigMap.
78+
*/}}
79+
{{- define "josdk-operator.log4j2ConfigMapName" -}}
80+
{{- default (printf "%s-log4j2" (include "josdk-operator.fullname" .)) .Values.log4j2.configMapName }}
81+
{{- end }}
82+
83+
{{/*
84+
JAVA_TOOL_OPTIONS / JVM args value.
85+
Appends the log4j2 config file system property automatically when log4j2 is enabled.
86+
*/}}
87+
{{- define "josdk-operator.jvmArgs" -}}
88+
{{- $args := .Values.jvmArgs | default "" }}
89+
{{- if .Values.log4j2.enabled }}
90+
{{- $args = printf "%s -Dlog4j2.configurationFile=%s/log4j2.xml" $args .Values.log4j2.mountPath | trim }}
91+
{{- end }}
92+
{{- $args }}
93+
{{- end }}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
{{- if .Values.rbac.create }}
2+
apiVersion: rbac.authorization.k8s.io/v1
3+
kind: ClusterRole
4+
metadata:
5+
name: {{ include "josdk-operator.fullname" . }}
6+
labels:
7+
{{- include "josdk-operator.labels" . | nindent 4 }}
8+
rules:
9+
# Required for JOSDK to install / validate CRDs on startup.
10+
- apiGroups: ["apiextensions.k8s.io"]
11+
resources: ["customresourcedefinitions"]
12+
verbs: ["get", "list", "watch", "create", "update", "patch"]
13+
# Required for leader-election (if used).
14+
- apiGroups: ["coordination.k8s.io"]
15+
resources: ["leases"]
16+
verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
17+
# Required for JOSDK event-source on ConfigMaps / Secrets (optional; remove if not needed).
18+
- apiGroups: [""]
19+
resources: ["events"]
20+
verbs: ["create", "patch"]
21+
# Add your operator's custom resource rules here via values.rbac.additionalRules, e.g.:
22+
# additionalRules:
23+
# - apiGroups: ["mygroup.example.com"]
24+
# resources: ["myresources", "myresources/status"]
25+
# verbs: ["*"]
26+
{{- with .Values.rbac.additionalRules }}
27+
{{- toYaml . | nindent 2 }}
28+
{{- end }}
29+
---
30+
apiVersion: rbac.authorization.k8s.io/v1
31+
kind: ClusterRoleBinding
32+
metadata:
33+
name: {{ include "josdk-operator.fullname" . }}
34+
labels:
35+
{{- include "josdk-operator.labels" . | nindent 4 }}
36+
roleRef:
37+
apiGroup: rbac.authorization.k8s.io
38+
kind: ClusterRole
39+
name: {{ include "josdk-operator.fullname" . }}
40+
subjects:
41+
- kind: ServiceAccount
42+
name: {{ include "josdk-operator.serviceAccountName" . }}
43+
namespace: {{ include "josdk-operator.namespace" . }}
44+
{{- end }}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{{- if .Values.josdkConfig.enabled }}
2+
apiVersion: v1
3+
kind: ConfigMap
4+
metadata:
5+
name: {{ include "josdk-operator.configMapName" . }}
6+
namespace: {{ include "josdk-operator.namespace" . }}
7+
labels:
8+
{{- include "josdk-operator.labels" . | nindent 4 }}
9+
data:
10+
# All key-value pairs are written into josdk.properties.
11+
# The operator reads this file via a file-backed ConfigProvider and passes it
12+
# to ConfigLoader. See the ConfigLoader javadoc for supported property keys.
13+
#
14+
# Example operator-level keys:
15+
# josdk.reconciliation.concurrent-threads=4
16+
# josdk.informer.stop-on-error-during-startup=false
17+
# josdk.informer.cache-sync-timeout=PT30S
18+
#
19+
# Example controller-level keys (replace "my-controller" with the lower-cased
20+
# reconciler class name):
21+
# josdk.controller.my-controller.retry.max-attempts=5
22+
# josdk.controller.my-controller.retry.initial-interval=1000
23+
# josdk.controller.my-controller.retry.interval-multiplier=1.5
24+
# josdk.controller.my-controller.retry.max-interval=60000
25+
# josdk.controller.my-controller.rate-limiter.limit-for-period=10
26+
# josdk.controller.my-controller.rate-limiter.refresh-period=PT1S
27+
josdk.properties: |
28+
{{- range $key, $value := .Values.josdkConfig.properties }}
29+
{{ $key }}={{ $value }}
30+
{{- end }}
31+
{{- end }}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{{- if .Values.log4j2.enabled }}
2+
apiVersion: v1
3+
kind: ConfigMap
4+
metadata:
5+
name: {{ include "josdk-operator.log4j2ConfigMapName" . }}
6+
namespace: {{ include "josdk-operator.namespace" . }}
7+
labels:
8+
{{- include "josdk-operator.labels" . | nindent 4 }}
9+
data:
10+
log4j2.xml: |
11+
{{- if .Values.log4j2.xmlOverride }}
12+
{{- .Values.log4j2.xmlOverride | nindent 4 }}
13+
{{- else }}
14+
<?xml version="1.0" encoding="UTF-8"?>
15+
<Configuration status="WARN" monitorInterval="30">
16+
<Appenders>
17+
<Console name="Console" target="SYSTEM_OUT">
18+
<!--
19+
Pattern includes JOSDK MDC context keys so that every log line
20+
shows which resource and event source triggered the message.
21+
-->
22+
<PatternLayout pattern="%d{ISO8601} %threadId %-30c{1.} [%-5level] %msg p:[%X{resource.name}:%X{resource.namespace}:%X{resource.resourceVersion}] e:[%X{eventsource.name}:%X{eventsource.event.action}:%X{eventsource.event.resource.name}:%X{eventsource.event.resource.namespace}:%X{eventsource.event.resource.resourceVersion}] %n%throwable"/>
23+
</Console>
24+
</Appenders>
25+
<Loggers>
26+
{{- range $logger, $level := .Values.log4j2.loggers }}
27+
<Logger name="{{ $logger }}" level="{{ $level }}" additivity="false">
28+
<AppenderRef ref="Console"/>
29+
</Logger>
30+
{{- end }}
31+
<Root level="{{ .Values.log4j2.rootLevel }}">
32+
<AppenderRef ref="Console"/>
33+
</Root>
34+
</Loggers>
35+
</Configuration>
36+
{{- end }}
37+
{{- end }}

0 commit comments

Comments
 (0)