Navigation

    BinBashFR
    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Automatiser les mises à jour de Home Assistant avec drone.io

    Home Assistant
    home assistant
    1
    1
    89
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • remi
      remi last edited by gaetan

      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 :

      test_ha.png

      maj_ha.png

      .drone.yml

      Voilà mon fichier .drone.ymldont 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.yamlutilisé 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.

      1 Reply Last reply Reply Quote 0
      • First post
        Last post