# Default values for home-assistant. # This is a YAML-formatted file. # Declare variables to be passed into your templates. # Number of replicas for the deployment replicaCount: 1 # Image settings image: # Repository for the Home Assistant image repository: ghcr.io/home-assistant/home-assistant # Image pull policy pullPolicy: IfNotPresent # Overrides the image tag whose default is the chart appVersion. tag: "" # List of imagePullSecrets for private image repositories imagePullSecrets: [] # Override the default name of the Helm chart nameOverride: "" # Override the default full name of the Helm chart fullnameOverride: "" # Service account settings serviceAccount: # Specifies whether a service account should be created create: true # Annotations to add to the service account annotations: {} # The name of the service account to use. # If not set and create is true, a name is generated using the fullname template name: "" # Annotations to add to the pod podAnnotations: {} # Pod security context settings podSecurityContext: {} # runAsUser: 568 # runAsGroup: 568 # fsGroup: 568 # fsGroupChangePolicy: "OnRootMismatch" # Environment variables env: [] # - name: TZ # value: Europe/Prague # - name: SOME_VAR_FROM_CONFIG_MAP # valueFrom: # configMapRef: # name: configmap-name # key: config-key # - name: SOME_SECRET # valueFrom: # secretKeyRef: # name: secret-name # key: secret-key # Use environment variables from ConfigMaps or Secrets envFrom: [] # - configMapRef: # name: config-map-name # - secretRef: # name: secret-name hostPort: # Enable 'hostPort' or not enabled: false port: 8123 # Specifies if the containers should be started in hostNetwork mode. # # Required for use auto-discovery feature of Home Assistant hostNetwork: false # Set the dnsPolicy (you'll want ClusterFirstWithHostNet if running on hostNetwork to reac # other k8s services via DNS # dnsPolicy: ClusterFirst # Container security context settings securityContext: {} # capabilities: # drop: # - ALL # readOnlyRootFilesystem: true # runAsNonRoot: true # runAsUser: 1000 # Pod's DNS Configuration # https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/#pod-dns-config # This value is useful if you need to reduce the DNS load: set "ndots" to 0 and only use FQDNs. dnsConfig: {} # nameservers: # - 1.2.3.4 # searches: # - ns1.svc.cluster-domain.example # - my.dns.search.suffix # options: # - name: ndots # value: "2" # Service settings service: # Service type (ClusterIP, NodePort, LoadBalancer, or ExternalName) type: ClusterIP # Service port port: 8080 # Annotations to add to the service annotations: {} # Ingress settings ingress: # Enable ingress for home assistant enabled: false # Enable external ingress (cannot be true when ingress.enabled is true) external: false className: "" labels: {} annotations: {} # kubernetes.io/ingress.class: nginx # kubernetes.io/tls-acme: "true" hosts: - host: chart-example.local paths: - path: / pathType: ImplementationSpecific tls: [] # - secretName: chart-example-tls # hosts: # - chart-example.local # Resource settings for the container resources: {} # We usually recommend not to specify default resources and to leave this as a conscious # choice for the user. This also increases chances charts run on environments with little # resources, such as Minikube. If you do want to specify resources, uncomment the following # lines, adjust them as necessary, and remove the curly braces after 'resources:'. # limits: # cpu: 100m # memory: 128Mi # requests: # cpu: 100m # memory: 128Mi # Node selector settings for scheduling the pod on specific nodes nodeSelector: {} # Tolerations settings for scheduling the pod based on node taints tolerations: [] # Affinity settings for controlling pod scheduling affinity: {} # Set a priorityClassName on Home Assistant pods priorityClassName: "" initContainers: [] # Example of integrating a custom component before starting the Home Assistant container # Uses emptyDir custom-components, see below # - name: init-panasonic-cc # image: alpine/git # command: [ "/bin/sh", "-c" ] # args: # - | # git clone https://github.com/sockless-coding/panasonic_cc.git /git/panasonic_cc # cp -r /git/panasonic_cc/custom_components/panasonic_cc/* /panasonic_cc # chown -R 1000:1000 /panasonic_cc/* # volumeMounts: # - name: custom-components # mountPath: /panasonic_cc # Configuration for Home Assistant configuration: # Enable or disable the configuration setup for Home Assistant enabled: false # Force init will merge the current configuration file with the default configuration on every start # This is useful when you want to ensure that the configuration file is always up to date forceInit: false # List of trusted proxies in the format of CIDR notation in a case of using a reverse proxy # Here is the list of the most common private IP ranges, use your list of possible trusted proxies, usually, it's the IP of the reverse proxy trusted_proxies: - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 - 127.0.0.0/8 # Template for the configuration.yaml file # Used the `tpl` function to render the template, so you can use Go template functions templateConfig: |- # Loads default set of integrations. Do not remove. default_config: {{- if or .Values.ingress.enabled .Values.ingress.external }} http: use_x_forwarded_for: true trusted_proxies: {{- range .Values.configuration.trusted_proxies }} - {{ . }} {{- end }} {{- end}} # Load frontend themes from the themes folder frontend: themes: !include_dir_merge_named themes automation: !include automations.yaml script: !include scripts.yaml scene: !include scenes.yaml # Init script for the Home Assistant initialization, you can use Go template functions # Script is executed before the Home Assistant container starts and is used to prepare the configuration # Will be executed only if the configuration.enabled is set to true initScript: |- #!/bin/bash set -e # Check if the configuration file exists if [ ! -f /config/configuration.yaml ]; then echo "Configuration file not found, creating a new one" cp /config-templates/configuration.yaml /config/configuration.yaml fi # Check if the force init is enabled forceInit="{{ .Values.configuration.forceInit }}" if [ "$forceInit" = "true" ]; then echo "Force init is enabled, overwriting the configuration file" current_time=$(date +%Y%m%d_%H%M%S) echo "Backup the current configuration file to configuration.yaml.$current_time" cp /config/configuration.yaml /config/configuration.yaml.$current_time echo "Before cleanup - all backup files:" ls -l /config/configuration.yaml.* echo "Cleaning up - keeping only 10 most recent backups..." ls -t /config/configuration.yaml.* 2>/dev/null | tail -n +11 | xargs -r rm echo "After cleanup - remaining backup files:" ls -l /config/configuration.yaml.* echo "The current configuration file will be merged with the default configuration file with this content:" cat /config-templates/configuration.yaml if [[ ! -s /config/configuration.yaml ]]; then # If /config/configuration.yaml is empty, use the content of /config-templates/configuration.yaml cat /config-templates/configuration.yaml > /config/configuration.yaml else # Perform the merge operation if /config/configuration.yaml is not empty yq eval-all --inplace 'select(fileIndex == 0) *d select(fileIndex == 1)' /config/configuration.yaml /config-templates/configuration.yaml fi fi # Check if the automations file exists if [ ! -f /config/automations.yaml ]; then echo "Automations file not found, creating a new one" touch /config/automations.yaml echo "[]" >> /config/automations.yaml fi # Check if the scripts file exists if [ ! -f /config/scripts.yaml ]; then echo "Scripts file not found, creating a new one" touch /config/scripts.yaml fi # Check if the scenes file exists if [ ! -f /config/scenes.yaml ]; then echo "Scenes file not found, creating a new one" touch /config/scenes.yaml fi initContainer: name: setup-config image: mikefarah/yq:4 securityContext: runAsUser: 0 command: ["/bin/sh", "-c"] args: - /bin/sh /mnt/init/init.sh # env: # - name: FORCE_INIT # valueFrom: # configMapKeyRef: # name: init-script # key: forceInit # Home Assistant configuration volume will be mounted to /config automatically volumeMounts: - name: init-volume mountPath: /mnt/init/init.sh subPath: init.sh - name: config-volume mountPath: /config-templates # Persistence values for the Home Assistant instance persistence: # Enable or disable persistence enabled: false # Access mode for the persistent volume claim accessMode: ReadWriteOnce # Size of the persistent volume claim size: 5Gi # Storage class for the persistent volume claim storageClass: "" # Name of the existing volume for the StatefulSet, this option can be used to bind to an existing PV existingVolume: "" # Name of the existing PVC to use with Deployment, this option can be used to use an existing PVC existingClaim: "" # Annotations to add to the persistent volume claim annotations: {} # k8up.io/backup: "true" # another-annotation: "value" ## Persistent Volume selectors ## https://kubernetes.io/docs/concepts/storage/persistent-volumes/#selector matchLabels: {} matchExpressions: {} # if you need any additional volumes, you can define them here additionalVolumes: [] # - name: custom-components # emptyDir: {} # - hostPath: # path: >- # /dev/serial/by-id/usb-Silicon_Labs_Sonoff_Zigbee_3.0_USB_Dongle_Plus_0001-if00-port0 # type: CharDevice # name: usb # if you need any additional volume mounts, you can define them here additionalMounts: [] # - mountPath: /config/custom_components/panasonic_cc # name: custom-components # - mountPath: /dev/ttyACM0 # name: usb # if you need to expose additional ports additionalPorts: [] # - name: sia # containerPort: 8124 # protocol: TCP # if you need to expose additional services additionalServices: [] # - name: sia # port: 8124 # targetPort: sia # type: NodePort # protocol: TCP # nodePort: 30124 livenessProbe: failureThreshold: 3 httpGet: path: / port: http scheme: HTTP periodSeconds: 20 successThreshold: 1 timeoutSeconds: 2 readinessProbe: failureThreshold: 3 httpGet: path: / port: http scheme: HTTP periodSeconds: 10 successThreshold: 1 timeoutSeconds: 1 startupProbe: {} # initialDelaySeconds: 1 # periodSeconds: 5 # timeoutSeconds: 1 # successThreshold: 1 # failureThreshold: 1 # httpGet: # scheme: HTTP # path: / # port: http serviceMonitor: # requires HA integration: https://www.home-assistant.io/integrations/prometheus/ enabled: false scrapeInterval: 30s labels: {} # Bearer token authentication configuration bearerToken: {} # Name of the secret containing the bearer token # secretName: "" # Key in the secret containing the bearer token # secretKey: "" # Addons configuration for additional services addons: # Code-server addon configuration codeserver: # Enable or disable the code-server addon enabled: false # Resource settings for the code-server container resources: {} # Image settings for the code-server addon image: # Repository for the code-server image repository: ghcr.io/coder/code-server # Image pull policy for the code-server image pullPolicy: IfNotPresent # Tag for the code-server image tag: "4.99.4" # Service settings service: # Service type (ClusterIP, NodePort, LoadBalancer, or ExternalName) type: ClusterIP # Service port port: 12321 # Ingress settings for the code-server addon ingress: # Enable or disable the ingress for the code-server addon enabled: false # Ingress class name className: "" # Ingress annotations annotations: {} # Ingress hosts configuration hosts: - host: chart-example.local paths: - path: / pathType: ImplementationSpecific # Ingress TLS configuration tls: [] # if you need any additional volume mounts, you can define them here additionalMounts: [] # - mountPath: /home/coder/.ssh/id_rsa # name: id-rsa # Controller configuration controller: # Type of controller to use: StatefulSet or Deployment type: StatefulSet # Annotations to add to the stateful set statefulSetAnnotations: {} # Annotations to add to the deployment deploymentAnnotations: {}