From 1910172b63a063ede215325d37d6c8d9aedb6d7a Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Thu, 28 Sep 2023 18:14:32 +0300 Subject: [PATCH] add `flame` to `community` applications (#1578) * add `flame` to `community` applications * fix secCtx * mroe perms * add ui * remove extra word --- library/ix-dev/community/flame/Chart.lock | 6 + library/ix-dev/community/flame/Chart.yaml | 25 ++ library/ix-dev/community/flame/README.md | 3 + library/ix-dev/community/flame/app-readme.md | 3 + .../community/flame/charts/common-1.1.1.tgz | Bin 0 -> 61737 bytes .../community/flame/ci/basic-values.yaml | 10 + .../community/flame/ci/extra-values.yaml | 17 ++ .../community/flame/ci/hostNet-values.yaml | 11 + library/ix-dev/community/flame/item.yaml | 7 + library/ix-dev/community/flame/metadata.yaml | 14 ++ library/ix-dev/community/flame/questions.yaml | 218 ++++++++++++++++++ .../community/flame/templates/NOTES.txt | 1 + .../flame/templates/_configuration.tpl | 8 + .../community/flame/templates/_flame.tpl | 51 ++++ .../flame/templates/_persistence.tpl | 34 +++ .../community/flame/templates/_portal.tpl | 12 + .../community/flame/templates/_service.tpl | 15 ++ .../community/flame/templates/common.yaml | 12 + .../ix-dev/community/flame/upgrade_info.json | 1 + .../ix-dev/community/flame/upgrade_strategy | 31 +++ library/ix-dev/community/flame/values.yaml | 23 ++ 21 files changed, 502 insertions(+) create mode 100644 library/ix-dev/community/flame/Chart.lock create mode 100644 library/ix-dev/community/flame/Chart.yaml create mode 100644 library/ix-dev/community/flame/README.md create mode 100644 library/ix-dev/community/flame/app-readme.md create mode 100644 library/ix-dev/community/flame/charts/common-1.1.1.tgz create mode 100644 library/ix-dev/community/flame/ci/basic-values.yaml create mode 100644 library/ix-dev/community/flame/ci/extra-values.yaml create mode 100644 library/ix-dev/community/flame/ci/hostNet-values.yaml create mode 100644 library/ix-dev/community/flame/item.yaml create mode 100644 library/ix-dev/community/flame/metadata.yaml create mode 100644 library/ix-dev/community/flame/questions.yaml create mode 100644 library/ix-dev/community/flame/templates/NOTES.txt create mode 100644 library/ix-dev/community/flame/templates/_configuration.tpl create mode 100644 library/ix-dev/community/flame/templates/_flame.tpl create mode 100644 library/ix-dev/community/flame/templates/_persistence.tpl create mode 100644 library/ix-dev/community/flame/templates/_portal.tpl create mode 100644 library/ix-dev/community/flame/templates/_service.tpl create mode 100644 library/ix-dev/community/flame/templates/common.yaml create mode 100644 library/ix-dev/community/flame/upgrade_info.json create mode 100755 library/ix-dev/community/flame/upgrade_strategy create mode 100644 library/ix-dev/community/flame/values.yaml diff --git a/library/ix-dev/community/flame/Chart.lock b/library/ix-dev/community/flame/Chart.lock new file mode 100644 index 0000000000..33c099956b --- /dev/null +++ b/library/ix-dev/community/flame/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.1.1 +digest: sha256:a7dbe3e4d42dbcd4325776e5e01a1d630c7f185f79e7ebf22b1b9cc80f56eed7 +generated: "2023-09-26T17:46:33.418912325+03:00" diff --git a/library/ix-dev/community/flame/Chart.yaml b/library/ix-dev/community/flame/Chart.yaml new file mode 100644 index 0000000000..b08bfaaf2e --- /dev/null +++ b/library/ix-dev/community/flame/Chart.yaml @@ -0,0 +1,25 @@ +name: flame +description: Flame is a self-hosted start page for your server. +annotations: + title: Flame +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: 2.3.1 +kubeVersion: '>=1.16.0-0' +maintainers: + - name: truenas + url: https://www.truenas.com/ + email: dev@ixsystems.com +dependencies: + - name: common + repository: file://../../../common + version: 1.1.1 +home: https://github.com/pawelmalak/flame +icon: https://raw.githubusercontent.com/pawelmalak/flame/master/client/public/icons/favicon.ico +sources: + - https://hub.docker.com/r/pawelmalak/flame + - https://github.com/truenas/charts/tree/master/library/ix-dev/community/flame + - https://github.com/pawelmalak/flame +keywords: + - startpage diff --git a/library/ix-dev/community/flame/README.md b/library/ix-dev/community/flame/README.md new file mode 100644 index 0000000000..9ebe884c87 --- /dev/null +++ b/library/ix-dev/community/flame/README.md @@ -0,0 +1,3 @@ +# Flame + +[Flame](https://github.com/pawelmalak/flame) is a self-hosted start page for your server. diff --git a/library/ix-dev/community/flame/app-readme.md b/library/ix-dev/community/flame/app-readme.md new file mode 100644 index 0000000000..9ebe884c87 --- /dev/null +++ b/library/ix-dev/community/flame/app-readme.md @@ -0,0 +1,3 @@ +# Flame + +[Flame](https://github.com/pawelmalak/flame) is a self-hosted start page for your server. diff --git a/library/ix-dev/community/flame/charts/common-1.1.1.tgz b/library/ix-dev/community/flame/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c6499cc290a897454eae481d025222729c56bf29 GIT binary patch literal 61737 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 + schema: + type: boolean + default: false + + - variable: flameStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: data + label: Flame Data Storage + description: The path to store Flame Data. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "data" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: additionalStorages + label: Additional Storage + description: Additional storage for Flame. + schema: + type: list + default: [] + items: + - variable: storageEntry + label: Storage Entry + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: mountPath + label: Mount Path + description: The path inside the container to mount the storage. + schema: + type: path + required: true + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + required: true + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + immutable: true + default: "storage_entry" + $ref: + - "normalize/ixVolume" + + - variable: resources + group: Resources Configuration + label: "" + schema: + type: dict + attrs: + - variable: limits + label: Limits + schema: + type: dict + attrs: + - variable: cpu + label: CPU + description: CPU limit for Flame. + schema: + type: string + max_length: 6 + valid_chars: '^(0\.[1-9]|[1-9][0-9]*)(\.[0-9]|m?)$' + valid_chars_error: | + Valid CPU limit formats are
+ - Plain Integer - eg. 1
+ - Float - eg. 0.5
+ - Milicpu - eg. 500m + default: "4000m" + required: true + - variable: memory + label: Memory + description: Memory limit for Flame. + schema: + type: string + max_length: 12 + valid_chars: '^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$' + valid_chars_error: | + Valid Memory limit formats are
+ - Suffixed with E/P/T/G/M/K - eg. 1G
+ - Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
+ - Plain Integer in bytes - eg. 1024
+ - Exponent - eg. 134e6 + default: "8Gi" + required: true diff --git a/library/ix-dev/community/flame/templates/NOTES.txt b/library/ix-dev/community/flame/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/flame/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/flame/templates/_configuration.tpl b/library/ix-dev/community/flame/templates/_configuration.tpl new file mode 100644 index 0000000000..fa178320b7 --- /dev/null +++ b/library/ix-dev/community/flame/templates/_configuration.tpl @@ -0,0 +1,8 @@ +{{- define "flame.configuration" -}} +secret: + flame-config: + enabled: true + data: + PORT: {{ .Values.flameNetwork.webPort | quote }} + PASSWORD: {{ .Values.flameConfig.password | quote }} +{{- end -}} diff --git a/library/ix-dev/community/flame/templates/_flame.tpl b/library/ix-dev/community/flame/templates/_flame.tpl new file mode 100644 index 0000000000..e65eec4891 --- /dev/null +++ b/library/ix-dev/community/flame/templates/_flame.tpl @@ -0,0 +1,51 @@ +{{- define "flame.workload" -}} +workload: + flame: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.flameNetwork.hostNetwork }} + containers: + flame: + enabled: true + primary: true + imageSelector: image + securityContext: + # FIXME: https://github.com/pawelmalak/flame/pull/356 + runAsUser: 0 + runAsGroup: 0 + runAsNonRoot: false + readOnlyRootFilesystem: false + capabilities: + add: + - CHOWN + - DAC_OVERRIDE + - FOWNER + envFrom: + - secretRef: + name: flame-config + {{ with .Values.flameConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + port: {{ .Values.flameNetwork.webPort }} + path: / + readiness: + enabled: true + type: http + port: {{ .Values.flameNetwork.webPort }} + path: / + startup: + enabled: true + type: http + port: {{ .Values.flameNetwork.webPort }} + path: / +{{- end -}} diff --git a/library/ix-dev/community/flame/templates/_persistence.tpl b/library/ix-dev/community/flame/templates/_persistence.tpl new file mode 100644 index 0000000000..8fb7e6c992 --- /dev/null +++ b/library/ix-dev/community/flame/templates/_persistence.tpl @@ -0,0 +1,34 @@ +{{- define "flame.persistence" -}} +persistence: + data: + enabled: true + type: {{ .Values.flameStorage.data.type }} + datasetName: {{ .Values.flameStorage.data.datasetName | default "" }} + hostPath: {{ .Values.flameStorage.data.hostPath | default "" }} + targetSelector: + flame: + flame: + mountPath: /app/data + 01-permissions: + mountPath: /mnt/directories/data + tmp: + enabled: true + type: emptyDir + targetSelector: + flame: + flame: + mountPath: /tmp + {{- range $idx, $storage := .Values.flameStorage.additionalStorages }} + {{ printf "flame-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + flame: + flame: + mountPath: {{ $storage.mountPath }} + 01-permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + {{- end }} +{{- end -}} diff --git a/library/ix-dev/community/flame/templates/_portal.tpl b/library/ix-dev/community/flame/templates/_portal.tpl new file mode 100644 index 0000000000..57633df9a4 --- /dev/null +++ b/library/ix-dev/community/flame/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "flame.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.flameNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/community/flame/templates/_service.tpl b/library/ix-dev/community/flame/templates/_service.tpl new file mode 100644 index 0000000000..fa59bcb6f1 --- /dev/null +++ b/library/ix-dev/community/flame/templates/_service.tpl @@ -0,0 +1,15 @@ +{{- define "flame.service" -}} +service: + flame: + enabled: true + primary: true + type: NodePort + targetSelector: flame + ports: + webui: + enabled: true + primary: true + port: {{ .Values.flameNetwork.webPort }} + nodePort: {{ .Values.flameNetwork.webPort }} + targetSelector: flame +{{- end -}} diff --git a/library/ix-dev/community/flame/templates/common.yaml b/library/ix-dev/community/flame/templates/common.yaml new file mode 100644 index 0000000000..6146200a72 --- /dev/null +++ b/library/ix-dev/community/flame/templates/common.yaml @@ -0,0 +1,12 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "flame.configuration" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "flame.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "flame.persistence" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "flame.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "flame.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/flame/upgrade_info.json b/library/ix-dev/community/flame/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/community/flame/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/community/flame/upgrade_strategy b/library/ix-dev/community/flame/upgrade_strategy new file mode 100755 index 0000000000..af685230a1 --- /dev/null +++ b/library/ix-dev/community/flame/upgrade_strategy @@ -0,0 +1,31 @@ +#!/usr/bin/python3 +import json +import re +import sys + +from catalog_update.upgrade_strategy import semantic_versioning + + +RE_STABLE_VERSION = re.compile(r'\d+\.\d+\.\d+') + + +def newer_mapping(image_tags): + key = list(image_tags.keys())[0] + tags = {t: t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)} + version = semantic_versioning(list(tags)) + if not version: + return {} + + return { + 'tags': {key: tags[version]}, + 'app_version': version, + } + + +if __name__ == '__main__': + try: + versions_json = json.loads(sys.stdin.read()) + except ValueError: + raise ValueError('Invalid json specified') + + print(json.dumps(newer_mapping(versions_json))) diff --git a/library/ix-dev/community/flame/values.yaml b/library/ix-dev/community/flame/values.yaml new file mode 100644 index 0000000000..0cfa383966 --- /dev/null +++ b/library/ix-dev/community/flame/values.yaml @@ -0,0 +1,23 @@ +image: + repository: pawelmalak/flame + pullPolicy: IfNotPresent + tag: 2.3.1 + +resources: + limits: + cpu: 4000m + memory: 8Gi + +flameConfig: + password: '' + additionalEnvs: [] + +flameNetwork: + webPort: 30082 + hostNetwork: false + +flameStorage: + data: + type: ixVolume + datasetName: data + additionalStorages: []