From b22b7376a3da803c28caedbd901f0ccdbda57594 Mon Sep 17 00:00:00 2001 From: alice Date: Sun, 25 Jun 2023 19:16:34 +0000 Subject: [PATCH] add romm --- Makefile | 14 +- charts/README.md | 3 +- charts/stable/romm/Chart.lock | 6 + charts/stable/romm/Chart.yaml | 40 +++++ charts/stable/romm/charts/mariadb-11.0.14.tgz | Bin 0 -> 46375 bytes charts/stable/romm/templates/NOTES.txt | 21 +++ charts/stable/romm/templates/_helpers.tpl | 138 ++++++++++++++++++ charts/stable/romm/templates/deployment.yaml | 109 ++++++++++++++ charts/stable/romm/templates/ingress.yaml | 41 ++++++ charts/stable/romm/templates/pvc.yaml | 28 ++++ charts/stable/romm/templates/secrets.yaml | 7 + charts/stable/romm/templates/service.yaml | 12 ++ charts/stable/romm/values.yaml | 97 ++++++++++++ 13 files changed, 512 insertions(+), 4 deletions(-) create mode 100644 charts/stable/romm/Chart.lock create mode 100644 charts/stable/romm/Chart.yaml create mode 100644 charts/stable/romm/charts/mariadb-11.0.14.tgz create mode 100644 charts/stable/romm/templates/NOTES.txt create mode 100644 charts/stable/romm/templates/_helpers.tpl create mode 100644 charts/stable/romm/templates/deployment.yaml create mode 100644 charts/stable/romm/templates/ingress.yaml create mode 100644 charts/stable/romm/templates/pvc.yaml create mode 100644 charts/stable/romm/templates/secrets.yaml create mode 100644 charts/stable/romm/templates/service.yaml create mode 100644 charts/stable/romm/values.yaml diff --git a/Makefile b/Makefile index e04ea5f..dd00f45 100644 --- a/Makefile +++ b/Makefile @@ -5,14 +5,22 @@ configure: @mkdir -p _build/ helm repo add bitnami https://charts.bitnami.com/bitnami -homebox: configure - helm lint charts/stable/homebox/ +homebox_ci: helm dependency build charts/stable/homebox/ + helm lint charts/stable/homebox/ +homebox: configure homebox_ci helm package charts/stable/homebox/ -d _build/ +romm_ci: + helm dependency build charts/stable/romm/ + helm lint charts/stable/romm/ +romm: configure romm_ci + helm package charts/stable/romm/ -d _build/ + index: curl -L -o _build/index.yaml https://charts.coo-ops.space/index.yaml helm repo index _build/ --url https://charts.coo-ops.space --merge index.yaml -stable: homebox +ci: homebox_ci romm_ci +stable: homebox romm all: stable index \ No newline at end of file diff --git a/charts/README.md b/charts/README.md index 6dc7c0a..a3a3ae7 100644 --- a/charts/README.md +++ b/charts/README.md @@ -2,4 +2,5 @@ ### Stable charts: | Chart | Description | | ----- | ----------- | -| [homebox](stable/homebox) | Homebox is the inventory and organization system built for the Home User | \ No newline at end of file +| [homebox](stable/homebox) | Homebox is the inventory and organization system built for the Home User | +| [romm](stable/romm) | Romm is a rom manager for all your local rom backup needs | \ No newline at end of file diff --git a/charts/stable/romm/Chart.lock b/charts/stable/romm/Chart.lock new file mode 100644 index 0000000..77ac677 --- /dev/null +++ b/charts/stable/romm/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: mariadb + repository: https://charts.bitnami.com/bitnami + version: 11.0.14 +digest: sha256:ecbf12680948a285c2fa529ab2096ee8f46d056382cecc16db4b469ed8b17216 +generated: "2023-06-25T19:08:44.147546695Z" diff --git a/charts/stable/romm/Chart.yaml b/charts/stable/romm/Chart.yaml new file mode 100644 index 0000000..fdded60 --- /dev/null +++ b/charts/stable/romm/Chart.yaml @@ -0,0 +1,40 @@ +apiVersion: v2 +name: romm +# This is the chart version. +version: 0.1.0 +# A SemVer range of compatible Kubernetes versions (optional) +# kubeVersion: ">=1.16.0-0" +# What is this Application? +description: "ROMM (Rom Manager) is a web based retro roms manager integrated with IGDB. " +type: application +# Meta Keywords +keywords: + - organisation + - inventory + - ROMs + - Backups +# The URL of this projects home page +home: https://github.com/zurdi15/romm +# A list of URLs to source code for this project +sources: + - https://hub.docker.com/r/zurdi15/romm +dependencies: + - name: mariadb + version: 11.0.14 + repository: https://charts.bitnami.com/bitnami + condition: mariadb.enabled +# Who's looking after this Chart? +maintainers: + - name: Kyle Coo-ops + email: kyle@coo-ops.space + url: https://git.coo-ops.space/cooper + - name: Alice + email: alice@stacktonic.com.au + url: https://github.com/HunterNyan +# A URL to an SVG or PNG image to be used as an icon (optional). +icon: https://raw.githubusercontent.com/zurdi15/romm/master/romm.svg + +# This is the version number of the application being deployed. This version number should be +appVersion: "v1.8.4" +# Whether this chart is deprecated (optional, boolean) +deprecated: false \ No newline at end of file diff --git a/charts/stable/romm/charts/mariadb-11.0.14.tgz b/charts/stable/romm/charts/mariadb-11.0.14.tgz new file mode 100644 index 0000000000000000000000000000000000000000..a3a4840ca8a27ebe78101ef679c5c2c11dc98d8b GIT binary patch literal 46375 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 literal 0 HcmV?d00001 diff --git a/charts/stable/romm/templates/NOTES.txt b/charts/stable/romm/templates/NOTES.txt new file mode 100644 index 0000000..74a70ba --- /dev/null +++ b/charts/stable/romm/templates/NOTES.txt @@ -0,0 +1,21 @@ +1. Get the application URL by running these commands: +{{- if .Values.ingress.enabled }} +{{- range $host := .Values.ingress.hosts }} + {{- range .paths }} + http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ . }} + {{- end }} +{{- end }} +{{- else if contains "NodePort" .Values.service.type }} + export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "Speedtest-Tracker.fullname" . }}) + export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") + echo http://$NODE_IP:$NODE_PORT +{{- else if contains "LoadBalancer" .Values.service.type }} + NOTE: It may take a few minutes for the LoadBalancer IP to be available. + You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "Speedtest-Tracker.fullname" . }}' + export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "Speedtest-Tracker.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") + echo http://$SERVICE_IP:{{ .Values.service.port }} +{{- else if contains "ClusterIP" .Values.service.type }} + export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "Speedtest-Tracker.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") + echo "Visit http://127.0.0.1:8080 to use your application" + kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:80 +{{- end }} \ No newline at end of file diff --git a/charts/stable/romm/templates/_helpers.tpl b/charts/stable/romm/templates/_helpers.tpl new file mode 100644 index 0000000..6e859ef --- /dev/null +++ b/charts/stable/romm/templates/_helpers.tpl @@ -0,0 +1,138 @@ +{{/* +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). +*/}} +{{- define "romm.mariadb.fullname" -}} +{{- printf "%s-%s" .Release.Name "mariadb" | trunc 63 | trimSuffix "-" -}} +{{- end -}} +{{/* +Return the MariaDB Hostname +*/}} +{{- define "romm.databaseHost" -}} +{{- if .Values.mariadb.enabled }} + {{- if eq .Values.mariadb.architecture "replication" }} + {{- printf "%s-%s" (include "romm.mariadb.fullname" .) "primary" | trunc 63 | trimSuffix "-" -}} + {{- else -}} + {{- printf "%s" (include "romm.mariadb.fullname" .) -}} + {{- end -}} +{{- else -}} + {{- printf "%s" .Values.externalDatabase.host -}} +{{- end -}} +{{- end -}} + +{{/* +Return the MariaDB Port +*/}} +{{- define "romm.databasePort" -}} +{{- if .Values.mariadb.enabled }} + {{- printf "3306" -}} +{{- else -}} + {{- printf "%d" (.Values.externalDatabase.port | int ) -}} +{{- end -}} +{{- end -}} + +{{/* +Return the MariaDB Database Name +*/}} +{{- define "romm.databaseName" -}} +{{- if .Values.mariadb.enabled }} + {{- printf "%s" .Values.mariadb.auth.database -}} +{{- else -}} + {{- printf "%s" .Values.externalDatabase.database -}} +{{- end -}} +{{- end -}} + +{{/* +Return the MariaDB User +*/}} +{{- define "romm.databaseUser" -}} +{{- if .Values.mariadb.enabled }} + {{- printf "%s" .Values.mariadb.auth.username -}} +{{- else -}} + {{- printf "%s" .Values.externalDatabase.user -}} +{{- end -}} +{{- end -}} + +{{/* +Return the MariaDB Secret Name +*/}} +{{- define "romm.databaseSecretName" -}} +{{- if .Values.mariadb.enabled }} + {{- printf "%s" (include "romm.mariadb.fullname" .) -}} +{{- else if .Values.externalDatabase.existingSecret -}} + {{- printf "%s" .Values.externalDatabase.existingSecret -}} +{{- else -}} + {{- printf "%s-%s" .Release.Name "externaldb" -}} +{{- end -}} +{{- end -}} +{{/* +Expand the name of the chart. +*/}} +{{- define "romm.name" -}} + {{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +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 "romm.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 }} + +{{/* +Create chart name and version as used by the chart label. +*/}} +{{- define "romm.chart" -}} + {{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- end }} + +{{/* +Common labels +*/}} +{{- define "romm.labels" -}} +helm.sh/chart: {{ include "romm.chart" . }} +{{ include "romm.selectorLabels" . }} +{{- if .Chart.AppVersion }} +app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} +{{- end }} +app.kubernetes.io/managed-by: {{ .Release.Service }} +{{- end }} + +{{/* +Selector labels +*/}} +{{- define "romm.selectorLabels" -}} +app.kubernetes.io/name: {{ include "romm.name" . }} +app.kubernetes.io/instance: {{ .Release.Name }} +{{- end }} + +{{/* +Storage Class +*/}} +{{- define "romm.persistence.storageClass" -}} +{{- $storageClass := .Values.persistence.storageClass }} +{{- if $storageClass }} +storageClassName: {{ $storageClass | quote }} +{{- end }} +{{- end -}} + + +{{- define "romm.container-additional-mounts" -}} + {{- /* Honor the deprecated extraVolumeMounts variable when defined */ -}} + {{- if gt (len .Values.extraContainerVolumeMounts) 0 -}} + {{- toYaml .Values.extraContainerVolumeMounts -}} + {{- else if gt (len .Values.extraVolumeMounts) 0 -}} + {{- toYaml .Values.extraVolumeMounts -}} + {{- end -}} +{{- end -}} \ No newline at end of file diff --git a/charts/stable/romm/templates/deployment.yaml b/charts/stable/romm/templates/deployment.yaml new file mode 100644 index 0000000..dd80cb6 --- /dev/null +++ b/charts/stable/romm/templates/deployment.yaml @@ -0,0 +1,109 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ include "romm.fullname" . }} + namespace: {{ .Values.namespace }} + labels: + {{- include "romm.labels" . | nindent 4 }} +spec: + replicas: {{ .Values.replicaCount }} + selector: + matchLabels: + {{- include "romm.selectorLabels" . | nindent 6 }} + template: + metadata: + {{- with .Values.podAnnotations }} + annotations: + {{- toYaml . | nindent 8 }} + {{- end }} + labels: + {{- include "romm.selectorLabels" . | nindent 8 }} + spec: + {{- with .Values.imagePullSecrets }} + imagePullSecrets: + {{- toYaml . | nindent 8 }} + {{- end }} + securityContext: + {{- toYaml .Values.podSecurityContext | nindent 8 }} + containers: + - name: {{ .Chart.Name }} + securityContext: + {{- toYaml .Values.securityContext | nindent 12 }} + image: "{{ .Values.www.image }}:{{ .Values.www.tag | default .Chart.AppVersion }}" + imagePullPolicy: {{ .Values.www.pullPolicy }} + env: + - name: ROMM_DB_DRIVER + value: mariadb + - name: DB_HOST + value: {{ include "romm.databaseHost" .}}:{{include "romm.databasePort" .}} + - name: DB_NAME + value: {{ include "romm.databaseName" . | quote }} + - name: DB_PASSWD + valueFrom: + secretKeyRef: + key: mariadb-password + name: {{ include "romm.databaseSecretName" . | quote }} + - name: DB_USER + value: {{ include "romm.databaseUser" . | quote }} + + - name: CLIENT_ID + valueFrom: + secretKeyRef: + key: CLIENT_ID + name: {{ .Release.Name }}-config + - name: CLIENT_SECRET + valueFrom: + secretKeyRef: + key: CLIENT_SECRET + name: {{ .Release.Name }}-config + - name: STEAMGRIDDB_API_KEY + valueFrom: + secretKeyRef: + key: STEAMGRIDDB_API_KEY + name: {{ .Release.Name }}-config + ports: + - name: http + containerPort: 80 + protocol: TCP + resources: + {{- toYaml .Values.resources | nindent 12 }} + volumeMounts: + - name: data + mountPath: /romm + {{- if .Values.persistence.subPath }} + subPath: {{ .Values.persistence.subPath }} + {{- end }} + volumes: + {{- if gt (len .Values.extraVolumes) 0 }} + {{- toYaml .Values.extraVolumes | nindent 8 }} + {{- end }} + {{- if and .Values.persistence.enabled .Values.persistence.existingClaim }} + - name: data + persistentVolumeClaim: + {{- with .Values.persistence.existingClaim }} + claimName: {{ tpl . $ }} + {{- end }} + {{- else if not .Values.persistence.enabled }} + - name: data + emptyDir: {} + {{- else if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }} + - name: data + persistentVolumeClaim: + claimName: {{ include "romm.fullname" . }}-pvc + {{- end }} + {{- with .Values.nodeSelector }} + nodeSelector: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.affinity }} + affinity: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.tolerations }} + tolerations: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.dnsConfig }} + dnsConfig: + {{- toYaml . | nindent 8 }} + {{- end }} \ No newline at end of file diff --git a/charts/stable/romm/templates/ingress.yaml b/charts/stable/romm/templates/ingress.yaml new file mode 100644 index 0000000..d247a9d --- /dev/null +++ b/charts/stable/romm/templates/ingress.yaml @@ -0,0 +1,41 @@ +{{- if .Values.ingress.enabled -}} +{{- $serviceName := .Release.Name -}} + +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ .Release.Name }} + {{- with .Values.ingress.annotations }} + annotations: + {{- toYaml . | nindent 4 }} + {{- end }} +spec: +{{- if .Values.ingress.className }} + ingressClassName: {{ .Values.ingress.className }} +{{- end }} +{{- if .Values.ingress.tls }} + tls: + {{- range .Values.ingress.tls }} + - hosts: + {{- range .hosts }} + - {{ . | quote }} + {{- end }} + secretName: {{ .secretName }} + {{- end }} +{{- end }} + rules: + {{- range .Values.ingress.hosts }} + - host: {{ .host | quote }} + http: + paths: + {{- range .paths }} + - path: {{ .path }} + pathType: {{ .pathType }} + backend: + service: + name: {{ $serviceName }} + port: + number: 80 + {{- end }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/charts/stable/romm/templates/pvc.yaml b/charts/stable/romm/templates/pvc.yaml new file mode 100644 index 0000000..5f91b99 --- /dev/null +++ b/charts/stable/romm/templates/pvc.yaml @@ -0,0 +1,28 @@ +{{- if and .Values.persistence.enabled (not .Values.persistence.existingClaim) }} +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + namespace: {{ .Values.namespace }} + name: {{ include "romm.fullname" . }}-pvc + {{- with .Values.persistence.annotations }} + annotations: + {{- range $key, $value := . }} + {{ $key }}: {{ $value }} + {{- end }} + {{- end }} + {{- with .Values.persistence.labels }} + labels: + {{- range $key, $value := . }} + {{ $key }}: {{ $value }} + {{- end }} + {{- end }} +spec: + accessModes: + {{- range .Values.persistence.accessModes }} + - {{ . | quote }} + {{- end }} + {{- include "romm.persistence.storageClass" . | indent 8 }} + resources: + requests: + storage: {{ .Values.persistence.size | quote }} +{{- end }} \ No newline at end of file diff --git a/charts/stable/romm/templates/secrets.yaml b/charts/stable/romm/templates/secrets.yaml new file mode 100644 index 0000000..c8a8750 --- /dev/null +++ b/charts/stable/romm/templates/secrets.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: Secret +metadata: + name: {{ .Release.Name }}-config + namespace: {{ .Values.namespace }} +data: +{{- toYaml .Values.romm.env | nindent 2 }} diff --git a/charts/stable/romm/templates/service.yaml b/charts/stable/romm/templates/service.yaml new file mode 100644 index 0000000..7d28219 --- /dev/null +++ b/charts/stable/romm/templates/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Release.Name }} + namespace: {{ .Values.namespace }} + labels: + app: {{ .Release.Name }} +spec: + ports: + - port: 80 + selector: + app: {{ .Release.Name }} diff --git a/charts/stable/romm/values.yaml b/charts/stable/romm/values.yaml new file mode 100644 index 0000000..9029335 --- /dev/null +++ b/charts/stable/romm/values.yaml @@ -0,0 +1,97 @@ +# Default values for homebox. +# This is a YAML-formatted file. + +# Namespace to use. +namespace: romm + +# Replica's to Deploy. +replicaCount: 1 + +# Image to use. +www: + image: zurdi15/romm + pullPolicy: Always + tag: "v1.8.4" + +# Overrides. +imagePullSecrets: [] +nameOverride: "" +fullnameOverride: "" + +romm: + env: + CLIENT_ID + CLIENT_SECRET + STEAMGRIDDB_API_KEY + +ingress: + enabled: true + className: "nginx" + tls: + - secretName: romm-domain-tls + hosts: + - romm.example.com + hosts: + - host: romm.example.com + paths: + - path: / + pathType: Prefix + +persistence: + enabled: true + existingClaim: + size: 10Gi + accessModes: + - ReadWriteOnce + labels: {} + annotations: {} + storageClass: + subPath: + +extraVolumes: [] +extraContainerVolumeMounts: [] + + +## MariaDB chart configuration +## https://github.com/bitnami/charts/blob/main/bitnami/mariadb/values.yaml +## +mariadb: + enabled: true + primary: + persistence: + enabled: true + storageClass: "" + accessModes: + - ReadWriteOnce + size: 8Gi + ## Use an existing PVC + ## + existingClaim: "" + auth: + username: "dmarc" + password: "password" + database: dmarc + + +## External database configuration +## +externalDatabase: + ## @param externalDatabase.existingSecret Name of the database existing Secret Object + ## NOTE: When it's set, the `externalDatabase.password` parameter is ignored + ## + existingSecret: "" + ## @param externalDatabase.host Host of the existing database + ## + host: "" + ## @param externalDatabase.port Port of the existing database + ## + port: 3306 + ## @param externalDatabase.user Existing username in the external db + ## + user: dmarc + ## @param externalDatabase.password Password for the above username + ## + password: "" + ## @param externalDatabase.database Name of the existing database + ## + database: dmarc \ No newline at end of file