diff --git a/kubernetes/apps/database/crunchy-postgres-operator/cluster/cluster.yaml b/kubernetes/apps/database/crunchy-postgres-operator/cluster/cluster.yaml index db4daa7d8..ba6fbe963 100644 --- a/kubernetes/apps/database/crunchy-postgres-operator/cluster/cluster.yaml +++ b/kubernetes/apps/database/crunchy-postgres-operator/cluster/cluster.yaml @@ -92,6 +92,10 @@ spec: databases: - paperless password: *password + - name: playnite + databases: + - playnite + password: *password - name: prowlarr databases: - prowlarr_main diff --git a/kubernetes/apps/default/kustomization.yaml b/kubernetes/apps/default/kustomization.yaml index 81ecc35f0..fa5549de4 100644 --- a/kubernetes/apps/default/kustomization.yaml +++ b/kubernetes/apps/default/kustomization.yaml @@ -32,6 +32,7 @@ resources: - ./opengist/ks.yaml - ./outline/ks.yaml - ./paperless/ks.yaml + - ./playnite/ks.yaml - ./prowlarr/ks.yaml - ./qbittorrent/ks.yaml - ./radarr/ks.yaml diff --git a/kubernetes/apps/default/playnite/app/externalsecret.yaml b/kubernetes/apps/default/playnite/app/externalsecret.yaml new file mode 100644 index 000000000..146fd60be --- /dev/null +++ b/kubernetes/apps/default/playnite/app/externalsecret.yaml @@ -0,0 +1,22 @@ +--- +apiVersion: external-secrets.io/v1 +kind: ExternalSecret +metadata: + name: playnite-db +spec: + secretStoreRef: + kind: ClusterSecretStore + name: crunchy-pgo-secrets + target: + name: playnite-db-secret + template: + engineVersion: v2 + data: + SYNC_SERVER_DB_NAME: '{{ index . "dbname" }}' + SYNC_SERVER_DB_HOST: '{{ index . "host" }}' + SYNC_SERVER_DB_USER: '{{ index . "user" }}' + SYNC_SERVER_DB_PASSWORD: '{{ index . "password" }}' + SYNC_SERVER_DB_PORT: '{{ index . "port" }}' + dataFrom: + - extract: + key: postgres-pguser-playnite diff --git a/kubernetes/apps/default/playnite/app/helmrelease.yaml b/kubernetes/apps/default/playnite/app/helmrelease.yaml new file mode 100644 index 000000000..0230edde1 --- /dev/null +++ b/kubernetes/apps/default/playnite/app/helmrelease.yaml @@ -0,0 +1,86 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/bjw-s/helm-charts/main/charts/other/app-template/schemas/helmrelease-helm-v2.schema.json +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: &app playnite +spec: + interval: 1h + chartRef: + kind: OCIRepository + name: app-template + install: + remediation: + retries: 3 + upgrade: + cleanupOnFail: true + remediation: + strategy: rollback + retries: 3 + values: + controllers: + playnite: + annotations: + reloader.stakater.com/auto: "true" + secret.reloader.stakater.com/reload: playnite-db-secret + containers: + app: + image: + repository: yalgrin/playnite-simple-sync-server + tag: 0.1.3 + env: + SYNC_SERVER_PORT: &port 8093 + SYNC_SERVER_LOG_DIR: /app/logs + SYNC_SERVER_METADATA_FOLDER: /app/metadata + SYNC_SERVER_MAX_FILE_SIZE: 100MB + envFrom: + - secretRef: + name: playnite-db-secret + probes: + liveness: &probes + enabled: true + custom: true + spec: + httpGet: + path: /api/health + port: *port + initialDelaySeconds: 0 + periodSeconds: 10 + timeoutSeconds: 1 + failureThreshold: 3 + readiness: *probes + securityContext: + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + capabilities: { drop: [ALL] } + resources: + requests: + cpu: 100m + limits: + memory: 500Mi + service: + app: + controller: *app + ports: + http: + port: *port + route: + app: + hostnames: ["{{ .Release.Name }}.${SECRET_EXTERNAL_DOMAIN}"] + parentRefs: + - name: internal + namespace: network + sectionName: https + rules: + - backendRefs: + - name: *app + port: *port + persistence: + metadata: + existingClaim: *app + globalMounts: + - path: /app/metadata + logs: + type: emptyDir + globalMounts: + - path: /app/logs diff --git a/kubernetes/apps/default/playnite/app/kustomization.yaml b/kubernetes/apps/default/playnite/app/kustomization.yaml new file mode 100644 index 000000000..ac5ae96e1 --- /dev/null +++ b/kubernetes/apps/default/playnite/app/kustomization.yaml @@ -0,0 +1,8 @@ +--- +# yaml-language-server: $schema=https://raw.githubusercontent.com/SchemaStore/schemastore/master/src/schemas/json/kustomization.json +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +namespace: default +resources: + - ./externalsecret.yaml + - ./helmrelease.yaml diff --git a/kubernetes/apps/default/playnite/ks.yaml b/kubernetes/apps/default/playnite/ks.yaml new file mode 100644 index 000000000..a4f831122 --- /dev/null +++ b/kubernetes/apps/default/playnite/ks.yaml @@ -0,0 +1,38 @@ +--- +# yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/kustomize.toolkit.fluxcd.io/kustomization_v1.json +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: &app playnite + namespace: &namespace default +spec: + commonMetadata: + labels: + app.kubernetes.io/name: *app + dependsOn: + - name: crunchy-postgres-operator-cluster + namespace: database + - name: external-secrets-stores + namespace: external-secrets + - name: rook-ceph-cluster + namespace: rook-ceph + - name: volsync + namespace: volsync + components: + - ../../../../components/gatus/guarded + - ../../../../components/volsync + interval: 1h + path: ./kubernetes/apps/default/playnite/app + postBuild: + substitute: + APP: *app + VOLSYNC_CAPACITY: 20Gi + prune: true + retryInterval: 2m + sourceRef: + kind: GitRepository + name: flux-system + namespace: flux-system + targetNamespace: *namespace + timeout: 5m + wait: false