Dépannage du rôle reemo-infra

Cette page couvre les erreurs courantes rencontrées lors du déploiement de l’infrastructure Reemo avec le rôle Ansible reemo-infra.

HMACSECRET is empty

Symptôme : Le playbook s’arrête sur la tâche check if HMACSECRET is not empty avec l’erreur suivante :

TASK [reemo-infra : check if HMACSECRET is not empty] **************************
[ERROR]: Task failed: Action failed: HMACSECRET is empty
Origin: /path/to/roles/reemo-infra/tasks/main.yml:69:3

fatal: [portal_manager1]: FAILED! => {"changed": false, "msg": "HMACSECRET is empty"}

Cause : Votre inventaire déploie une architecture avec DMZ : les groupes api_manager et portal_manager remplacent le groupe infra_manager, et le portail est installé sur une machine séparée de l’API. Dans cette architecture, le portail signe chacune de ses requêtes vers l’API avec un secret partagé, la variable HMACSECRET. L’API vérifie cette signature et rejette toute requête qui n’en porte pas une valide. Si la variable n’est pas renseignée dans l’inventaire, le rôle refuse de poursuivre le déploiement.

Solution :

  1. Générez un secret :

    • Utilisez une chaîne aléatoire d’au moins 32 caractères, par exemple avec openssl rand -hex 32

    • Conservez-la avec les autres secrets de votre instance

  2. Ajoutez la variable dans l’inventaire :

    • Déclarez HMACSECRET dans all.vars, afin que l’API et tous les portails partagent la même valeur :

    all:
        vars:
            API_LICENSE: "< licence >"
            HMACSECRET: "< secret généré >"
    api_manager:
        ...
    portal_manager:
        ...
    
  3. Relancez le playbook :

    • Relancez le déploiement avec la même commande ansible-playbook

Si l’API et les portails ne partagent pas exactement la même valeur, les requêtes du portail sont rejetées par l’API après le déploiement : vérifiez que HMACSECRET n’est défini qu’une seule fois, dans all.vars, et non redéfini dans un groupe ou sur un hôte.

Voir aussi

Portail utilisateur et administrateur — Séparation physique des portails et de l’API dans une architecture avec DMZ.