From 561c23498887f3734222cacda20a714d9ac1606c Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Thu, 12 Oct 2023 13:00:51 +0300 Subject: [PATCH] add `homer` to `community` train (#1631) * add `homer` to `community` train * add common * add metadata and readme * add templates * more ci values * add questions * rename to assets --- library/ix-dev/community/homer/Chart.lock | 6 + library/ix-dev/community/homer/Chart.yaml | 26 ++ library/ix-dev/community/homer/README.md | 8 + library/ix-dev/community/homer/app-readme.md | 8 + .../community/homer/charts/common-1.1.1.tgz | Bin 0 -> 61737 bytes .../community/homer/ci/basic-values.yaml | 10 + .../community/homer/ci/extra-values.yaml | 14 + .../community/homer/ci/hostNet-values.yaml | 7 + library/ix-dev/community/homer/item.yaml | 8 + library/ix-dev/community/homer/metadata.yaml | 8 + library/ix-dev/community/homer/questions.yaml | 239 ++++++++++++++++++ .../community/homer/templates/NOTES.txt | 1 + .../community/homer/templates/_homer.tpl | 49 ++++ .../homer/templates/_persistence.tpl | 34 +++ .../community/homer/templates/_portal.tpl | 12 + .../community/homer/templates/_service.tpl | 15 ++ .../community/homer/templates/common.yaml | 11 + .../ix-dev/community/homer/upgrade_info.json | 1 + .../ix-dev/community/homer/upgrade_strategy | 31 +++ library/ix-dev/community/homer/values.yaml | 27 ++ 20 files changed, 515 insertions(+) create mode 100644 library/ix-dev/community/homer/Chart.lock create mode 100644 library/ix-dev/community/homer/Chart.yaml create mode 100644 library/ix-dev/community/homer/README.md create mode 100644 library/ix-dev/community/homer/app-readme.md create mode 100644 library/ix-dev/community/homer/charts/common-1.1.1.tgz create mode 100644 library/ix-dev/community/homer/ci/basic-values.yaml create mode 100644 library/ix-dev/community/homer/ci/extra-values.yaml create mode 100644 library/ix-dev/community/homer/ci/hostNet-values.yaml create mode 100644 library/ix-dev/community/homer/item.yaml create mode 100644 library/ix-dev/community/homer/metadata.yaml create mode 100644 library/ix-dev/community/homer/questions.yaml create mode 100644 library/ix-dev/community/homer/templates/NOTES.txt create mode 100644 library/ix-dev/community/homer/templates/_homer.tpl create mode 100644 library/ix-dev/community/homer/templates/_persistence.tpl create mode 100644 library/ix-dev/community/homer/templates/_portal.tpl create mode 100644 library/ix-dev/community/homer/templates/_service.tpl create mode 100644 library/ix-dev/community/homer/templates/common.yaml create mode 100644 library/ix-dev/community/homer/upgrade_info.json create mode 100755 library/ix-dev/community/homer/upgrade_strategy create mode 100644 library/ix-dev/community/homer/values.yaml diff --git a/library/ix-dev/community/homer/Chart.lock b/library/ix-dev/community/homer/Chart.lock new file mode 100644 index 0000000000..77a2078c35 --- /dev/null +++ b/library/ix-dev/community/homer/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.1.1 +digest: sha256:a7dbe3e4d42dbcd4325776e5e01a1d630c7f185f79e7ebf22b1b9cc80f56eed7 +generated: "2023-10-10T16:12:08.426497312+03:00" diff --git a/library/ix-dev/community/homer/Chart.yaml b/library/ix-dev/community/homer/Chart.yaml new file mode 100644 index 0000000000..2b77ab186c --- /dev/null +++ b/library/ix-dev/community/homer/Chart.yaml @@ -0,0 +1,26 @@ +name: homer +description: Homer is a dead simple static HOMepage for your servER to keep your services on hand, from a simple yaml configuration file. +annotations: + title: Homer +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: v23.09.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/bastienwirtz/homer +icon: https://raw.githubusercontent.com//bastienwirtz/homer/main/public/logo.png +sources: + - https://hub.docker.com/r/b4bz/homer + - https://github.com/truenas/charts/tree/master/library/ix-dev/community/homer + - https://github.com/bastienwirtz/homer +keywords: + - dashboard + - homepage diff --git a/library/ix-dev/community/homer/README.md b/library/ix-dev/community/homer/README.md new file mode 100644 index 0000000000..d22483d47d --- /dev/null +++ b/library/ix-dev/community/homer/README.md @@ -0,0 +1,8 @@ +# Homer + +[Homer](https://github.com/bastienwirtz/homer) is a dead simple static HOMepage for your servER to keep your services on hand, from a simple yaml configuration file. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `Homer` directories. +> Afterward, the `Homer` container will run as a **non**-root user (Default: `568`). +> All mounted storage(s) will be `chown`ed only if the parent directory does not match the configured user. diff --git a/library/ix-dev/community/homer/app-readme.md b/library/ix-dev/community/homer/app-readme.md new file mode 100644 index 0000000000..d22483d47d --- /dev/null +++ b/library/ix-dev/community/homer/app-readme.md @@ -0,0 +1,8 @@ +# Homer + +[Homer](https://github.com/bastienwirtz/homer) is a dead simple static HOMepage for your servER to keep your services on hand, from a simple yaml configuration file. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `Homer` directories. +> Afterward, the `Homer` container will run as a **non**-root user (Default: `568`). +> All mounted storage(s) will be `chown`ed only if the parent directory does not match the configured user. diff --git a/library/ix-dev/community/homer/charts/common-1.1.1.tgz b/library/ix-dev/community/homer/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..438e2b638029bc2da18654206574d1347ab21bb4 GIT binary patch literal 61737 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 + schema: + type: boolean + default: false + + - variable: homerStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: assets + label: Homer Assets Storage + description: The path to store Homer Assets. + 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: "assets" + $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 Homer. + 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 Homer. + 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 Homer. + 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/homer/templates/NOTES.txt b/library/ix-dev/community/homer/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/homer/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/homer/templates/_homer.tpl b/library/ix-dev/community/homer/templates/_homer.tpl new file mode 100644 index 0000000000..71f350da2a --- /dev/null +++ b/library/ix-dev/community/homer/templates/_homer.tpl @@ -0,0 +1,49 @@ +{{- define "homer.workload" -}} +workload: + homer: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.homerNetwork.hostNetwork }} + containers: + homer: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.homerRunAs.user }} + runAsGroup: {{ .Values.homerRunAs.group }} + env: + PORT: {{ .Values.homerNetwork.webPort }} + INIT_ASSETS: {{ ternary "1" "0" .Values.homerConfig.initAssets }} + {{ with .Values.homerConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: http + port: {{ .Values.homerNetwork.webPort }} + path: / + readiness: + enabled: true + type: http + port: {{ .Values.homerNetwork.webPort }} + path: / + startup: + enabled: true + type: http + port: {{ .Values.homerNetwork.webPort }} + path: / + initContainers: + {{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions" + "UID" .Values.homerRunAs.user + "GID" .Values.homerRunAs.group + "mode" "check" + "type" "init") | nindent 8 }} +{{- end -}} diff --git a/library/ix-dev/community/homer/templates/_persistence.tpl b/library/ix-dev/community/homer/templates/_persistence.tpl new file mode 100644 index 0000000000..b5a81a08cf --- /dev/null +++ b/library/ix-dev/community/homer/templates/_persistence.tpl @@ -0,0 +1,34 @@ +{{- define "homer.persistence" -}} +persistence: + assets: + enabled: true + type: {{ .Values.homerStorage.assets.type }} + datasetName: {{ .Values.homerStorage.assets.datasetName | default "" }} + hostPath: {{ .Values.homerStorage.assets.hostPath | default "" }} + targetSelector: + homer: + homer: + mountPath: /www/assets + 01-permissions: + mountPath: /mnt/directories/assets + tmp: + enabled: true + type: emptyDir + targetSelector: + homer: + homer: + mountPath: /tmp + {{- range $idx, $storage := .Values.homerStorage.additionalStorages }} + {{ printf "homer-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + homer: + homer: + mountPath: {{ $storage.mountPath }} + 01-permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + {{- end }} +{{- end -}} diff --git a/library/ix-dev/community/homer/templates/_portal.tpl b/library/ix-dev/community/homer/templates/_portal.tpl new file mode 100644 index 0000000000..004ead7846 --- /dev/null +++ b/library/ix-dev/community/homer/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "homer.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.homerNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/community/homer/templates/_service.tpl b/library/ix-dev/community/homer/templates/_service.tpl new file mode 100644 index 0000000000..d8f275fbdb --- /dev/null +++ b/library/ix-dev/community/homer/templates/_service.tpl @@ -0,0 +1,15 @@ +{{- define "homer.service" -}} +service: + homer: + enabled: true + primary: true + type: NodePort + targetSelector: homer + ports: + webui: + enabled: true + primary: true + port: {{ .Values.homerNetwork.webPort }} + nodePort: {{ .Values.homerNetwork.webPort }} + targetSelector: homer +{{- end -}} diff --git a/library/ix-dev/community/homer/templates/common.yaml b/library/ix-dev/community/homer/templates/common.yaml new file mode 100644 index 0000000000..fbec244e12 --- /dev/null +++ b/library/ix-dev/community/homer/templates/common.yaml @@ -0,0 +1,11 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "homer.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "homer.service" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "homer.persistence" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "homer.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/homer/upgrade_info.json b/library/ix-dev/community/homer/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/community/homer/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/community/homer/upgrade_strategy b/library/ix-dev/community/homer/upgrade_strategy new file mode 100755 index 0000000000..5718e19a44 --- /dev/null +++ b/library/ix-dev/community/homer/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'v\d+\.\d+\.\d+') + + +def newer_mapping(image_tags): + key = list(image_tags.keys())[0] + tags = {t.strip('v'): 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/homer/values.yaml b/library/ix-dev/community/homer/values.yaml new file mode 100644 index 0000000000..b4be927a40 --- /dev/null +++ b/library/ix-dev/community/homer/values.yaml @@ -0,0 +1,27 @@ +image: + repository: b4bz/homer + pullPolicy: IfNotPresent + tag: v23.09.1 + +resources: + limits: + cpu: 4000m + memory: 8Gi + +homerConfig: + initAssets: false + additionalEnvs: [] + +homerNetwork: + webPort: 30092 + hostNetwork: false + +homerRunAs: + user: 568 + group: 568 + +homerStorage: + assets: + type: ixVolume + datasetName: assets + additionalStorages: []