Automatiser les mises à jour de Home Assistant avec drone.io
-
Je vais vous décrire ici la solution que j’utilise pour mettre à jour mon Home Assistant en évitant au maximum les problèmes de compatibilité de configuration.
L’idée est de valider la configuration actuelle avec la version courante de HA puis avec la dernière version et de mettre à jour automatiquement s’il n’y a pas d’erreur remontée.
L’utilisation de drone.io est une alternative à Github Actions mais vous imposera une installation @home de quelques outils.
La solution proposée est donnée à titre d’exemple (fonctionnel) et sera à adapter pour coller à votre fonctionnement.Prérequis
Pour continuer, vous devez :
- Gérer votre configuration HA avec un outil de gestion de version tel que Git.
- Un serveur Git comme gogs.io ou gitea.io qui devra être compatible avec drone.io (à voir ici).
- Installer un serveur drone.io et un runner qui va gérer les étapes à réaliser pour mettre à jour HA selon le scénario décrit.
- Relier votre drone.io à votre projet git qui héberge votre configuration.
Fonctionnement
Ma configuration est donc gérée par Git. J’utilise 2 branches :
- La branche “test” sur laquelle je pousse toutes mes modifications de configuration. Chaque push déclenche la validation de la configuration avec la version actuelle de HA et la version fraichement mise à jour.
- Quand je souhaite déployer mes mises à jour et mettre à jour ma version de HA, je merge la branche “test” sur “master” et le push va déclencher l’installation de mes modifications et la mise à jour de HA.
- drone.io me permet aussi de déclencher en console la mise à jour de HA ou via l’IHM.
- Si ma configuration n’est pas valide, le scénario de mise à jour s’arrête.
Home Assistant est installé en virtualenv python. J’utilise 2 virtualenv :
- Un pour la version déployée de Home Assistant, celle actuellement utilisée.
- Un qui est systématiquement mis à jour et qui me permet de vérifier que ma configuration est toujours valide avec l’éventuelle mise à jour.
Mon scénario drone.io va réaliser les étapes suivantes (en s’arrêtant si un problème est rencontré) :
- Tester ma configuration sur la version HA actuellement déployée.
- Tester ma configuration sur la version HA mise à jour.
Si je ne suis pas sur ma branche de test, on rajoutera au scénario :
- Un status et stop de HA.
- Mise à jour des confs.
- Mise à jour de ma version de HA.
- Redémarrage/status de HA.
En image, ca donne ca :
.drone.yml
Voilà mon fichier
.drone.yml
dont je viens de vous détailler le fonctionnement.kind: pipeline type: exec name: check config platform: os: linux arch: amd64 steps: - name: on latest commands: - . /srv/homeassistant-test/bin/activate - python3 -m pip install --upgrade homeassistant - vault login -address=$VAULT_ADDR -no-print $VAULT_TOKEN > /dev/null 2>&1 - > vault kv get -format=json hass/secrets|jq -r '.data.data|keys[] as $k | "\($k): \(.[$k])"' > conf/secrets.yaml - hass -c conf --script check_config environment: VAULT_TOKEN: from_secret: vaultToken VAULT_ADDR: https://vault - name: on current commands: - . /srv/homeassistant/bin/activate - vault login -address=$VAULT_ADDR -no-print $VAULT_TOKEN > /dev/null 2>&1 - > vault kv get -format=json hass/secrets|jq -r '.data.data|keys[] as $k | "\($k): \(.[$k])"' > conf/secrets.yaml - hass -c conf --script check_config when: branch: - test environment: VAULT_TOKEN: from_secret: vaultToken VAULT_ADDR: https://vault trigger: branch: - test - master node: host:hass --- kind: pipeline type: exec name: upgrade platform: os: linux arch: amd64 steps: - name: HA status commands: - sudo systemctl status hass@homeassistant.service - name: HA stop commands: - sudo systemctl stop hass@homeassistant.service - name: HA upgrade commands: - rsync -avS --no-o --no-g --exclude .git --exclude zwcfg_0x.xml conf/ /home/homeassistant/hass/conf/ - vault login -address=$VAULT_ADDR -no-print $VAULT_TOKEN > /dev/null 2>&1 - > vault kv get -format=json hass/secrets|jq -r '.data.data|keys[] as $k | "\($k): \(.[$k])"' > /home/homeassistant/hass/conf/secrets.yaml - cd /srv/homeassistant - . bin/activate - python3 -m pip install --upgrade homeassistant environment: VAULT_TOKEN: from_secret: vaultToken VAULT_ADDR: https://vault - name: HA start commands: - sudo systemctl start hass@homeassistant.service - name: HA check restart commands: - sudo systemctl status hass@homeassistant.service depends_on: - check config trigger: status: - success branch: - master node: host: hass --- kind: secret name: vaultToken get: path: certificates/data/drone name: token
Un petit détail ne vous à certainement pas échappé… Je gère mes secrets Home Assistant dans un Vault. Il faudra adapter cette partie là pour gérer votre
secrets.yaml
utilisé lors des validations de configuration de HA. Ou attendre la suite
Je fonctionne sur ce principe depuis quelques semaines et j’en suis satisfait. L’utilisation de drone.io est une bonne alternative à Github Actions et tout ce mécanisme permet de garder la main sur ses données.