From 22bb3ccec9f48b5445dd58c9641d1e5de525531c Mon Sep 17 00:00:00 2001 From: Herb Date: Mon, 13 Jul 2026 13:17:14 +0200 Subject: [PATCH] Pull-Mechanik: local.yml, schul-pull.sh, systemd-Units Laptops ziehen sich das Repo selbst (HTTPS via git.lehrstun.de, SSH-Fallback mit Deploy-Key) und fuehren local.yml aus. Timer laeuft bei Boot + alle 30 min. local.yml haelt die Mechanik selbst aktuell. Co-Authored-By: Claude Fable 5 --- files/ansible-pull.service | 8 +++++ files/ansible-pull.timer | 11 +++++++ files/schul-pull.sh | 24 +++++++++++++++ group_vars/all.yml | 9 ++++++ local.yml | 63 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 115 insertions(+) create mode 100644 files/ansible-pull.service create mode 100644 files/ansible-pull.timer create mode 100644 files/schul-pull.sh create mode 100644 group_vars/all.yml create mode 100644 local.yml diff --git a/files/ansible-pull.service b/files/ansible-pull.service new file mode 100644 index 0000000..4245acc --- /dev/null +++ b/files/ansible-pull.service @@ -0,0 +1,8 @@ +[Unit] +Description=Schul-Laptops: Konfiguration per ansible-pull aktualisieren +Wants=network-online.target +After=network-online.target + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/schul-pull.sh diff --git a/files/ansible-pull.timer b/files/ansible-pull.timer new file mode 100644 index 0000000..d56da57 --- /dev/null +++ b/files/ansible-pull.timer @@ -0,0 +1,11 @@ +[Unit] +Description=Schul-Laptops: regelmaessiger ansible-pull (Boot + alle 30 min) + +[Timer] +OnBootSec=2min +OnUnitActiveSec=30min +RandomizedDelaySec=5min +Persistent=true + +[Install] +WantedBy=timers.target diff --git a/files/schul-pull.sh b/files/schul-pull.sh new file mode 100644 index 0000000..3fa2cdd --- /dev/null +++ b/files/schul-pull.sh @@ -0,0 +1,24 @@ +#!/bin/bash +# +# Zieht das schul-laptops-Repo und fuehrt local.yml aus. +# HTTPS zuerst (funktioniert auch im Schulnetz), SSH mit Deploy-Key als Fallback. +# Wird vom systemd-Timer (ansible-pull.timer) als root aufgerufen. +# +set -u + +HTTPS_URL="https://git.lehrstun.de/admin/schul-laptops.git" +SSH_URL="ssh://git@46.225.114.15:2222/admin/schul-laptops.git" +DEPLOY_KEY="/root/.ssh/ansible-pull-deploy" +CHECKOUT="/var/lib/schul-laptops" + +run_pull() { + ansible-pull -U "$1" -d "$CHECKOUT" -c local -i localhost, local.yml +} + +if run_pull "$HTTPS_URL"; then + exit 0 +fi + +echo "HTTPS fehlgeschlagen, versuche SSH-Fallback (Port 2222) ..." >&2 +export GIT_SSH_COMMAND="ssh -i $DEPLOY_KEY -p 2222 -o BatchMode=yes" +run_pull "$SSH_URL" diff --git a/group_vars/all.yml b/group_vars/all.yml new file mode 100644 index 0000000..b8d5049 --- /dev/null +++ b/group_vars/all.yml @@ -0,0 +1,9 @@ +--- +# Software, die auf allen Schul-Laptops installiert sein soll. +# Paket hier ergaenzen + pushen = wird auf allen Laptops installiert. +schul_pakete: + - htop + - git + - curl + - vim + - ansible diff --git a/local.yml b/local.yml new file mode 100644 index 0000000..c68a5d8 --- /dev/null +++ b/local.yml @@ -0,0 +1,63 @@ +--- +# Wird per ansible-pull auf jedem Laptop lokal ausgefuehrt (via schul-pull.sh). +# Aenderungen hier verteilen sich beim naechsten Timer-Lauf auf alle Laptops. +- name: Schul-Laptop konfigurieren + hosts: localhost + connection: local + become: true + + tasks: + - name: APT-Cache aktualisieren + apt: + update_cache: yes + cache_valid_time: 3600 + + - name: System-Updates installieren (safe upgrade) + apt: + upgrade: safe + + - name: Standard-Software installieren + apt: + name: "{{ schul_pakete }}" + state: present + + # --- Selbstverwaltung: haelt die Pull-Mechanik auf allen Laptops aktuell --- + + - name: Pull-Script installieren + copy: + src: files/schul-pull.sh + dest: /usr/local/bin/schul-pull.sh + mode: "0755" + + - name: systemd-Units fuer ansible-pull installieren + copy: + src: "files/{{ item }}" + dest: "/etc/systemd/system/{{ item }}" + mode: "0644" + loop: + - ansible-pull.service + - ansible-pull.timer + register: units + + - name: systemd neu laden, falls Units geaendert + systemd: + daemon_reload: yes + when: units.changed + + - name: ansible-pull.timer aktivieren + systemd: + name: ansible-pull.timer + enabled: yes + state: started + + # --- Status melden --- + + - name: Pruefen ob ein Neustart noetig ist + stat: + path: /var/run/reboot-required + register: reboot_required + + - name: Neustart-Hinweis ins Log schreiben + debug: + msg: "ACHTUNG: Neustart erforderlich (wird nicht automatisch ausgefuehrt)." + when: reboot_required.stat.exists