mglantz.eda-ha
mglantz.eda-ha
Un rôle qui assure une haute disponibilité pour un serveur Ansible piloté par événements (EDA). Il nécessite de configurer deux serveurs EDA indépendants ou plus et d'ajouter un équilibreur de charge devant eux. L'équilibreur de charge doit effectuer un équilibrage actif-passif entre vos serveurs EDA, ce qui signifie que B ne reçoit du trafic que si A échoue, etc.
Les règles exécutées sur le serveur EDA déclenchent des playbooks exposés en tant que modèles de tâche dans vos contrôleurs AAP. Lorsque vous créez les playbooks qui effectuent vos actions, vous incluez ce rôle comme indiqué dans l'exemple et vous dépendez des tâches dans les playbooks de la variable booléenne eda_activation fournie. Si cette variable est vraie, cela signifie que le serveur EDA en question est actif, sinon cela signifie qu'il est passif et aucune tâche ne doit être exécutée. Ainsi, les actions ne sont exécutées que lorsqu'un serveur EDA est "activé", c'est-à-dire celui qui reçoit le trafic équilibré.
La bascule entre actif et passif se fait à la vitesse à laquelle l'équilibreur de charge détecte une panne, généralement en quelques secondes. En effet, la seule différence entre les serveurs EDA A et B et leurs contrôleurs AAP correspondants est que les tâches ne sont exécutées que lorsqu'elles sont déclenchées par le serveur EDA actif. Aucune configuration ne diffère du côté serveur EDA.
Une fois que vous avez lu la documentation ci-dessous et que vous avez consulté le fichier tasks/main.yml du rôle, l'image ci-dessous aura du sens.
Installez le rôle avec :
ansible-galaxy role install mglantz.eda-ha
Pour utiliser ce rôle dans vos playbooks, créez un fichier requirements.yml que vous placerez dans votre répertoire de rôles. Le fichier requirements.yml doit contenir :
---
- name: mglantz.eda-ha
Un exemple de cela peut être vu ici : https://github.com/mglantz/event-driven-ansible-demo/
Exigences
Deux instances installées ou plus de Red Hat Ansible Automation Platform 2.4 avec contrôleur EDA, ou peut-être https://github.com/ansible/eda-server (le serveur eda en amont n'a cependant pas été testé).
Un équilibreur de charge, configuré pour effectuer un équilibrage de charge actif-passif vers les serveurs EDA installés.
Créez le fichier : /var/lib/ansible-automation-platform/eda/ui/static/media/detect.json sur chaque serveur EDA, comme suit :
{
"install_id": "id_unique_que_vous_inventez_fqdn_peut-etre"
}
Lorsque le rôle détermine quel serveur EDA est actif et lesquels sont passifs, il le fait en comparant l'install_id qu'il trouve en contactant un serveur EDA directement et celui qu'il trouve en passant par l'équilibreur de charge.
- Playbooks ajustés pour effectuer des actions comme dans la section
Exemple de Playbook
ci-dessous, qui profitent de ce rôle.
Variables de rôle
# nom de domaine de l'équilibreur de charge devant les serveurs EDA
load_balancer_fqdn: <string|fqdn de l'équilibreur de charge>
# nom de domaine du serveur EDA, suggestion, si AAP, configuré dans le modèle de tâche
eda_fqdn: <string|fqdn du serveur EDA>
# si nous devons valider le certificat https. si défini sur vrai, tous les serveurs EDA doivent avoir des certificats valides
# inclut également la connexion via l'équilibreur de charge
validate_eda_tls_cert: <bool|vrai/faux>
Dépendances
Ansible 2.9 ou 2.14.
Exemple de Playbook
Un exemple de la façon d'utiliser le rôle. Dans les playbooks qui exécutent des actions, ceux déclenchés par les événements EDA, ajustez-les comme suit :
---
# Le play ci-dessous doit être en haut de vos playbooks.
# Il est logique de définir la variable eda_fqdn au niveau du modèle de tâche
- name: Détecter quel serveur EDA est actif et définir eda_activation en conséquence
hosts: localhost
roles:
- { role: mglantz.eda-ha, load_balancer_fqdn: "loadbalancer.sudo.net", eda_fqdn: "eda.sudo.net" }
- name: Le site est en ligne
hosts: all
vars:
# La variable ci-dessous doit être ajoutée au play qui exécute vos actions réelles
eda_activation: "{{ hostvars['localhost']['eda_activation'] }}"
gather_facts: false
tasks:
- debug:
msg: "Tout va bien"
# Ajoutez ci-dessous la condition pour la tâche que vous souhaitez contrôler
when: eda_activation
# Ou similaire pour un bloc
- block:
- name: Faire autre chose
ansible.builtin.debug:
msg: "Quelque chose d'imaginaire"
- name: Faire aussi cela
ansible.builtin.debug:
msg: "Aussi cette chose (imaginaire)"
when: eda_activation
Licence
GPL 3.0
Informations sur l'auteur
- Magnus Glantz, sudo à redhat.com, 2023
- Roberto Nunez, rnunez à redhat.com, 2023
Role which adds HA capability to an EDA server setup
ansible-galaxy install mglantz.eda-ha