Skip to content
Clone
main
154 lines 6.0 KB HTML
{{- define "gitdata.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "gitdata.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- define "gitdata.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- define "gitdata.labels" -}}
helm.sh/chart: {{ include "gitdata.chart" . }}
app.kubernetes.io/name: {{ include "gitdata.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- end -}}
{{- define "gitdata.selectorLabels" -}}
app.kubernetes.io/name: {{ include "gitdata.name" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
{{- end -}}
{{- define "gitdata.serviceAccountName" -}}
{{- if .Values.serviceAccount.create -}}
{{- default (include "gitdata.fullname" .) .Values.serviceAccount.name -}}
{{- else -}}
{{- default "default" .Values.serviceAccount.name -}}
{{- end -}}
{{- end -}}
{{- define "gitdata.image" -}}
{{- $tag := default .Chart.AppVersion .Values.image.tag -}}
{{- printf "%s:%s" .Values.image.repository $tag -}}
{{- end -}}
{{- define "gitdata.secretName" -}}
{{- if .Values.secret.existingSecret -}}
{{- .Values.secret.existingSecret -}}
{{- else -}}
{{- printf "%s-env" (include "gitdata.fullname" .) -}}
{{- end -}}
{{- end -}}
{{/* 组件通用 env:端口/路径/URL 由 values 结构字段生成,用户 config.env 可覆盖 */}}
{{- define "gitdata.env" -}}
- name: APP_APIHOST__PORT
value: {{ .Values.apihost.port | quote }}
- name: APP_INTERNAL__RPC__LISTEN_ADDRESS
value: {{ printf "0.0.0.0:%v" .Values.apihost.rpcPort | quote }}
- name: APP_INTERNAL__EVENT_CLIENT__ENDPOINT
value: {{ printf "http://%s-event:%v" (include "gitdata.fullname" .) .Values.event.rpcPort | quote }}
{{- if .Values.event.enabled }}
- name: APP_EVENT__SOCKET__LISTEN_ADDRESS
value: {{ printf "0.0.0.0:%v" .Values.event.socketPort | quote }}
- name: APP_EVENT__RPC__LISTEN_ADDRESS
value: {{ printf "0.0.0.0:%v" .Values.event.rpcPort | quote }}
- name: APP_EVENT__PLATFORM__RPC_ENDPOINT
value: {{ printf "http://%s-apihost:%v" (include "gitdata.fullname" .) .Values.apihost.rpcPort | quote }}
- name: APP_EVENT__PLATFORM__RESOURCE_API_ENDPOINT
value: {{ printf "http://%s-apihost:%v/api/v1" (include "gitdata.fullname" .) .Values.apihost.port | quote }}
{{- end }}
{{- if .Values.identityKey.secretName }}
- name: APP_EVENT__RPC__IDENTITY_PRIVATE_KEY__FILE
value: {{ printf "%s/identity-private.pem" .Values.identityKey.mountPath | quote }}
- name: APP_INTERNAL__EVENT_CLIENT__PUBLIC_KEY__FILE
value: {{ printf "%s/identity-public.pem" .Values.identityKey.mountPath | quote }}
{{- end }}
- name: APP_GIT__KENSHELL_ENDPOINT
value: {{ .Values.kenshell.endpoint | quote }}
- name: APP_GIT__KENSHELL_RPC_KEY
value: {{ .Values.kenshell.rpcKey | quote }}
- name: APP_GIT__KENSHELL_TIMEOUT_SECS
value: {{ .Values.kenshell.timeoutSecs | quote }}
- name: APP_GIT__SSH_CLONE_HOST
value: {{ .Values.kenshell.sshCloneHost | quote }}
- name: APP_GIT__SSH_CLONE_PORT
value: {{ .Values.kenshell.sshClonePort | quote }}
{{- $base := printf "https://%s" .Values.ingress.host }}
- name: APP_WEB__WEB_BASE_URL
value: {{ default $base .Values.config.env.APP_WEB__WEB_BASE_URL | quote }}
- name: APP_GIT__BASE_URL
value: {{ default $base .Values.config.env.APP_GIT__BASE_URL | quote }}
{{- $cloneBase := default $base .Values.kenshell.httpCloneBaseUrl }}
- name: APP_GIT__HTTP_CLONE_BASE_URL
value: {{ default $cloneBase .Values.config.env.APP_GIT__HTTP_CLONE_BASE_URL | quote }}
{{- if .Values.metrics.otlpEndpoint }}
- name: OTEL_EXPORTER_OTLP_ENDPOINT
value: {{ .Values.metrics.otlpEndpoint | quote }}
# 服务名取各自的 component label(downward API),一处覆盖全部 workload;
# 不设的话所有进程在观测端会塌成一个 unknown_service:<bin>。
- name: OTEL_SERVICE_NAME
valueFrom:
fieldRef:
fieldPath: "metadata.labels['app.kubernetes.io/component']"
{{- end }}
{{- range $k, $v := .Values.config.env }}
{{- if and (not (hasPrefix "APP_WEB__WEB_BASE_URL" $k)) (not (hasPrefix "APP_GIT__BASE_URL" $k)) (not (hasPrefix "APP_GIT__HTTP_CLONE_BASE_URL" $k)) }}
{{/* config.env 走容器 env:,secret.env 走 envFrom:;同名时 env: 优先级更高,
会静默覆盖 Secret 里的真实值(例如把连接串换成 chart 默认的 redis://redis-master)。
因此这里跳过任何已在 secret.env 中声明的键,让 Secret 成为唯一来源。 */}}
{{- if not (hasKey $.Values.secret.env $k) }}
- name: {{ $k }}
value: {{ $v | quote }}
{{- end }}
{{- end }}
{{- end }}
{{- end -}}
{{- define "gitdata.envFrom" -}}
envFrom:
- configMapRef:
name: {{ printf "%s-env" (include "gitdata.fullname" .) }}
- secretRef:
name: {{ include "gitdata.secretName" . }}
optional: true
{{- end -}}
{{/* 抗节点故障软反亲和 */}}
{{- define "gitdata.podAntiAffinity" -}}
{{- $ctx := .ctx -}}
podAntiAffinity:
{{ if eq .mode "hard" }}requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels: {{- include "gitdata.selectorLabels" $ctx | nindent 10 }}
app.kubernetes.io/component: {{ .component }}
topologyKey: kubernetes.io/hostname
{{ else if eq .mode "soft" }}preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels: {{- include "gitdata.selectorLabels" $ctx | nindent 12 }}
app.kubernetes.io/component: {{ .component }}
topologyKey: kubernetes.io/hostname
{{ end }}
{{- end -}}
{{- define "gitdata.imagePullSecrets" -}}
{{- with .Values.imagePullSecrets }}
imagePullSecrets:
{{- toYaml . | nindent 2 }}
{{- end }}
{{- end -}}