Installer avec Ansible
Pour déployer des agents sur de nombreux hôtes Linux, ce playbook installe exactement ce qu'installe l'installateur automatique : le binaire vérifié d'une version donnée, l'utilisateur non privilégié onagent, le jeton dans un fichier réservé à root, le service durci onagent.service.
Avant de commencer#
- Ansible sur votre nœud de contrôle ; des hôtes cibles avec systemd 235+, sur x86_64 ou aarch64 (glibc), joignables en SSH avec
become. - Un agent par hôte, chacun avec son propre jeton : créez-les d'abord dans Configuration → Agents. Un jeton ne peut être utilisé que par un seul agent en cours d'exécution.
Inventaire et jetons#
Donnez à chaque hôte son propre jeton, chiffré avec ansible-vault :
[onagre_agents]
par1-prod-dc ansible_host=10.20.0.5
lyon-dc-agent ansible_host=10.40.0.5ansible-vault encrypt_string '<TOKEN_OF_par1-prod-dc>' --name onagre_token >> inventory/host_vars/par1-prod-dc.yml
ansible-vault encrypt_string '<TOKEN_OF_lyon-dc-agent>' --name onagre_token >> inventory/host_vars/lyon-dc-agent.ymlPlaybook#
Fixez la version à déployer (onagre_version) : lisez la version courante avec curl -fsSL https://d.onag.re/version.
- name: Deploy the Onagre agent
hosts: onagre_agents
become: true
vars:
onagre_version: "2.9.0.0"
onagre_arch: "{{ {'x86_64': 'linux-x64', 'aarch64': 'linux-arm64'}[ansible_architecture] }}"
onagre_url: "https://d.onag.re/agent/{{ onagre_version }}/agent-{{ onagre_arch }}"
tasks:
- name: Create the onagent system user
ansible.builtin.user:
name: onagent
system: true
create_home: false
home: /nonexistent
shell: /usr/sbin/nologin
- name: Create the token directory (root only)
ansible.builtin.file:
path: /etc/onagent
state: directory
owner: root
group: root
mode: "0700"
- name: Download the agent, checked against its SHA-256
ansible.builtin.get_url:
url: "{{ onagre_url }}"
checksum: "sha256:{{ onagre_url }}.sha256"
dest: /usr/local/bin/onagent
owner: root
group: root
mode: "0755"
notify: Restart the agent
- name: Store the token (root only)
ansible.builtin.copy:
dest: /etc/onagent/onagent.env
content: "TOKEN={{ onagre_token }}\n"
owner: root
group: root
mode: "0600"
no_log: true
notify: Restart the agent
- name: Create the service
ansible.builtin.copy:
dest: /etc/systemd/system/onagent.service
mode: "0644"
content: |
[Unit]
Description=Onagre Agent
Documentation=https://docs.onagre.io/en/agents/deployment
Wants=network-online.target
After=network-online.target
[Service]
Type=exec
User=onagent
Group=onagent
EnvironmentFile=/etc/onagent/onagent.env
Environment=DOTNET_BUNDLE_EXTRACT_BASE_DIR=/var/cache/onagent
ExecStart=/usr/local/bin/onagent
WorkingDirectory=/
Restart=always
RestartSec=10
RestartPreventExitStatus=78
LimitNOFILE=65535
CacheDirectory=onagent
UMask=0077
StandardOutput=journal
StandardError=journal
SyslogIdentifier=onagent
AmbientCapabilities=CAP_NET_RAW
CapabilityBoundingSet=CAP_NET_RAW
NoNewPrivileges=yes
ProtectSystem=strict
ProtectHome=read-only
PrivateDevices=yes
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectKernelLogs=yes
ProtectControlGroups=yes
ProtectClock=yes
ProtectHostname=yes
RestrictSUIDSGID=yes
RestrictRealtime=yes
RestrictNamespaces=yes
LockPersonality=yes
SystemCallArchitectures=native
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX AF_NETLINK
[Install]
WantedBy=multi-user.target
notify: Restart the agent
- name: Enable and start the agent
ansible.builtin.systemd:
name: onagent
enabled: true
state: started
daemon_reload: true
- name: Restart now if something changed
ansible.builtin.meta: flush_handlers
- name: Wait until the agent is connected
ansible.builtin.uri:
url: http://127.0.0.1:27520/ready
return_content: true
register: onagre_ready
until: onagre_ready.status == 200 and onagre_ready.json.status == "Ready"
retries: 30
delay: 3
handlers:
- name: Restart the agent
ansible.builtin.systemd:
name: onagent
state: restarted
daemon_reload: trueLes hôtes d'une autre architecture échouent sur onagre_arch : seuls x86_64 et aarch64 sont publiés.
L'exécuter#
ansible-playbook -i inventory/hosts.ini playbooks/onagre-agent.yml --ask-vault-passPour mettre à jour les agents, changez onagre_version et relancez-le : chaque hôte télécharge et vérifie cette version, redémarre, et la dernière tâche attend qu'il soit de nouveau connecté — voir Endpoints de santé. Après un Revoke and regenerate dans Onagre, mettez à jour le onagre_token chiffré de l'hôte et relancez-le.
Pour ajouter des réglages (PORT, HTTP_API_BIND…), ajoutez des lignes au contenu du fichier de jeton — voir Configuration de l'agent. Les logs sont dans le journal de chaque hôte : journalctl -u onagent.
Désinstaller#
- name: Remove the Onagre agent
hosts: onagre_agents
become: true
tasks:
- name: Stop and disable the agent
ansible.builtin.systemd:
name: onagent
state: stopped
enabled: false
failed_when: false
- name: Remove its files
ansible.builtin.file:
path: "{{ item }}"
state: absent
loop:
- /etc/systemd/system/onagent.service
- /usr/local/bin/onagent
- /usr/local/lib/onagent
- /var/cache/onagent
- /etc/onagent
- name: Remove the onagent user
ansible.builtin.user:
name: onagent
state: absent
- name: Reload systemd
ansible.builtin.systemd:
daemon_reload: trueSupprimez ensuite les agents dans Onagre.