[stable/home-assistant] support for optional VS Code server sidecar (#13538)

* support for optional VS Code server sidecar

Signed-off-by: Jeff Billimek <jeff@billimek.com>

* remove use of init container

Signed-off-by: Jeff Billimek <jeff@billimek.com>

* expanding readme and making vscode dir configurable

Signed-off-by: Jeff Billimek <jeff@billimek.com>

* fix conflicintg port names and make password env value a secret

Signed-off-by: Jeff Billimek <jeff@billimek.com>
This commit is contained in:
Jeff Billimek
2019-05-15 04:20:16 -07:00
committed by Kubernetes Prow Robot
parent 3da291aad0
commit 492f6228be
7 changed files with 209 additions and 9 deletions
+2 -1
View File
@@ -2,7 +2,7 @@ apiVersion: v1
appVersion: 0.92.2
description: Home Assistant
name: home-assistant
version: 0.8.2
version: 0.9.0
keywords:
- home-assistant
- hass
@@ -12,6 +12,7 @@ icon: https://upload.wikimedia.org/wikipedia/commons/thumb/6/6e/Home_Assistant_L
sources:
- https://github.com/home-assistant/home-assistant
- https://github.com/danielperna84/hass-configurator
- https://github.com/cdr/code-server
maintainers:
- name: billimek
email: jeff@billimek.com
+33 -4
View File
@@ -96,6 +96,29 @@ The following tables lists the configurable parameters of the Home Assistant cha
| `configurator.service.externalIPs` | External IPs for the configurator UI | `[]` |
| `configurator.service.loadBalancerIP` | Loadbalancer IP for the configurator UI | `` |
| `configurator.service.loadBalancerSourceRanges` | Loadbalancer client IP restriction range for the configurator UI | `[]` |
| `vscode.enabled` | Enable the optional [VS Code Server Sidecar](https://github.com/cdr/code-server) | `false` |
| `vscode.image.repository` | Image repository | `codercom/code-server` |
| `vscode.image.tag` | Image tag | `1.939`|
| `vscode.image.pullPolicy` | Image pull policy | `IfNotPresent` |
| `vscode.hassConfig` | Base path of the home assistant configuration files | `/config` |
| `vscode.vscodePath` | Base path of the VS Code configuration files | `/config/.vscode` |
| `vscode.password` | If this is set, will require a password to access the VS Code Server UI | `` |
| `vscode.extraEnv` | Extra ENV vars to pass to the configuration UI | `{}` |
| `vscode.ingress.enabled` | Enables Ingress for the VS Code UI | `false` |
| `vscode.ingress.annotations` | Ingress annotations for the VS Code UI | `{}` |
| `vscode.ingress.hosts` | Ingress accepted hostnames for the VS Code UI | `chart-example.local` |
| `vscode.ingress.tls` | Ingress TLS configuration for the VS Code UI | `[]` |
| `vscode.resources` | CPU/Memory resource requests/limits for the VS Code UI | `{}` |
| `vscode.securityContext` | Security context to be added to hass-vscode pods for the VS Code UI | `{}` |
| `vscode.service.type` | Kubernetes service type for the VS Code UI | `ClusterIP` |
| `vscode.service.port` | Kubernetes port where the vscode UI is exposed| `80` |
| `vscode.service.nodePort` | nodePort to listen on for the VS Code UI | `` |
| `vscode.service.annotations` | Service annotations for the VS Code UI | `{}` |
| `vscode.service.labels` | Service labels to use for the VS Code UI | `{}` |
| `vscode.service.clusterIP` | Cluster IP for the VS Code UI | `` |
| `vscode.service.externalIPs` | External IPs for the VS Code UI | `[]` |
| `vscode.service.loadBalancerIP` | Loadbalancer IP for the VS Code UI | `` |
| `vscode.service.loadBalancerSourceRanges` | Loadbalancer client IP restriction range for the VS Code UI | `[]` |
| `resources` | CPU/Memory resource requests/limits or the home-assistant GUI | `{}` |
| `nodeSelector` | Node labels for pod assignment or the home-assistant GUI | `{}` |
| `tolerations` | Toleration labels for pod assignment or the home-assistant GUI | `[]` |
@@ -117,15 +140,21 @@ helm install --name my-release -f values.yaml stable/home-assistant
Read through the [values.yaml](values.yaml) file. It has several commented out suggested values.
## Regarding configuring home assistant
## Configuring home assistant
Much of the home assistant configuration occurs inside the various files persisted to the `/config` directory. This will require external access to the persistent storage location where the home assistant configuration data is stored.
Much of the home assistant configuration occurs inside the various files persisted to the `/config` directory. This will require external access to the persistent storage location where the home assistant configuration data is stored. Because this may be a limitation, there are two options built-in to this chart:
Because this may be a limitation, the [Home Assistant Configurator UI](https://github.com/danielperna84/hass-configurator) is added to the chart as an option to provide a webUI for editing the various configuration files.
### Configurator UI
[Home Assistant Configurator UI](https://github.com/danielperna84/hass-configurator) is added as an optional sidecar container to Home Assistant with access to the home assistant configuration for easy in-browser editing and manipulation of Home Assistant.
### VS Code Server
[VS Code Server](https://github.com/cdr/code-server) is added as an optional sidecar container to Home Assistant with access to the home assistant configuration for easy in-browser editing and manipulation of Home Assistant. If using this, it is possible to manually install the [Home Assistant Config Helper Extension](https://github.com/keesschollaart81/vscode-home-assistant) in order to have a deeper integration with Home Assistant within VS Code while editing the configuration files.
## Git sync secret
In order to sync the home assistent from a git repo, you have to store a ssh key as a kubernetes git secret
In order to sync the home assistant from a git repo, you have to store a ssh key as a kubernetes git secret
```console
kubectl create secret generic git-creds --from-file=id_rsa=git/k8s_id_rsa --from-file=known_hosts=git/known_hosts --from-file=id_rsa.pub=git/k8s_id_rsa.pub
```
@@ -109,16 +109,16 @@ spec:
image: "{{ .Values.configurator.image.repository }}:{{ .Values.configurator.image.tag }}"
imagePullPolicy: {{ .Values.configurator.image.pullPolicy }}
ports:
- name: http
- name: configurator
containerPort: {{ .Values.configurator.service.port }}
protocol: TCP
livenessProbe:
tcpSocket:
port: http
port: configurator
initialDelaySeconds: 30
readinessProbe:
tcpSocket:
port: http
port: configurator
initialDelaySeconds: 15
env:
{{- if .Values.configurator.hassApiPassword }}
@@ -178,6 +178,60 @@ spec:
resources:
{{ toYaml .Values.configurator.resources | indent 12 }}
{{- end }}
{{- if .Values.vscode.enabled }}
- name: vscode
image: "{{ .Values.vscode.image.repository }}:{{ .Values.vscode.image.tag }}"
imagePullPolicy: {{ .Values.vscode.image.pullPolicy }}
workingDir: {{ .Values.vscode.hassConfig }}
args:
- --allow-http
- --port={{ .Values.vscode.service.port }}
{{- if not (.Values.vscode.password) }}
- --no-auth
{{- end }}
{{- if .Values.vscode.vscodePath }}
- --extensions-dir={{ .Values.vscode.vscodePath }}
- --user-data-dir={{ .Values.vscode.vscodePath }}
{{- end }}
ports:
- name: vscode
containerPort: {{ .Values.vscode.service.port }}
protocol: TCP
livenessProbe:
tcpSocket:
port: vscode
initialDelaySeconds: 30
readinessProbe:
tcpSocket:
port: vscode
initialDelaySeconds: 15
env:
{{- if .Values.vscode.password }}
- name: PASSWORD
valueFrom:
secretKeyRef:
name: {{ template "home-assistant.fullname" . }}-vscode
key: password
{{- end }}
{{- range $key, $value := .Values.vscode.extraEnv }}
- name: {{ $key }}
value: {{ $value }}
{{- end }}
volumeMounts:
- mountPath: /config
name: config
{{- if .Values.usePodSecurityContext }}
securityContext:
runAsUser: {{ default 0 .Values.runAsUser }}
{{- if and (.Values.runAsUser) (.Values.fsGroup) }}
{{- if not (eq .Values.runAsUser 0.0) }}
fsGroup: {{ .Values.fsGroup }}
{{- end }}
{{- end }}
{{- end }}
resources:
{{ toYaml .Values.vscode.resources | indent 12 }}
{{- end }}
volumes:
- name: config
{{- if .Values.persistence.enabled }}
@@ -19,4 +19,21 @@ data:
{{- if .Values.configurator.password }}
password: {{ .Values.configurator.password | b64enc | quote }}
{{- end }}
{{- end }}
---
{{- if .Values.vscode.enabled }}
apiVersion: v1
kind: Secret
metadata:
name: {{ template "home-assistant.fullname" . }}-vscode
labels:
app.kubernetes.io/name: {{ include "home-assistant.name" . }}
helm.sh/chart: {{ include "home-assistant.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
type: Opaque
data:
{{- if .Values.vscode.password }}
password: {{ .Values.vscode.password | b64enc | quote }}
{{- end }}
{{- end }}
+10 -1
View File
@@ -45,13 +45,22 @@ spec:
nodePort: {{.Values.service.nodePort}}
{{ end }}
{{- if .Values.configurator.enabled }}
- name: http
- name: configurator
port: {{ .Values.configurator.service.port }}
protocol: TCP
targetPort: 3218
{{ if (and (eq .Values.configurator.service.type "NodePort") (not (empty .Values.configurator.service.nodePort))) }}
nodePort: {{.Values.configurator.service.nodePort}}
{{ end }}
{{- end }}
{{- if .Values.vscode.enabled }}
- name: vscode
port: {{ .Values.vscode.service.port }}
protocol: TCP
targetPort: 80
{{ if (and (eq .Values.vscode.service.type "NodePort") (not (empty .Values.vscode.service.nodePort))) }}
nodePort: {{.Values.vscode.service.nodePort}}
{{ end }}
{{- end }}
selector:
app.kubernetes.io/name: {{ include "home-assistant.name" . }}
@@ -0,0 +1,39 @@
{{- if (.Values.vscode.enabled) and (.Values.vscode.ingress.enabled) }}
{{- $fullName := include "home-assistant.fullname" . -}}
{{- $servicePort := .Values.vscode.service.port -}}
{{- $ingressPath := .Values.vscode.ingress.path -}}
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: {{ $fullName }}-vscode
labels:
app.kubernetes.io/name: {{ include "home-assistant.name" . }}
helm.sh/chart: {{ include "home-assistant.chart" . }}
app.kubernetes.io/instance: {{ .Release.Name }}
app.kubernetes.io/managed-by: {{ .Release.Service }}
{{- with .Values.vscode.ingress.annotations }}
annotations:
{{ toYaml . | indent 4 }}
{{- end }}
spec:
{{- if .Values.vscode.ingress.tls }}
tls:
{{- range .Values.vscode.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.vscode.ingress.hosts }}
- host: {{ . }}
http:
paths:
- path: {{ $ingressPath }}
backend:
serviceName: {{ $fullName }}
servicePort: {{ $servicePort }}
{{- end }}
{{- end }}
+51
View File
@@ -168,6 +168,57 @@ monitoring:
# Set labels for the ServiceMonitor, use this to define your scrape label for Prometheus Operator
# labels:
vscode:
enabled: false
## code-server container image
##
image:
repository: codercom/code-server
tag: 1.939
pullPolicy: IfNotPresent
## VSCode password
# password:
## path where the home assistant configuration is stored
hassConfig: /config
## path where the VS Code data should reside
vscodePath: /config/.vscode
## Additional hass-vscode container environment variable
## For instance to add a http_proxy
##
extraEnv: {}
ingress:
enabled: false
annotations: {}
# kubernetes.io/ingress.class: nginx
# kubernetes.io/tls-acme: "true"
path: /
hosts:
- home-assistant.local
tls: []
# - secretName: home-assistant-tls
# hosts:
# - home-assistant.local
service:
type: ClusterIP
port: 80
annotations: {}
labels: {}
clusterIP: ""
## List of IP addresses at which the hass-vscode service is available
## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
##
externalIPs: []
loadBalancerIP: ""
loadBalancerSourceRanges: []
# nodePort: 30000
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