Déployer l'agent Onagre avec Ansible

Présentation

Pour les équipes gérant des parcs de serveurs, Ansible offre un moyen reproductible et idempotent de déployer l'agent Onagre sur l'ensemble de votre infrastructure. Cette page fournit un playbook et une structure de rôle prêts à l'emploi.


Prérequis

  • Ansible 2.9+ installé sur votre noeud de contrôle
  • Hôtes cibles exécutant une distribution Linux basée sur systemd (Debian, Ubuntu, RHEL, etc.)
  • Accès SSH avec des privilèges root ou sudo sur les hôtes cibles
  • Votre token d'agent Onagre (disponible depuis l'interface Onagre)

Configuration de l'inventaire

Définissez vos hôtes cibles dans votre inventaire. Vous pouvez les regrouper par rôle ou environnement :

[onagre_agents]
web-01 ansible_host=192.168.1.10
web-02 ansible_host=192.168.1.11
db-01  ansible_host=192.168.1.20

[onagre_agents:vars]
onagre_token=YOUR_TOKEN_HERE

💡 Tip

Utilisez ansible-vault pour chiffrer votre token plutôt que de le stocker en clair :

ansible-vault encrypt_string 'YOUR_TOKEN_HERE' --name 'onagre_token'

Playbook

---
- name: Deploy Onagre Agent
  hosts: onagre_agents
  become: true
  vars:
    onagre_agent_version: "latest"
    onagre_agent_name: "default"
    onagre_agent_binary: "/usr/local/bin/onagent@{{ onagre_agent_name }}"
    onagre_agent_service: "onagent@{{ onagre_agent_name }}"
    onagre_base_url: "https://d.onag.re"

  tasks:
    - name: Determine architecture
      ansible.builtin.set_fact:
        onagre_arch: >-
          {%- if ansible_architecture == 'x86_64' -%}linux-x64
          {%- elif ansible_architecture == 'aarch64' -%}linux-arm64
          {%- elif ansible_architecture in ['armv7l', 'armhf'] -%}linux-arm
          {%- else -%}linux-x64
          {%- endif -%}

    - name: Download Onagre Agent binary
      ansible.builtin.get_url:
        url: "{{ onagre_base_url }}/agent-{{ onagre_arch }}"
        dest: "{{ onagre_agent_binary }}"
        mode: "0755"
        force: true
      notify: Restart Onagre Agent

    - name: Create systemd service file
      ansible.builtin.template:
        src: onagent.service.j2
        dest: "/etc/systemd/system/{{ onagre_agent_service }}.service"
        mode: "0644"
      notify:
        - Reload systemd
        - Restart Onagre Agent

    - name: Enable and start Onagre Agent
      ansible.builtin.systemd:
        name: "{{ onagre_agent_service }}"
        enabled: true
        state: started

  handlers:
    - name: Reload systemd
      ansible.builtin.systemd:
        daemon_reload: true

    - name: Restart Onagre Agent
      ansible.builtin.systemd:
        name: "{{ onagre_agent_service }}"
        state: restarted

Template de service

Créez le template Jinja2 référencé par le playbook :

[Unit]
Description=Onagre Agent ({{ onagre_agent_name }})
After=network.target

[Service]
LimitNOFILE=65535
Environment=TOKEN={{ onagre_token }}
ExecStart={{ onagre_agent_binary }}
RestartSec=5
Restart=always
User=root

[Install]
WantedBy=multi-user.target

Structure des répertoires

ansible/
├── inventory/
│   └── hosts.ini
├── playbooks/
│   └── deploy-onagre-agent.yml
└── templates/
    └── onagent.service.j2

Exécution du playbook

Déployer sur tous les hôtes :

ansible-playbook -i inventory/hosts.ini playbooks/deploy-onagre-agent.yml

Déployer sur un hôte spécifique :

ansible-playbook -i inventory/hosts.ini playbooks/deploy-onagre-agent.yml --limit web-01

Avec un token chiffré par vault :

ansible-playbook -i inventory/hosts.ini playbooks/deploy-onagre-agent.yml --ask-vault-pass

Mise à jour des agents

Relancez le même playbook — il téléchargera le dernier binaire et redémarrera le service s'il a changé :

ansible-playbook -i inventory/hosts.ini playbooks/deploy-onagre-agent.yml

L'option force: true sur la tâche de téléchargement garantit que le binaire est toujours rafraîchi.


Désinstallation des agents

Pour supprimer les agents de votre parc, utilisez ce playbook :

---
- name: Uninstall Onagre Agent
  hosts: onagre_agents
  become: true
  vars:
    onagre_agent_name: "default"
    onagre_agent_binary: "/usr/local/bin/onagent@{{ onagre_agent_name }}"
    onagre_agent_service: "onagent@{{ onagre_agent_name }}"

  tasks:
    - name: Stop and disable Onagre Agent
      ansible.builtin.systemd:
        name: "{{ onagre_agent_service }}"
        state: stopped
        enabled: false
      ignore_errors: true

    - name: Remove service file
      ansible.builtin.file:
        path: "/etc/systemd/system/{{ onagre_agent_service }}.service"
        state: absent
      notify: Reload systemd

    - name: Remove agent binary
      ansible.builtin.file:
        path: "{{ onagre_agent_binary }}"
        state: absent

  handlers:
    - name: Reload systemd
      ansible.builtin.systemd:
        daemon_reload: true

Résumé

Utiliser Ansible pour déployer les agents Onagre offre une approche évolutive, reproductible et auditable, adaptée à la gestion d'agents sur une infrastructure de grande envergure. Le playbook gère la détection d'architecture, le déploiement du binaire, la gestion du service et les mises à jour en une seule exécution.

Pour les déploiements sur un seul serveur, envisagez le script d'installation ou l'installation manuelle.