Files
cloudflare_ddns/charts/cloudflare-ddns/templates/deployment.yaml
qitpydev 7564cb14f0 feat: add Helm chart with GHCR OCI publish workflow
- Add charts/cloudflare-ddns/ Helm chart (env-var config, hostNetwork by default)
- Add .github/workflows/helm.yml — lint → package → push to oci://ghcr.io/timothymiller
- Update README Kubernetes section with Helm install guide (quick install, values.yaml, upgrade/uninstall)
- Keep k8s/cloudflare-ddns.yml as legacy raw-manifest fallback
2026-06-09 16:22:54 +07:00

107 lines
3.8 KiB
YAML

apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ include "cloudflare-ddns.fullname" . }}
labels:
{{- include "cloudflare-ddns.labels" . | nindent 4 }}
spec:
replicas: {{ .Values.replicaCount }}
selector:
matchLabels:
{{- include "cloudflare-ddns.selectorLabels" . | nindent 6 }}
template:
metadata:
{{- with .Values.podAnnotations }}
annotations:
{{- toYaml . | nindent 8 }}
{{- end }}
labels:
{{- include "cloudflare-ddns.selectorLabels" . | nindent 8 }}
spec:
hostNetwork: {{ .Values.hostNetwork }}
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: CLOUDFLARE_API_TOKEN
valueFrom:
secretKeyRef:
name: {{ default (include "cloudflare-ddns.fullname" .) .Values.cloudflare.existingSecret }}
key: {{ .Values.cloudflare.existingSecretKey }}
{{- if .Values.domains }}
- name: DOMAINS
value: {{ .Values.domains | quote }}
{{- end }}
{{- if .Values.ip4Domains }}
- name: IP4_DOMAINS
value: {{ .Values.ip4Domains | quote }}
{{- end }}
{{- if .Values.ip6Domains }}
- name: IP6_DOMAINS
value: {{ .Values.ip6Domains | quote }}
{{- end }}
- name: IP4_PROVIDER
value: {{ .Values.ip4Provider | quote }}
- name: IP6_PROVIDER
value: {{ .Values.ip6Provider | quote }}
- name: UPDATE_CRON
value: {{ .Values.updateCron | quote }}
- name: UPDATE_ON_START
value: {{ .Values.updateOnStart | quote }}
- name: DELETE_ON_STOP
value: {{ .Values.deleteOnStop | quote }}
- name: TTL
value: {{ .Values.ttl | quote }}
- name: PROXIED
value: {{ .Values.proxied | quote }}
{{- if .Values.recordComment }}
- name: RECORD_COMMENT
value: {{ .Values.recordComment | quote }}
{{- end }}
{{- if .Values.managedRecordsCommentRegex }}
- name: MANAGED_RECORDS_COMMENT_REGEX
value: {{ .Values.managedRecordsCommentRegex | quote }}
{{- end }}
{{- if .Values.wafLists }}
- name: WAF_LISTS
value: {{ .Values.wafLists | quote }}
{{- end }}
{{- if .Values.shoutrrr }}
- name: SHOUTRRR
value: {{ .Values.shoutrrr | quote }}
{{- end }}
{{- if .Values.healthchecks }}
- name: HEALTHCHECKS
value: {{ .Values.healthchecks | quote }}
{{- end }}
{{- if .Values.uptimeKuma }}
- name: UPTIMEKUMA
value: {{ .Values.uptimeKuma | quote }}
{{- end }}
- name: DETECTION_TIMEOUT
value: {{ .Values.detectionTimeout | quote }}
- name: UPDATE_TIMEOUT
value: {{ .Values.updateTimeout | quote }}
- name: EMOJI
value: {{ .Values.emoji | quote }}
- name: QUIET
value: {{ .Values.quiet | quote }}
{{- with .Values.extraEnv }}
{{- toYaml . | nindent 12 }}
{{- end }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
{{- with .Values.nodeSelector }}
nodeSelector:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.affinity }}
affinity:
{{- toYaml . | nindent 8 }}
{{- end }}
{{- with .Values.tolerations }}
tolerations:
{{- toYaml . | nindent 8 }}
{{- end }}