add labels and annotations to questions.yaml and revert oopsie (+13 squashed commit) (#843)

Squashed commit:

[5ffcf238] Allow more lists

[d185c0ed] Test annotationsList on persistence

[6d8afee1] Allow setting ingressclass on ingress

[a9dccd41] fix again

[4a54beb8] fix broken servicetest again

[62e85336] Fix mistake

[e45db47b] remove services annotation test due to random annotations, fix new PVC tests

[745a11bd] Add podAnnotationsList, podLabelsList, controllerAnnotationsList and controller:abelsList,

[5d075f33] Add PVC test for labels and retain

[43b64ddc] Fix PVC error

[229143ed] Update common

[d551d80f] add gracePeriodSeconds

[350e6885] Add HPA GUI
This commit is contained in:
Kjeld Schouten-Lebbing
2021-08-30 00:28:24 +02:00
committed by GitHub
parent 107adb0723
commit 25a98b4d69
20 changed files with 1374 additions and 42 deletions

View File

@@ -0,0 +1,24 @@
# Patterns to ignore when building packages.
# This supports shell glob matching, relative path matching, and
# negation (prefixed with !). Only one pattern per line.
.DS_Store
# Common VCS dirs
.git/
.gitignore
.bzr/
.bzrignore
.hg/
.hgignore
.svn/
# Common backup files
*.swp
*.bak
*.tmp
*~
# Various IDEs
.project
.idea/
*.tmproj
.vscode/
# OWNERS file for Kubernetes
OWNERS

View File

@@ -0,0 +1,8 @@
# Configuration Options
##### Connecting to other apps
If you need to connect this App to other Apps on TrueNAS SCALE, please refer to our "Linking Apps Internally" quick-start guide:
https://truecharts.org/manual/Quick-Start%20Guides/14-linking-apps/
##### Available config options
In the future this page is going to contain an automated list of options available in the installation/edit UI.

View File

@@ -0,0 +1,27 @@
apiVersion: v2
appVersion: auto
dependencies:
- name: common
repository: https://truecharts.org/
version: 6.10.7
deprecated: false
description: API Support for your favorite torrent trackers.
home: https://github.com/truecharts/apps/tree/master/charts/stable/jackett
icon: https://truecharts.org/_static/img/jackett-icon.png
keywords:
- jackett
- torrent
- usenet
kubeVersion: '>=1.16.0-0'
maintainers:
- email: info@truecharts.org
name: TrueCharts
url: truecharts.org
- email: kjeld@schouten-lebbing.nl
name: Ornias1993
url: truecharts.org
name: prototypegui
sources:
- https://github.com/Jackett/Jackett
type: application
version: 6.8.7

View File

@@ -0,0 +1,42 @@
# Introduction
![Version: 6.8.6](https://img.shields.io/badge/Version-6.8.6-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: auto](https://img.shields.io/badge/AppVersion-auto-informational?style=flat-square)
API Support for your favorite torrent trackers.
TrueCharts are designed to be installed as TrueNAS SCALE app only. We can not guarantee this charts works as a stand-alone helm installation.
**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/apps/issues/new/choose)**
## Source Code
* <https://github.com/Jackett/Jackett>
## Requirements
Kubernetes: `>=1.16.0-0`
## Dependencies
| Repository | Name | Version |
|------------|------|---------|
| https://truecharts.org/ | common | 6.10.7 |
## Installing the Chart
To install this App on TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/manual/Quick-Start%20Guides/03-Installing-an-App/).
## Uninstalling the Chart
To remove this App from TrueNAS SCALE check our [Quick-Start Guide](https://truecharts.org/manual/Quick-Start%20Guides/07-Deleting-an-App/).
## Support
- Please check our [quick-start guides](https://truecharts.org/manual/Quick-Start%20Guides/01-Open-Apps/) first.
- See the [Wiki](https://truecharts.org)
- Check our [Discord](https://discord.gg/tVsPTHWTtr)
- Open a [issue](https://github.com/truecharts/apps/issues/new/choose)
- Ask a [question](https://github.com/truecharts/apps/discussions)
----------------------------------------------
Autogenerated from chart metadata using [helm-docs v1.5.0](https://github.com/norwoodj/helm-docs/releases/v1.5.0)
All Rights Reserved - The TrueCharts Project

View File

@@ -0,0 +1,3 @@
categories:
- media
icon_url: https://truecharts.org/_static/img/jackett-icon.png

View File

@@ -0,0 +1,25 @@
##
# This file contains Values.yaml content that gets added to the output of questions.yaml
# It's ONLY meant for content that the user is NOT expected to change.
# Example: Everything under "image" is not included in questions.yaml but is included here.
##
image:
repository: ghcr.io/k8s-at-home/jackett
pullPolicy: IfNotPresent
tag: v0.18.616
probes:
liveness:
path: "/UI/Login"
readiness:
path: "/UI/Login"
startup:
path: "/UI/Login"
##
# Most other defaults are set in questions.yaml
# For other options please refer to the wiki, default_values.yaml or the common library chart
##

View File

@@ -0,0 +1,939 @@
groups:
- name: "Container Image"
description: "Image to be used for container"
- name: "Controller"
description: "Configure workload deployment"
- name: "Container Configuration"
description: "additional container configuration"
- name: "App Configuration"
description: "App specific config options"
- name: "Networking and Services"
description: "Configure Network and Services for container"
- name: "Storage and Persistence"
description: "Persist and share data that is separate from the container"
- name: "Ingress"
description: "Ingress Configuration"
- name: "Security and Permissions"
description: "Configure security context and permissions"
- name: "Resources and Devices"
description: "Specify resources/devices to be allocated to workload"
- name: "Advanced"
description: "Advanced Configuration"
portals:
web_portal:
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
- variable: controller
group: "Controller"
label: ""
schema:
type: dict
attrs:
- 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"
- variable: labelsList
label: "Controller Labels"
schema:
type: list
default: []
items:
- variable: labelItem
label: "Label"
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
- variable: value
label: "Value"
schema:
type: string
- variable: annotationsList
label: " Controller Annotations"
schema:
type: list
default: []
items:
- variable: annotationItem
label: "Label"
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
- variable: value
label: "Value"
schema:
type: string
- variable: podLabelsList
group: "Container Configuration"
label: "Pod Labels"
schema:
type: list
default: []
items:
- variable: podLabelItem
label: "Label"
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
- variable: value
label: "Value"
schema:
type: string
- variable: podAnnotationsList
group: "Container Configuration"
label: "Pod Annotations"
schema:
type: list
default: []
items:
- variable: podAnnotationItem
label: "Label"
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
- variable: value
label: "Value"
schema:
type: string
- variable: termination
group: "Container Configuration"
label: "Termination settings"
schema:
type: dict
attrs:
- variable: gracePeriodSeconds
label: "Grace Period Seconds"
schema:
type: int
default: 10
- variable: env
group: "Container Configuration"
label: "Image Environment"
schema:
type: dict
attrs:
- variable: TZ
label: "Timezone"
schema:
type: string
default: "Etc/UTC"
$ref:
- "definitions/timezone"
- variable: UMASK
label: "UMASK"
description: "Sets the UMASK env var for LinuxServer.io (compatible) containers"
schema:
type: string
default: "002"
# Configure Enviroment Variables
- variable: envList
label: "Image environment"
group: "Container Configuration"
schema:
type: list
default: []
items:
- variable: envItem
label: "Environment Variable"
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
- variable: value
label: "Value"
schema:
type: string
- variable: hostNetwork
group: "Networking and Services"
label: "Enable Host Networking"
schema:
type: boolean
default: false
- variable: service
group: "Networking and Services"
label: "Configure Service(s)"
schema:
type: dict
attrs:
- variable: main
label: "Main Service"
description: "The Primary service on which the healthcheck runs, often the webUI"
schema:
type: dict
attrs:
- variable: enabled
label: "Enable the service"
schema:
type: boolean
default: true
hidden: true
- variable: type
label: "Service Type"
description: "ClusterIP's are only internally available, nodePorts expose the container to the host node System, Loadbalancer exposes the service using the system loadbalancer"
schema:
type: string
default: "NodePort"
enum:
- value: "NodePort"
description: "NodePort"
- value: "ClusterIP"
description: "ClusterIP"
- value: "LoadBalancer"
description: "LoadBalancer"
- variable: loadBalancerIP
label: "LoadBalancer IP"
description: "LoadBalancerIP"
schema:
show_if: [["type", "=", "LoadBalancer"]]
type: string
default: ""
- variable: externalIPs
label: "External IP's"
description: "External IP's"
schema:
show_if: [["type", "=", "LoadBalancer"]]
type: list
default: []
items:
- variable: externalIP
label: "External IP"
schema:
type: string
- variable: ports
label: "Service's Port(s) Configuration"
schema:
type: dict
attrs:
- variable: main
label: "Main Service Port Configuration"
schema:
type: dict
attrs:
- variable: enabled
label: "Enable the port"
schema:
type: boolean
default: true
hidden: true
- 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: port
label: "Container Port"
schema:
type: int
default: 9117
editable: false
hidden: true
- variable: targetPort
label: "Target Port"
description: "This port exposes the container port on the service"
schema:
type: int
default: 9117
editable: true
required: true
- variable: nodePort
label: "Node Port (Optional)"
description: "This port gets exposed to the node. Only considered when service type is NodePort"
schema:
type: int
min: 9000
max: 65535
default: 36009
- variable: persistence
label: "Integrated Persistent Storage"
group: "Storage and Persistence"
schema:
type: dict
attrs:
- variable: config
label: "App Config Storage"
description: "Stores the Application Configuration."
schema:
type: dict
attrs:
- variable: enabled
label: "Enable the storage"
schema:
type: boolean
default: true
- variable: type
label: "(Advanced) Type of Storage"
description: "Sets the persistence type"
schema:
type: string
default: "pvc"
enum:
- value: "pvc"
description: "pvc"
- value: "emptyDir"
description: "emptyDir"
- value: "hostPath"
description: "hostPath"
- variable: storageClass
label: "(Advanced) storageClass"
description: " Warning: Anything other than SCALE-ZFS will break rollback!"
schema:
show_if: [["type", "=", "pvc"]]
type: string
default: "SCALE-ZFS"
- variable: labelsList
label: "Labels"
schema:
type: list
default: []
items:
- variable: labelItem
label: "Label"
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
- variable: value
label: "Value"
schema:
type: string
- variable: annotationsList
label: "Annotations"
schema:
type: list
default: []
items:
- variable: annotationItem
label: "Label"
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
- variable: value
label: "Value"
schema:
type: string
- variable: setPermissions
label: "Automatic Permissions"
description: "Automatically set permissions on install"
schema:
show_if: [["type", "=", "hostPath"]]
type: boolean
default: true
- variable: readOnly
label: "readOnly"
schema:
type: boolean
default: false
- variable: hostPath
label: "hostPath"
description: "Path inside the container the storage is mounted"
schema:
show_if: [["type", "=", "hostPath"]]
type: hostpath
- variable: hostPathType
label: "hostPath Type"
schema:
show_if: [["type", "=", "hostPath"]]
type: string
default: ""
enum:
- value: ""
description: "Default"
- value: "DirectoryOrCreate"
description: "DirectoryOrCreate"
- value: "Directory"
description: "Directory"
- value: "FileOrCreate"
description: "FileOrCreate"
- value: "File"
description: "File"
- value: "Socket"
description: "Socket"
- value: "CharDevice"
description: "CharDevice"
- value: "BlockDevice"
description: "BlockDevice"
- variable: mountPath
label: "mountPath"
description: "Path inside the container the storage is mounted"
schema:
type: string
default: "/config"
hidden: true
- variable: medium
label: "EmptyDir Medium"
schema:
show_if: [["type", "=", "emptyDir"]]
type: string
default: ""
enum:
- value: ""
description: "Default"
- value: "Memory"
description: "Memory"
- variable: accessMode
label: "Access Mode (Advanced)"
description: "Allow or disallow multiple PVC's writhing to the same PV"
schema:
show_if: [["type", "=", "pvc"]]
type: string
default: "ReadWriteOnce"
enum:
- value: "ReadWriteOnce"
description: "ReadWriteOnce"
- value: "ReadOnlyMany"
description: "ReadOnlyMany"
- value: "ReadWriteMany"
description: "ReadWriteMany"
- variable: size
label: "Size quotum of storage"
schema:
show_if: [["type", "=", "pvc"]]
type: string
default: "100Gi"
- variable: persistenceList
label: "Additional app storage"
group: "Storage and Persistence"
schema:
type: list
default: []
items:
- variable: persistenceListEntry
label: "Custom Storage"
schema:
type: dict
attrs:
- variable: enabled
label: "Enable the storage"
schema:
type: boolean
default: true
- variable: type
label: "(Advanced) Type of Storage"
description: "Sets the persistence type"
schema:
type: string
default: "hostPath"
enum:
- value: "pvc"
description: "pvc"
- value: "emptyDir"
description: "emptyDir"
- value: "hostPath"
description: "hostPath"
- variable: storageClass
label: "(Advanced) storageClass"
description: " Warning: Anything other than SCALE-ZFS will break rollback!"
schema:
show_if: [["type", "=", "pvc"]]
type: string
default: "SCALE-ZFS"
- variable: labelsList
label: "Labels"
schema:
type: list
default: []
items:
- variable: labelItem
label: "Label"
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
- variable: value
label: "Value"
schema:
type: string
- variable: annotationsList
label: "Annotations"
schema:
type: list
default: []
items:
- variable: annotationItem
label: "Label"
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
- variable: value
label: "Value"
schema:
type: string
- variable: setPermissions
label: "Automatic Permissions"
description: "Automatically set permissions on install"
schema:
show_if: [["type", "=", "hostPath"]]
type: boolean
default: true
- variable: readOnly
label: "readOnly"
schema:
type: boolean
default: false
- variable: hostPath
label: "hostPath"
description: "Path inside the container the storage is mounted"
schema:
show_if: [["type", "=", "hostPath"]]
type: hostpath
- variable: hostPathType
label: "hostPath Type"
schema:
show_if: [["type", "=", "hostPath"]]
type: string
default: ""
enum:
- value: ""
description: "Default"
- value: "DirectoryOrCreate"
description: "DirectoryOrCreate"
- value: "Directory"
description: "Directory"
- value: "FileOrCreate"
description: "FileOrCreate"
- value: "File"
description: "File"
- value: "Socket"
description: "Socket"
- value: "CharDevice"
description: "CharDevice"
- value: "BlockDevice"
description: "BlockDevice"
- variable: mountPath
label: "mountPath"
description: "Path inside the container the storage is mounted"
schema:
type: string
required: true
default: ""
- variable: medium
label: "EmptyDir Medium"
schema:
show_if: [["type", "=", "emptyDir"]]
type: string
default: ""
enum:
- value: ""
description: "Default"
- value: "Memory"
description: "Memory"
- variable: accessMode
label: "Access Mode (Advanced)"
description: "Allow or disallow multiple PVC's writhing to the same PVC"
schema:
show_if: [["type", "=", "pvc"]]
type: string
default: "ReadWriteOnce"
enum:
- value: "ReadWriteOnce"
description: "ReadWriteOnce"
- value: "ReadOnlyMany"
description: "ReadOnlyMany"
- value: "ReadWriteMany"
description: "ReadWriteMany"
- variable: size
label: "Size quotum of storage"
schema:
show_if: [["type", "=", "pvc"]]
type: string
default: "100Gi"
- variable: ingress
label: ""
group: "Ingress"
schema:
type: dict
attrs:
- variable: main
label: "Main Ingress"
schema:
type: dict
attrs:
- variable: enabled
label: "Enable Ingress"
schema:
type: boolean
default: false
show_subquestions_if: true
subquestions:
- variable: ingressClassName
label: "IngressClass Name"
schema:
type: string
default: ""
- variable: labelsList
label: "Labels"
schema:
type: list
default: []
items:
- variable: labelItem
label: "Label"
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
- variable: value
label: "Value"
schema:
type: string
- variable: annotationsList
label: "Annotations"
schema:
type: list
default: []
items:
- variable: annotationItem
label: "Label"
schema:
type: dict
attrs:
- variable: name
label: "Name"
schema:
type: string
- variable: value
label: "Value"
schema:
type: string
- variable: hosts
label: "Hosts"
schema:
type: list
default: []
items:
- variable: hostEntry
label: "Host"
schema:
type: dict
attrs:
- variable: host
label: "HostName"
schema:
type: string
default: ""
required: true
- variable: paths
label: "Paths"
schema:
type: list
default: []
items:
- variable: pathEntry
label: "Host"
schema:
type: dict
attrs:
- variable: path
label: "path"
schema:
type: string
required: true
default: "/"
- variable: pathType
label: "pathType"
schema:
type: string
required: true
default: "Prefix"
- variable: tls
label: "TLS-Settings"
schema:
type: list
default: []
items:
- variable: tlsEntry
label: "Host"
schema:
type: dict
attrs:
- variable: hosts
label: "Certificate Hosts"
schema:
type: list
default: []
items:
- variable: host
label: "Host"
schema:
type: string
default: ""
required: true
- variable: scaleCert
label: "Select TrueNAS SCALE Certificate"
schema:
type: int
$ref:
- "definitions/certificate"
- variable: entrypoint
label: "Traefik Entrypoint"
description: "Entrypoint used by Traefik when using Traefik as Ingress Provider"
schema:
type: string
default: "websecure"
required: true
- variable: middlewares
label: "Traefik Middlewares"
description: "Add previously created Traefik Middlewares to this Ingress"
schema:
type: list
default: []
items:
- variable: name
label: "Name"
schema:
type: string
default: ""
required: true
- variable: securityContext
group: "Security and Permissions"
label: "Security Context"
schema:
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: true
- variable: podSecurityContext
group: "Security and Permissions"
label: "Pod Security Context"
schema:
type: dict
attrs:
- variable: runAsNonRoot
label: "runAsNonRoot"
schema:
type: boolean
default: true
- variable: runAsUser
label: "runAsUser"
description: "The UserID of the user running the application"
schema:
type: int
default: 568
- variable: runAsGroup
label: "runAsGroup"
description: The groupID this App of the user running the application"
schema:
type: int
default: 568
- variable: fsGroup
label: "fsGroup"
description: "The group that should own ALL storage."
schema:
type: int
default: 568
- variable: supplementalGroups
label: "When should we take ownership?"
schema:
type: list
default: []
items:
- variable: supplementalGroupsEntry
label: "When should we take ownership?"
schema:
type: int
- variable: fsGroupChangePolicy
label: "When should we take ownership?"
schema:
type: string
default: "OnRootMismatch"
enum:
- value: "OnRootMismatch"
description: "OnRootMismatch"
- value: "Always"
description: "Always"
- variable: resources
group: "Resources and Devices"
label: "Resource Limits"
schema:
type: dict
attrs:
- variable: limits
label: "Advanced Limit Resource Consumption"
schema:
type: dict
attrs:
- variable: cpu
label: "CPU"
schema:
type: string
default: "2000m"
- variable: memory
label: "Memory RAM"
schema:
type: string
default: "2Gi"
- variable: requests
label: "Advanced Request minimum resources required"
schema:
type: dict
attrs:
- variable: cpu
label: "CPU"
schema:
type: string
default: "10m"
- variable: memory
label: "Memory RAM"
schema:
type: string
default: "50Mi"
- variable: autoscaling
group: "Resources and Devices"
label: "Horizontal Pod Autoscaler"
schema:
type: dict
attrs:
- variable: enabled
label: "enabled"
schema:
type: boolean
default: false
show_subquestions_if: true
subquestions:
- variable: target
label: "Target"
description: "deployment name, defaults to main deployment"
schema:
type: string
default: ""
- variable: minReplicas
label: "Minimum Replicas"
schema:
type: int
default: 1
- variable: maxReplicas
label: "Maximum Replicas"
schema:
type: int
default: 5
- variable: targetCPUUtilizationPercentage
label: "Target CPU Utilization Percentage"
schema:
type: int
default: 80
- variable: targetMemoryUtilizationPercentage
label: "Target Memory Utilization Percentage"
schema:
type: int
default: 80

View File

@@ -0,0 +1,3 @@
API Support for your favorite torrent trackers.
This App is supplied by TrueCharts, for more information please visit https://truecharts.org

View File

@@ -0,0 +1 @@
{{ include "common.all" . }}

View File

@@ -0,0 +1,41 @@
# Default values for Jackett.
image:
repository: ghcr.io/k8s-at-home/jackett
pullPolicy: IfNotPresent
tag: v0.18.616
strategy:
type: Recreate
service:
main:
enabled: true
ports:
main:
port: 9117
probes:
liveness:
path: "/UI/Login"
readiness:
path: "/UI/Login"
startup:
path: "/UI/Login"
env: {}
# TZ: UTC
# PUID: 1001
# PGID: 1001
persistence:
config:
enabled: true
mountPath: "/config"
type: pvc
accessMode: ReadWriteOnce
size: "100Gi"

View File

@@ -18,4 +18,4 @@ maintainers:
name: common
sources: null
type: library
version: 6.10.7
version: 6.11.0

View File

@@ -57,6 +57,9 @@ metadata:
name: {{ $ingressName }}
labels:
{{- include "common.labels" . | nindent 4 }}
{{- with $values.labels }}
{{- toYaml . | nindent 4 }}
{{- end }}
annotations:
"traefik.ingress.kubernetes.io/router.entrypoints": {{ $values.entrypoint | default "websecure" }}
"traefik.ingress.kubernetes.io/router.middlewares": {{ $middlewares | quote }}

View File

@@ -23,9 +23,9 @@ kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: {{ $pvcName }}
{{- if or $values.skipuninstall $values.annotations }}
{{- if or $values.retain $values.annotations }}
annotations:
{{- if $values.skipuninstall }}
{{- if $values.retain }}
"helm.sh/resource-policy": keep
{{- end }}
{{- with $values.annotations }}
@@ -34,6 +34,9 @@ metadata:
{{- end }}
labels:
{{- include "common.labels" . | nindent 4 }}
{{- with $values.labels }}
{{- toYaml . | nindent 4 }}
{{- end }}
spec:
accessModes:
- {{ required (printf "accessMode is required for PVC %v" $pvcName) $values.accessMode | quote }}

View File

@@ -7,6 +7,40 @@
{{- $_ := set . "Values" (deepCopy $mergedValues) -}}
{{- end -}}
{{/* merge podAnnotationsList with podAnnotations */}}
{{- $podAnnotationsDict := dict }}
{{- range .Values.podAnnotationsList }}
{{- $_ := set $podAnnotationsDict .name .value }}
{{- end }}
{{- $podanno := merge .Values.podAnnotations $podAnnotationsDict }}
{{- $_ := set .Values "podAnnotations" (deepCopy $podanno) -}}
{{/* merge podLabelsList with podLabels */}}
{{- $podLabelsDict := dict }}
{{- range .Values.controller.labelsList }}
{{- $_ := set $podLabelsDict .name .value }}
{{- end }}
{{- $podlab := merge .Values.controller.labels $podLabelsDict }}
{{- $_ := set .Values.controller "labels" (deepCopy $podlab) -}}
{{/* merge controllerAnnotationsList with controllerAnnotations */}}
{{- $controllerAnnotationsDict := dict }}
{{- range .Values.controller.annotationsList }}
{{- $_ := set $controllerAnnotationsDict .name .value }}
{{- end }}
{{- $controlleranno := merge .Values.controller.annotations $controllerAnnotationsDict }}
{{- $_ := set .Values.controller "annotations" (deepCopy $controlleranno) -}}
{{/* merge controllerLabelsList with controllerLabels */}}
{{- $controllerLabelsDict := dict }}
{{- range .Values.controller.labelsList }}
{{- $_ := set $controllerLabelsDict .name .value }}
{{- end }}
{{- $controllerlab := merge .Values.controller.labels $controllerLabelsDict }}
{{- $_ := set .Values "labels" (deepCopy $controllerlab) -}}
{{/* merge persistenceList with Persitence */}}
{{- $perDict := dict }}
{{- range $index, $item := .Values.persistenceList -}}
@@ -29,6 +63,30 @@
{{- $_ := set .Values "persistence" (deepCopy $per) -}}
{{/* merge persistenceAnnotationsList with persistenceAnnotations */}}
{{- range $index, $item := .Values.persistence }}
{{- $persistenceAnnotationsDict := dict }}
{{- range $item.annotationsList }}
{{- $_ := set $persistenceAnnotationsDict .name .value }}
{{- end }}
{{- $tmp := $item.annotations }}
{{- $persistenceanno := merge $tmp $persistenceAnnotationsDict }}
{{- $_ := set $item "annotations" (deepCopy $persistenceanno) -}}
{{- end }}
{{/* merge persistenceLabelsList with persistenceLabels */}}
{{- range $index, $item := .Values.persistence }}
{{- $persistenceLabelsDict := dict }}
{{- range $item.labelsList }}
{{- $_ := set $persistenceLabelsDict .name .value }}
{{- end }}
{{- $tmp := $item.labels }}
{{- $persistencelab := merge $tmp $persistenceLabelsDict }}
{{- $_ := set $item "labels" (deepCopy $persistencelab) -}}
{{- end }}
{{/* merge ingressList with ingress */}}
{{- $ingDict := dict }}
{{- range $index, $item := .Values.ingressList -}}
@@ -41,6 +99,30 @@
{{- $ing := merge .Values.ingress $ingDict }}
{{- $_ := set .Values "ingress" (deepCopy $ing) -}}
{{/* merge ingressAnnotationsList with ingressAnnotations */}}
{{- range $index, $item := .Values.ingress }}
{{- $ingressAnnotationsDict := dict }}
{{- range $item.annotationsList }}
{{- $_ := set $ingressAnnotationsDict .name .value }}
{{- end }}
{{- $tmp := $item.annotations }}
{{- $ingressanno := merge $tmp $ingressAnnotationsDict }}
{{- $_ := set $item "annotations" (deepCopy $ingressanno) -}}
{{- end }}
{{/* merge ingressLabelsList with ingressLabels */}}
{{- range $index, $item := .Values.ingress }}
{{- $ingressLabelsDict := dict }}
{{- range $item.labelsList }}
{{- $_ := set $ingressLabelsDict .name .value }}
{{- end }}
{{- $tmp := $item.labels }}
{{- $ingresslab := merge $tmp $ingressLabelsDict }}
{{- $_ := set $item "labels" (deepCopy $ingresslab) -}}
{{- end }}
{{/* Enable privileged securitycontext when deviceList is used */}}
{{- if .Values.securityContext.privileged }}
{{- else if .Values.deviceList }}

View File

@@ -27,6 +27,12 @@
lifecycle:
{{- toYaml . | nindent 4 }}
{{- end }}
{{- with .Values.termination.messagePath }}
terminationMessagePath: {{ . }}
{{- end }}
{{- with .Values.termination.messagePolicy }}
terminationMessagePolicy: {{ . }}
{{- end }}
env:
{{- range $key, $value := .Values.envTpl }}

View File

@@ -35,6 +35,9 @@ dnsConfig:
{{- toYaml . | nindent 2 }}
{{- end }}
enableServiceLinks: {{ .Values.enableServiceLinks }}
{{- with .Values.termination.gracePeriodSeconds }}
terminationGracePeriodSeconds: {{ . }}
{{- end }}
{{- with .Values.initContainers }}
initContainers:
{{- toYaml . | nindent 2 }}

View File

@@ -18,6 +18,9 @@
{{- with $item.readOnly }}
readOnly: {{ . }}
{{- end }}
{{- with $item.mountPropagation }}
mountPropagation: {{ . }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}

View File

@@ -73,3 +73,96 @@ func (suite *PersistenceVolumeClaimTestSuite) TestStorageClass() {
})
}
}
func (suite *PersistenceVolumeClaimTestSuite) TestMetaData() {
defaultChartAnnotations := make(map[string]interface{})
defaultChartLabels := map[string]interface{}{
"app.kubernetes.io/instance": "common-test",
"app.kubernetes.io/managed-by": "Helm",
"app.kubernetes.io/name": "common-test",
"app.kubernetes.io/version":"none",
"helm.sh/chart": "common-test-3.1.0",
}
tests := map[string]struct {
values []string
expectedAnnotations map[string]interface{}
expectedLabels map[string]interface{}
}{
"Default": {
values: []string{
"persistence.config.enabled=true",
},
expectedAnnotations: nil,
expectedLabels: nil,
},
"NoRetain": {
values: []string{
"persistence.config.enabled=true",
"persistence.config.labels.test_label=test",
"persistence.config.annotations.test_annotation=test",
},
expectedAnnotations: map[string]interface{}{
"test_annotation": "test",
},
expectedLabels: map[string]interface{}{
"test_label": "test",
},
},
"Retain": {
values: []string{
"persistence.config.enabled=true",
"persistence.config.retain=true",
"persistence.config.labels.test_label=test",
"persistence.config.annotations.test_annotation=test",
},
expectedAnnotations: map[string]interface{}{
"helm.sh/resource-policy": "keep",
"test_annotation": "test",
},
expectedLabels: map[string]interface{}{
"test_label": "test",
},
},
}
for name, tc := range tests {
suite.Suite.Run(name, func() {
err := suite.Chart.Render(nil, tc.values, nil)
if err != nil {
suite.FailNow(err.Error())
}
pvcManifest := suite.Chart.Manifests.Get("PersistentVolumeClaim", "common-test-config")
suite.Assertions.NotEmpty(pvcManifest)
pvcAnnotations := pvcManifest.Path("metadata.annotations").Data()
testAnnotations := make(map[string]interface{})
for index, element := range defaultChartAnnotations {
testAnnotations[index] = element
}
for index, element := range tc.expectedAnnotations {
testAnnotations[index] = element
}
if len(testAnnotations) == 0 {
suite.Assertions.Equal(nil, pvcAnnotations)
} else {
suite.Assertions.EqualValues(testAnnotations, pvcAnnotations)
}
pvcLabels := pvcManifest.Path("metadata.labels").Data()
testLabels := make(map[string]interface{})
for index, element := range defaultChartLabels {
testLabels[index] = element
}
for index, element := range tc.expectedLabels {
testLabels[index] = element
}
if len(testLabels) == 0 {
suite.Assertions.Equal(nil, pvcLabels)
} else {
suite.Assertions.EqualValues(testLabels, pvcLabels)
}
})
}
}

View File

@@ -1,7 +1,6 @@
package common
import (
"fmt"
"testing"
"github.com/truecharts/apps/tests/helmunit"
@@ -102,37 +101,3 @@ func (suite *ServiceTestSuite) TestPortProtocol() {
})
}
}
func (suite *ServiceTestSuite) TestAnnotations() {
tests := map[string]struct {
values []string
expectedAnnotations map[string]string
}{
"Default": {values: nil, expectedAnnotations: nil},
"ExplicitTCP": {values: []string{"service.main.ports.main.protocol=TCP"}, expectedAnnotations: nil},
"ExplicitHTTP": {values: []string{"service.main.ports.main.protocol=HTTP"}, expectedAnnotations: nil},
"ExplicitHTTPS": {values: []string{"service.main.ports.main.protocol=HTTPS"}, expectedAnnotations: map[string]string{"traefik.ingress.kubernetes.io/service.serversscheme": "https"}},
"ExplicitUDP": {values: []string{"service.main.ports.main.protocol=UDP"}, expectedAnnotations: nil},
}
for name, tc := range tests {
suite.Suite.Run(name, func() {
err := suite.Chart.Render(nil, tc.values, nil)
if err != nil {
suite.FailNow(err.Error())
}
serviceManifest := suite.Chart.Manifests.Get("Service", "common-test")
suite.Assertions.NotEmpty(serviceManifest)
serviceAnnotations, _ := serviceManifest.Path("metadata.annotations").Children()
if tc.expectedAnnotations == nil {
suite.Assertions.Empty(serviceAnnotations)
} else {
for annotation, value := range tc.expectedAnnotations {
serviceAnnotation := serviceManifest.Path("metadata.annotations").Search(annotation)
suite.Assertions.NotEmpty(serviceAnnotation, fmt.Sprintf("Annotation %s not found", annotation))
suite.Assertions.EqualValues(value, serviceAnnotation.Data(), fmt.Sprintf("Invalid value for annotation %s", annotation))
}
}
})
}
}

View File

@@ -10,8 +10,16 @@ controller:
# -- Set the controller type.
# Valid options are deployment, daemonset or statefulset
type: deployment
# -- Set annotations on the deployment/statefulset/daemonset
# -- Set additional annotations on the deployment/statefulset/daemonset
annotationsList: []
# - name: somename
# value: somevalue
# -- Set annotations on the deployment/statefulset/daemonset
annotations: {}
# -- Set additional labels on the deployment/statefulset/daemonset
labelsList: []
# - name: somename
# value: somevalue
# -- Set labels on the deployment/statefulset/daemonset
labels: {}
# -- Number of desired pods
@@ -44,9 +52,20 @@ command: []
# -- Override the args for the default container
args: []
# -- Set additional annotations on the pod
podAnnotationsList: []
# - name: somename
# value: somevalue
#
# -- Set annotations on the pod
podAnnotations: {}
# -- Set additional labels on the pod
podLabelsList: []
# - name: somename
# value: somevalue
# -- Set labels on the pod
podLabels: {}
@@ -217,6 +236,20 @@ probes:
periodSeconds: 5
failureThreshold: 60
termination:
# -- Configure the path at which the file to which the main container's termination message will be written.
# -- [[ref](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle-1)]
messagePath:
# -- Indicate how the main container's termination message should be populated.
# Valid options are `File` and `FallbackToLogsOnError`.
# -- [[ref](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle-1)]
messagePolicy:
# -- Duration in seconds the pod needs to terminate gracefully
# -- [[ref](https://kubernetes.io/docs/reference/kubernetes-api/workload-resources/pod-v1/#lifecycle)]
gracePeriodSeconds: 10
# -- Configure the services for the chart here.
# Additional services can be added by adding a dictionary key similar to the 'main' service.
# @default -- See below
@@ -234,10 +267,16 @@ service:
# -- Set the service type
type: ClusterIP
annotationsList: []
# - name: somename
# value: somevalue
# -- Provide additional annotations which may be required.
annotations: {}
labelsList: []
# - name: somename
# value: somevalue
# -- Set labels on the deployment/statefulset/daemonset
# -- Provide additional labels which may be required.
labels: {}
@@ -300,12 +339,19 @@ ingress:
# -- Additional List of middlewares in the traefikmiddlewares k8s namespace to add automatically
# Creates an annotation with the middlewares and appends k8s and traefik namespaces to the middleware names
middlewares: []
annotationsList: []
# - name: somename
# value: somevalue
# -- Provide additional annotations which may be required.
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
labelsList: []
# - name: somename
# value: somevalue
# -- Set labels on the deployment/statefulset/daemonset
# -- Provide additional labels which may be required.
# -- Provide additional labels which may be required.
labels: {}
@@ -357,6 +403,19 @@ persistence:
config:
# -- Enables or disables the persistence item
enabled: false
annotationsList: []
# - name: somename
# value: somevalue
# -- Add annotations to PVC object
annotations: {}
labelsList: []
# - name: somename
# value: somevalue
# -- Set labels on the deployment/statefulset/daemonset
# -- Provide additional labels which may be required.
# -- Add labels to PVC object
labels: {}
# -- Sets the persistence type
# Valid options are pvc, emptyDir, hostPath or custom
@@ -388,6 +447,8 @@ persistence:
# -- Used in conjunction with `existingClaim`. Specifies a sub-path inside the referenced volume instead of its root
subPath: # some-subpath
# mountPropagation: {}
# -- AccessMode for the persistent volume.
# Make sure to select an access mode that is supported by your storage provider!
# [[ref]](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes)
@@ -397,7 +458,7 @@ persistence:
size: 1Gi
# - Set to true to retain the PVC upon `helm uninstall`
skipuninstall: false
retain: false
# -- Create an emptyDir volume to share between all containers
# [[ref]]https://kubernetes.io/docs/concepts/storage/volumes/#emptydir)