provisioning-agent

Der Tuxflotte Provisioning Agent läuft auf installierten Geräten, meldet sich in regelmäßigen Abständen bei anode und wendet die ihm zugewiesenen Ansible-Rollen an (siehe ansible-content/). Den Rollen-Stand holt er seit ADR-0046 als Archiv von anode (ansible_stand im Check-in, Abruf nur mit Agent-Secret, Prüfsumme, dann ansible-playbook im entpackten Stand unter /var/lib/tuxflotte/ansible/<commit>/); fehlt der Stand oder scheitert dieser Weg, bleibt ansible-pull mit ansible_repo als Rückfall. Der genutzte Weg geht als ansible_weg (archiv/git/git-rueckfall) mit jedem Check-in an den Server.

Stand: Kernschleife (Check-in → ansible-pull) sowie Auftragskatalog (present/absent, Ergebnis-Report) laufen. Die Einrichtung vor dem ersten Reboot ist über backend_postinstall() im Fedora-Backend angebunden (tuxflotte-installer/backends/fedora/kickstart.tpl), ruft dabei denselben POST /api/v1/agent/bootstrap-Endpoint auf, der hier für die manuelle Testgerät-Einrichtung beschrieben ist.

Auftragskatalog (ADR-0010)

Neben den additiv über den Workspace zugewiesenen Blueprints liefert der Check-in zusätzlich auftraege: den vollständigen present/absent-Zustand aller katalogfähigen Merkmale für das Gerät. Der Agent führt beide Listen in einem gemeinsamen Lauf aus (--tags = Vereinigung aller Rollennamen, --extra-vars reicht tuxflotte_auftrag_states als Rolle→Zustand-Dict durch, siehe ansible-content/README.md) und meldet danach das Ergebnis je Auftragskatalog-Eintrag per POST /api/v1/agent/report zurück (applied/apply_failed/removed/remove_failed). Das Ergebnis ist grob granular — ein Lauf hat einen einzigen Exit-Code für alle enthaltenen Rollen, es gibt noch keine Rolle-für-Rolle-Auswertung.

Manuelle Installation (Testgerät)

Voraussetzung: ansible-core ist installiert (ansible-playbook und ansible-pull im PATH).

  1. Gerät aktivieren und Bereitstellungsvorlage zuweisen (bestehender Provisioning-Flow, siehe provisioning-server)

  2. Agent-Secret erzeugen:

    curl -X POST https://anode.tuxflotte.de/api/v1/agent/bootstrap \
         -H "Content-Type: application/json" \
         -d '{"device_id": "<device-uuid>"}'
    
  3. Credentials ablegen:

    install -d -m 0700 /etc/tuxflotte
    cat > /etc/tuxflotte/agent.credentials <<EOF
    {"device_id": "<device-uuid>", "agent_secret": "<agent-secret aus Schritt 2>"}
    EOF
    chmod 0600 /etc/tuxflotte/agent.credentials
    
  4. Agent-Code ablegen und Dienst einrichten:

    install -d /opt/tuxflotte/agent
    cp agent.py /opt/tuxflotte/agent/
    cp tuxflotte-agent.service /etc/systemd/system/
    systemctl daemon-reload
    systemctl enable --now tuxflotte-agent
    
  5. Prüfen:

    journalctl -u tuxflotte-agent -f
    ls /run/tuxflotte/agent/applied/
    

Konfiguration

Umgebungsvariable Zweck Default
TUXFLOTTE_ANODE_URL Basis-URL des Provisioning-Servers https://anode.tuxflotte.de
TUXFLOTTE_AGENT_CREDENTIALS Pfad zur Credentials-Datei /etc/tuxflotte/agent.credentials

Lizenz

Copyright (C) 2026 Thomas Stallinger

Dieses Programm ist freie Software: Du kannst es unter den Bedingungen der GNU General Public License, Version 3, weitergeben und/oder verändern, wie von der Free Software Foundation veröffentlicht. Es wird ohne jede Gewähr bereitgestellt. Den vollständigen Text enthält die Datei LICENSE (SPDX: GPL-3.0-only).

S
Description
No description provided
Readme GPL-3.0
185 KiB
0 Stars 1 Watchers 0 Forks
Languages
Python 87.8%
Shell 12.2%