diff --git a/charts/incubator/kutt/Chart.yaml b/charts/incubator/kutt/Chart.yaml new file mode 100644 index 00000000000..8bd0dc6c391 --- /dev/null +++ b/charts/incubator/kutt/Chart.yaml @@ -0,0 +1,37 @@ +apiVersion: v2 +appVersion: "5.6.13" +dependencies: +- name: common + repository: https://truecharts.org + version: 9.1.6 +- condition: postgresql.enabled + name: postgresql + repository: https://truecharts.org/ + version: 7.0.6 +- condition: redis.enabled + name: redis + repository: https://truecharts.org + version: 2.0.5 +deprecated: false +description: A free and open source personal finance manager +home: https://github.com/truecharts/apps/tree/master/charts/stable/kutt +icon: https://truecharts.org/_static/img/appicons/kutt.png +keywords: +- kutt +- link +- short +kubeVersion: '>=1.16.0-0' +maintainers: +- email: info@truecharts.org + name: TrueCharts + url: https://truecharts.org +name: kutt +sources: +- https://github.com/thedevs-network/kutt +type: application +version: 0.0.1 +annotations: + truecharts.org/catagories: | + - productivity + truecharts.org/SCALE-support: "true" + truecharts.org/grade: U diff --git a/charts/incubator/kutt/questions.yaml b/charts/incubator/kutt/questions.yaml new file mode 100644 index 00000000000..bb4d1b5f301 --- /dev/null +++ b/charts/incubator/kutt/questions.yaml @@ -0,0 +1,392 @@ +# Include{groups} +portals: + open: + protocols: + - "$kubernetes-resource_configmap_portal_protocol" + host: + - "$kubernetes-resource_configmap_portal_host" + ports: + - "$kubernetes-resource_configmap_portal_port" +questions: + - variable: portal + group: "Container Image" + label: "Configure Portal Button" + schema: + type: dict + hidden: true + attrs: + - variable: enabled + label: "Enable" + description: "enable the portal button" + schema: + hidden: true + editable: false + type: boolean + default: true +# Include{global} + - variable: controller + group: "Controller" + label: "" + schema: + additional_attrs: true + type: dict + attrs: + - variable: advanced + label: "Show Advanced Controller Settings" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: type + description: "Please specify type of workload to deploy" + label: "(Advanced) Controller Type" + schema: + type: string + default: "deployment" + required: true + enum: + - value: "deployment" + description: "Deployment" + - value: "statefulset" + description: "Statefulset" + - value: "daemonset" + description: "Daemonset" + - variable: replicas + description: "Number of desired pod replicas" + label: "Desired Replicas" + schema: + type: int + default: 1 + required: true + - variable: strategy + description: "Please specify type of workload to deploy" + label: "(Advanced) Update Strategy" + schema: + type: string + default: "Recreate" + required: true + enum: + - value: "Recreate" + description: "Recreate: Kill existing pods before creating new ones" + - value: "RollingUpdate" + description: "RollingUpdate: Create new pods and then kill old ones" + - value: "OnDelete" + description: "(Legacy) OnDelete: ignore .spec.template changes" +# Include{controllerExpert} + - variable: secret + group: "Container Configuration" + label: "Image Secrets" + schema: + additional_attrs: true + type: dict + attrs: + - variable: MAIL_USER + label: "MAIL_USER" + schema: + type: string + default: "" + - variable: MAIL_PASSWORD + label: "MAIL_PASSWORD" + schema: + type: string + default: "" + private: true + - variable: RECAPTCHA_SITE_KEY + label: "RECAPTCHA_SITE_KEY" + schema: + type: string + default: "" + private: true + - variable: RECAPTCHA_SECRET_KEY + label: "RECAPTCHA_SECRET_KEY" + schema: + type: string + default: "" + private: true + - variable: GOOGLE_SAFE_BROWSING_KEY + label: "GOOGLE_SAFE_BROWSING_KEY" + schema: + type: string + default: "" + private: true + - variable: GOOGLE_ANALYTICS + label: "GOOGLE_ANALYTICS" + schema: + type: string + default: "" + private: true + - variable: GOOGLE_ANALYTICS_UNIVERSAL + label: "GOOGLE_ANALYTICS_UNIVERSAL" + schema: + type: string + default: "" + private: true + + - variable: env + group: "Container Configuration" + label: "Image Environment" + schema: + additional_attrs: true + type: dict + attrs: + - variable: SITE_NAME + label: "SITE_NAME" + schema: + type: string + default: "My Kutt Instance" + - variable: DEFAULT_DOMAIN + label: "DEFAULT_DOMAIN" + schema: + type: string + default: "localhost:10195" + - variable: LINK_LENGTH + label: "LINK_LENGTH" + schema: + type: int + default: 6 + - variable: USER_LIMIT_PER_DAY + label: "USER_LIMIT_PER_DAY" + schema: + type: int + default: 50 + - variable: NON_USER_COOLDOWN + label: "NON_USER_COOLDOWN" + schema: + type: int + default: 0 + - variable: DEFAULT_MAX_STATS_PER_LINK + label: "DEFAULT_MAX_STATS_PER_LINK" + schema: + type: int + default: 5000 + - variable: DISALLOW_REGISTRATION + label: "DISALLOW_REGISTRATION" + schema: + type: boolean + default: false + - variable: DISALLOW_ANONYMOUS_LINKS + label: "DISALLOW_ANONYMOUS_LINKS" + schema: + type: boolean + default: false + - variable: CUSTOM_DOMAIN_USE_HTTPS + label: "CUSTOM_DOMAIN_USE_HTTPS" + schema: + type: boolean + default: false + - variable: ADMIN_EMAILS + label: "ADMIN_EMAILS" + schema: + type: string + default: "admin@example.com,admin@example2.com" + - variable: REPORT_EMAIL + label: "REPORT_EMAIL" + schema: + type: string + default: "admin@example.com" + - variable: CONTACT_EMAIL + label: "CONTACT_EMAIL" + schema: + type: string + default: "admin@example.com" + - variable: MAIL_HOST + label: "MAIL_HOST" + schema: + type: string + default: "" + - variable: MAIL_PORT + label: "MAIL_PORT" + schema: + type: int + default: 567 + - variable: MAIL_FROM + label: "MAIL_FROM" + schema: + type: string + default: "" + - variable: MAIL_SECURE + label: "MAIL_SECURE" + schema: + type: boolean + default: true + +# Include{containerConfig} + + - variable: service + group: "Networking and Services" + label: "Configure Service(s)" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Service" + description: "The Primary service on which the healthcheck runs, often the webUI" + schema: + additional_attrs: true + type: dict + attrs: +# Include{serviceSelector} + - variable: main + label: "Main Service Port Configuration" + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: "Port" + description: "This port exposes the container port on the service" + schema: + type: int + default: 10195 + required: true + - variable: advanced + label: "Show Advanced settings" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: protocol + label: "Port Type" + schema: + type: string + default: "HTTP" + enum: + - value: HTTP + description: "HTTP" + - value: "HTTPS" + description: "HTTPS" + - value: TCP + description: "TCP" + - value: "UDP" + description: "UDP" + - variable: nodePort + label: "Node Port (Optional)" + description: "This port gets exposed to the node. Only considered when service type is NodePort, Simple or LoadBalancer" + schema: + type: int + min: 9000 + max: 65535 + - variable: targetPort + label: "Target Port" + description: "The internal(!) port on the container the Application runs on" + schema: + type: int + default: 10195 + + - variable: serviceexpert + group: "Networking and Services" + label: "Show Expert Config" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: hostNetwork + group: "Networking and Services" + label: "Host-Networking (Complicated)" + schema: + type: boolean + default: false + +# Include{serviceExpert} + +# Include{serviceList} + +# Include{persistenceList} + + - variable: ingress + label: "" + group: "Ingress" + schema: + additional_attrs: true + type: dict + attrs: + - variable: main + label: "Main Ingress" + schema: + additional_attrs: true + type: dict + attrs: +# Include{ingressDefault} + +# Include{ingressTLS} + +# Include{ingressTraefik} + +# Include{ingressExpert} + +# Include{ingressList} + +# Include{security} + + - variable: advancedSecurity + label: "Show Advanced Security Settings" + group: "Security and Permissions" + schema: + type: boolean + default: false + show_subquestions_if: true + subquestions: + - variable: securityContext + label: "Security Context" + schema: + additional_attrs: true + type: dict + attrs: + - variable: privileged + label: "Privileged mode" + schema: + type: boolean + default: false + - variable: readOnlyRootFilesystem + label: "ReadOnly Root Filesystem" + schema: + type: boolean + default: false + - variable: allowPrivilegeEscalation + label: "Allow Privilege Escalation" + schema: + type: boolean + default: false + - variable: runAsNonRoot + label: "runAsNonRoot" + schema: + type: boolean + default: false +# Include{securityContextAdvanced} + + - variable: podSecurityContext + group: "Security and Permissions" + label: "Pod Security Context" + schema: + additional_attrs: true + type: dict + attrs: + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 0 + - variable: runAsGroup + label: "runAsGroup" + description: The groupID this App of the user running the application" + schema: + type: int + default: 0 + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 +# Include{podSecurityContextAdvanced} + +# Include{resources} + +# Include{advanced} + +# Include{addons} diff --git a/charts/incubator/kutt/templates/_secrets.tpl b/charts/incubator/kutt/templates/_secrets.tpl new file mode 100644 index 00000000000..d3634d0df77 --- /dev/null +++ b/charts/incubator/kutt/templates/_secrets.tpl @@ -0,0 +1,20 @@ +{{/* Define the secrets */}} +{{- define "kutt.secrets" -}} +--- + +apiVersion: v1 +kind: Secret +type: Opaque +metadata: + name: kutt-secrets +{{- $kuttprevious := lookup "v1" "Secret" .Release.Namespace "kutt-secrets" }} +{{- $jwt_secret := "" }} +data: + {{- if $kuttprevious}} + JWT_SECRET: {{ index $kuttprevious.data "JWT_SECRET" }} + {{- else }} + {{- $jwt_secret := randAlphaNum 32 }} + JWT_SECRET: {{ $jwt_secret | b64enc }} + {{- end }} + +{{- end -}} diff --git a/charts/incubator/kutt/templates/common copy.yaml b/charts/incubator/kutt/templates/common copy.yaml new file mode 100644 index 00000000000..edbf1b24944 --- /dev/null +++ b/charts/incubator/kutt/templates/common copy.yaml @@ -0,0 +1,8 @@ +{{/* Make sure all variables are set properly */}} +{{- include "common.setup" . }} + +{{/* Render secrets for kutt */}} +{{- include "kutt.secrets" . }} + +{{/* Render the templates */}} +{{ include "common.postSetup" . }} diff --git a/charts/incubator/kutt/values.yaml b/charts/incubator/kutt/values.yaml new file mode 100644 index 00000000000..8802554b77d --- /dev/null +++ b/charts/incubator/kutt/values.yaml @@ -0,0 +1,85 @@ +image: + repository: kutt/kutt + pullPolicy: IfNotPresent + tag: v2.7.4@sha256:2fa9480755229bd9a14ea03fb2129eb80412600f3c5dabc8f9f9fbf35ff88fce + +securityContext: + readOnlyRootFilesystem: false + runAsNonRoot: false + +podSecurityContext: + runAsUser: 0 + runAsGroup: 0 + +secret: + MAIL_USER: "" + MAIL_PASSWORD: "" + RECAPTCHA_SITE_KEY: "" + RECAPTCHA_SECRET_KEY: "" + GOOGLE_SAFE_BROWSING_KEY: "" + GOOGLE_ANALYTICS: "" + GOOGLE_ANALYTICS_UNIVERSAL: "" + +env: + PORT: "{{ .Values.service.main.ports.main.port }}" + DB_NAME: kutt + DB_USER: kutt + DB_PORT: "5432" + REDIS_PORT: "6379" + # User Defined + SITE_NAME: "My Kutt Instance" + DEFAULT_DOMAIN: "localhost:{{ .Values.service.main.ports.main.port }}" + LINK_LENGTH: 6 + USER_LIMIT_PER_DAY: 50 + NON_USER_COOLDOWN: 0 + DEFAULT_MAX_STATS_PER_LINK: 5000 + DISALLOW_REGISTRATION: false + DISALLOW_ANONYMOUS_LINKS: false + CUSTOM_DOMAIN_USE_HTTPS: false + ADMIN_EMAILS: "admin@example.com,admin@example2.com" + REPORT_EMAIL: "admin@example.com" + CONTACT_EMAIL: "admin@example.com" + MAIL_HOST: "" + MAIL_PORT: 567 + MAIL_FROM: "" + MAIL_SECURE: true + +envValueFrom: + DB_HOST: + secretKeyRef: + name: dbcreds + key: plainhost + DB_PASSWORD: + secretKeyRef: + name: dbcreds + key: postgresql-password + REDIS_HOST: + secretKeyRef: + name: rediscreds + key: plainhost + REDIS_PASSWORD: + secretKeyRef: + name: rediscreds + key: redis-password + JWT_SECRET: + secretKeyRef: + name: kutt-secrets + key: JWT_SECRET + +service: + main: + ports: + main: + port: 10195 + +# Enabled redis +redis: + enabled: true + existingSecret: "rediscreds" + +# Enabled postgres +postgresql: + enabled: true + existingSecret: "dbcreds" + postgresqlUsername: kutt + postgresqlDatabase: kutt diff --git a/docs/_static/img/appicons/kutt.png b/docs/_static/img/appicons/kutt.png new file mode 100644 index 00000000000..a55987404d3 Binary files /dev/null and b/docs/_static/img/appicons/kutt.png differ diff --git a/docs/manual/default-ports.md b/docs/manual/default-ports.md index b8c4975a5dd..8846ebfc07c 100644 --- a/docs/manual/default-ports.md +++ b/docs/manual/default-ports.md @@ -350,6 +350,7 @@ These defaults can of course be changed, but as we guarantee "sane, working defa | zerotier | main | main | 10190 | UDP | | | rsshub | main | main | 10191 | HTTP | | | verysync | main | main | 10193 | HTTP | | +| kutt | main | main | 10195 | TCP | | | storj-node | main | main | 14002 | TCP | | | satisfactory | beacon | beacon | 15000 | UDP | | | satisfactory | query | query | 15777 | UDP | | @@ -364,8 +365,8 @@ These defaults can of course be changed, but as we guarantee "sane, working defa | syncthing | listeners | tcp | 22000 | TCP | | | syncthing | listeners-udp | udp | 22000 | UDP | | | impostor-server | main | main | 22023 | UDP | | -| verysync | bt-udp1 | bt-udp1 | 22027 | UDP | | -| verysync | bt-udp2 | bt-udp2 | 22037 | UDP | | +| verysync | bt-udp1 | bt-udp1 | 22027 | UDP | | +| verysync | bt-udp2 | bt-udp2 | 22037 | UDP | | | joplin-server | main | main | 22300 | TCP | | | verysync | data | data | 22330 | TCP | | | minecraft-java | main | main | 25565 | TCP | |