refactor: brave-fedora/onlyoffice-fedora auf distro-unabhängige Namen umbenennen
Fedora-Installer wurde zurückgestellt (Installationsprobleme), Fokus liegt jetzt auf Mint, später weitere Distros. Beide Rollen sind über Flatpak implementiert und damit schon jetzt distributionsunabhängig - die "-fedora"-Benennung war irreführend. Konvention: kein Suffix = bewusst distro-unabhängig (wie schon guest-session), "-mint"/"-fedora"-Suffix nur für tatsächlich distro-spezifische Logik. roles/brave-fedora -> roles/brave, roles/onlyoffice-fedora -> roles/onlyoffice, Marker-Dateinamen und Task-Namen angepasst, site.yml und README aktualisiert. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
8cd3f13dac
commit
97220bfecc
@ -4,6 +4,8 @@ Ansible-Rollen, die der Tuxflotte Provisioning Agent per `ansible-pull` gegen in
|
|||||||
|
|
||||||
Rollennamen entsprechen 1:1 der Spalte `ansible_role` in der `blueprints`-Tabelle des Provisioning-Servers (siehe `provisioning-server/migrations/0005_seed_workspace_backend_blueprint_data.sql`).
|
Rollennamen entsprechen 1:1 der Spalte `ansible_role` in der `blueprints`-Tabelle des Provisioning-Servers (siehe `provisioning-server/migrations/0005_seed_workspace_backend_blueprint_data.sql`).
|
||||||
|
|
||||||
|
**Namenskonvention:** Der Fedora-Installer wurde zurückgestellt (Installationsprobleme, Pilot-Schulen laufen auf Mint) — aktueller Fokus liegt auf dem Management von Mint-Geräten, später weiteren Distros, ggf. auch wieder Fedora. Rollen ohne Distro-Suffix (z.B. `brave`, `onlyoffice`, `guest-session`) sind bewusst distributionsunabhängig gebaut und laufen auf jedem unterstützten Backend. Ein `-mint`-Suffix kennzeichnet eine Rolle, die tatsächlich Mint/Debian-spezifische Logik braucht (aktuell keine vorhanden). Kein Backend-Name sollte für eine Rolle stehen, die eigentlich generisch funktioniert.
|
||||||
|
|
||||||
`site.yml` bindet jede Rolle unter einem zu ihrem Namen passenden Tag ein. Der Agent ruft sie über:
|
`site.yml` bindet jede Rolle unter einem zu ihrem Namen passenden Tag ein. Der Agent ruft sie über:
|
||||||
|
|
||||||
```
|
```
|
||||||
@ -15,8 +17,8 @@ ansible-pull -U <repo-url> --tags <rolle1>,<rolle2>,... -i localhost, site.yml
|
|||||||
Alle drei Rollen haben echten Inhalt (Stand 2026-08-04) — die Marker-Dateien unter `/run/tuxflotte/agent/applied/<rolle>.marker` bleiben zusätzlich als schneller E2E-Nachweis bestehen, sind aber nicht mehr der eigentliche Effekt der Rollen:
|
Alle drei Rollen haben echten Inhalt (Stand 2026-08-04) — die Marker-Dateien unter `/run/tuxflotte/agent/applied/<rolle>.marker` bleiben zusätzlich als schneller E2E-Nachweis bestehen, sind aber nicht mehr der eigentliche Effekt der Rollen:
|
||||||
|
|
||||||
- **`guest-session`**: echte flüchtige Gastsitzung. Lokaler User `gast`, Login ohne Passwort über die `nopasswdlogin`-Gruppenkonvention, `$HOME` per `pam_namespace`-Polyinstantiation (`/etc/security/namespace.conf`) als tmpfs — wird bei Sitzungsende automatisch verworfen, kein Cleanup-Skript nötig. PAM-Dateilayout unterscheidet sich zwischen RedHat- (`gdm-password`/`postlogin`) und Debian-Familie (`lightdm`/`common-session`) und wird über `ansible_facts['os_family']` erkannt, da derselbe Rollenname für beide Backends (`fedora`, `mint`) verwendet wird.
|
- **`guest-session`**: echte flüchtige Gastsitzung. Lokaler User `gast`, Login ohne Passwort über die `nopasswdlogin`-Gruppenkonvention, `$HOME` per `pam_namespace`-Polyinstantiation (`/etc/security/namespace.conf`) als tmpfs — wird bei Sitzungsende automatisch verworfen, kein Cleanup-Skript nötig. PAM-Dateilayout unterscheidet sich zwischen RedHat- (`gdm-password`/`postlogin`) und Debian-Familie (`lightdm`/`common-session`) und wird über `ansible_facts['os_family']` erkannt, da derselbe Rollenname für beide Backends (`fedora`, `mint`) verwendet wird.
|
||||||
- **`brave-fedora`**: Installation von Brave via Flatpak/Flathub (`community.general.flatpak`). Unterstützt zusätzlich die Auftragskatalog-Option `standardbrowser` (siehe unten).
|
- **`brave`**: Installation von Brave via Flatpak/Flathub (`community.general.flatpak`) — distributionsunabhängig, läuft für beide Backends. Unterstützt zusätzlich die Auftragskatalog-Option `standardbrowser` (siehe unten).
|
||||||
- **`onlyoffice-fedora`**: Installation von OnlyOffice Desktop Editors via Flatpak/Flathub.
|
- **`onlyoffice`**: Installation von OnlyOffice Desktop Editors via Flatpak/Flathub — ebenfalls distributionsunabhängig.
|
||||||
|
|
||||||
**Neue Abhängigkeit:** die `community.general`-Collection (Module `flatpak`, `flatpak_remote`, `ini_file`). Auf der Zielplattform muss sie installiert sein — auf der bisherigen Test-VM (Linux Mint) bereits vorhanden (`ansible-collection-community-general`), auf frisch installierten Fedora-Geräten ggf. per `ansible-galaxy collection install community.general` oder passendes RPM-Paket sicherstellen.
|
**Neue Abhängigkeit:** die `community.general`-Collection (Module `flatpak`, `flatpak_remote`, `ini_file`). Auf der Zielplattform muss sie installiert sein — auf der bisherigen Test-VM (Linux Mint) bereits vorhanden (`ansible-collection-community-general`), auf frisch installierten Fedora-Geräten ggf. per `ansible-galaxy collection install community.general` oder passendes RPM-Paket sicherstellen.
|
||||||
|
|
||||||
@ -46,10 +48,11 @@ Rollen, die nie katalogfähig werden (rein workspace-komponierte Merkmale), brau
|
|||||||
|
|
||||||
Über die reine present/absent-Zuweisung hinaus kann eine Auftragskatalog-Zuweisung zusätzliche, rollenspezifische Optionen tragen (`device_merkmale.optionen`, JSONB) — z.B. `{"standardbrowser": true}` bei `browser-brave`. Der Server kennt die Bedeutung dieser Optionen nicht, reicht sie nur unverändert durch (Check-in-Antwort `auftraege[].optionen`).
|
Über die reine present/absent-Zuweisung hinaus kann eine Auftragskatalog-Zuweisung zusätzliche, rollenspezifische Optionen tragen (`device_merkmale.optionen`, JSONB) — z.B. `{"standardbrowser": true}` bei `browser-brave`. Der Server kennt die Bedeutung dieser Optionen nicht, reicht sie nur unverändert durch (Check-in-Antwort `auftraege[].optionen`).
|
||||||
|
|
||||||
Der Agent baut daraus `tuxflotte_auftrag_optionen` (Rollenname → optionen-Dict) als zweites `--extra-vars`-Feld neben `tuxflotte_auftrag_states`. `site.yml` reicht es pro Rolle als `tuxflotte_optionen` durch (Default `{}`, falls die Rolle nicht in der Map auftaucht). Nur Rollen, die tatsächlich Optionen brauchen, lesen die Variable (aktuell nur `brave-fedora`) — für alle anderen ist sie ungenutzt.
|
Der Agent baut daraus `tuxflotte_auftrag_optionen` (Rollenname → optionen-Dict) als zweites `--extra-vars`-Feld neben `tuxflotte_auftrag_states`. `site.yml` reicht es pro Rolle als `tuxflotte_optionen` durch (Default `{}`, falls die Rolle nicht in der Map auftaucht). Nur Rollen, die tatsächlich Optionen brauchen, lesen die Variable (aktuell nur `brave`) — für alle anderen ist sie ungenutzt.
|
||||||
|
|
||||||
## Neue Rolle hinzufügen
|
## Neue Rolle hinzufügen
|
||||||
|
|
||||||
|
0. Namenskonvention beachten: distributionsunabhängig gebaut → kein Suffix (`<name>`), tatsächlich distro-spezifische Logik → Suffix (`<name>-mint`, ggf. später `<name>-fedora`). Im Zweifel distributionsunabhängig bauen (siehe `guest-session`s `os_family`-Erkennung als Vorbild) statt vorschnell zu suffixen.
|
||||||
1. `roles/<name>/tasks/main.yml` anlegen
|
1. `roles/<name>/tasks/main.yml` anlegen
|
||||||
2. `roles/<name>/defaults/main.yml` mit `tuxflotte_state: present` anlegen
|
2. `roles/<name>/defaults/main.yml` mit `tuxflotte_state: present` anlegen
|
||||||
3. Eintrag in `site.yml` mit `tags: <name>` und `vars: tuxflotte_state: "{{ tuxflotte_auftrag_states.get('<name>', 'present') }}"` ergänzen
|
3. Eintrag in `site.yml` mit `tags: <name>` und `vars: tuxflotte_state: "{{ tuxflotte_auftrag_states.get('<name>', 'present') }}"` ergänzen
|
||||||
|
|||||||
@ -66,9 +66,9 @@
|
|||||||
(tuxflotte_state == "absent" or not (tuxflotte_optionen.standardbrowser | default(false)))
|
(tuxflotte_state == "absent" or not (tuxflotte_optionen.standardbrowser | default(false)))
|
||||||
and tuxflotte_brave_is_default.rc is defined and tuxflotte_brave_is_default.rc == 0
|
and tuxflotte_brave_is_default.rc is defined and tuxflotte_brave_is_default.rc == 0
|
||||||
|
|
||||||
- name: Record that the brave-fedora role ran
|
- name: Record that the brave role ran
|
||||||
ansible.builtin.copy:
|
ansible.builtin.copy:
|
||||||
dest: /run/tuxflotte/agent/applied/brave-fedora.marker
|
dest: /run/tuxflotte/agent/applied/brave.marker
|
||||||
content: "{{ ansible_date_time.iso8601 }}\n"
|
content: "{{ ansible_date_time.iso8601 }}\n"
|
||||||
mode: "0644"
|
mode: "0644"
|
||||||
when: tuxflotte_state == "present"
|
when: tuxflotte_state == "present"
|
||||||
@ -80,8 +80,8 @@
|
|||||||
method: system
|
method: system
|
||||||
when: tuxflotte_state == "absent"
|
when: tuxflotte_state == "absent"
|
||||||
|
|
||||||
- name: Remove brave-fedora marker (Auftrag abgewählt)
|
- name: Remove brave marker (Auftrag abgewählt)
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: /run/tuxflotte/agent/applied/brave-fedora.marker
|
path: /run/tuxflotte/agent/applied/brave.marker
|
||||||
state: absent
|
state: absent
|
||||||
when: tuxflotte_state == "absent"
|
when: tuxflotte_state == "absent"
|
||||||
@ -20,9 +20,9 @@
|
|||||||
method: system
|
method: system
|
||||||
when: tuxflotte_state == "present"
|
when: tuxflotte_state == "present"
|
||||||
|
|
||||||
- name: Record that the onlyoffice-fedora role ran
|
- name: Record that the onlyoffice role ran
|
||||||
ansible.builtin.copy:
|
ansible.builtin.copy:
|
||||||
dest: /run/tuxflotte/agent/applied/onlyoffice-fedora.marker
|
dest: /run/tuxflotte/agent/applied/onlyoffice.marker
|
||||||
content: "{{ ansible_date_time.iso8601 }}\n"
|
content: "{{ ansible_date_time.iso8601 }}\n"
|
||||||
mode: "0644"
|
mode: "0644"
|
||||||
when: tuxflotte_state == "present"
|
when: tuxflotte_state == "present"
|
||||||
@ -34,8 +34,8 @@
|
|||||||
method: system
|
method: system
|
||||||
when: tuxflotte_state == "absent"
|
when: tuxflotte_state == "absent"
|
||||||
|
|
||||||
- name: Remove onlyoffice-fedora marker (Auftrag abgewählt)
|
- name: Remove onlyoffice marker (Auftrag abgewählt)
|
||||||
ansible.builtin.file:
|
ansible.builtin.file:
|
||||||
path: /run/tuxflotte/agent/applied/onlyoffice-fedora.marker
|
path: /run/tuxflotte/agent/applied/onlyoffice.marker
|
||||||
state: absent
|
state: absent
|
||||||
when: tuxflotte_state == "absent"
|
when: tuxflotte_state == "absent"
|
||||||
24
site.yml
24
site.yml
@ -8,8 +8,8 @@
|
|||||||
# bleiben beim Default "present" - unverändert additives Verhalten.
|
# bleiben beim Default "present" - unverändert additives Verhalten.
|
||||||
tuxflotte_auftrag_states: {}
|
tuxflotte_auftrag_states: {}
|
||||||
# Rollenname -> optionen-Dict aus der Auswahl-API (device_merkmale.optionen),
|
# Rollenname -> optionen-Dict aus der Auswahl-API (device_merkmale.optionen),
|
||||||
# z.B. {"standardbrowser": true} bei brave-fedora. Rein additiv, opak für
|
# z.B. {"standardbrowser": true} bei brave. Rein additiv, opak für den
|
||||||
# den Server/Agenten - nur die jeweilige Rolle kennt die Bedeutung.
|
# Server/Agenten - nur die jeweilige Rolle kennt die Bedeutung.
|
||||||
tuxflotte_auftrag_optionen: {}
|
tuxflotte_auftrag_optionen: {}
|
||||||
tasks:
|
tasks:
|
||||||
- include_role:
|
- include_role:
|
||||||
@ -22,19 +22,19 @@
|
|||||||
tags: guest-session
|
tags: guest-session
|
||||||
|
|
||||||
- include_role:
|
- include_role:
|
||||||
name: brave-fedora
|
name: brave
|
||||||
apply:
|
apply:
|
||||||
tags: brave-fedora
|
tags: brave
|
||||||
vars:
|
vars:
|
||||||
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('brave-fedora', 'present') }}"
|
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('brave', 'present') }}"
|
||||||
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('brave-fedora', {}) }}"
|
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('brave', {}) }}"
|
||||||
tags: brave-fedora
|
tags: brave
|
||||||
|
|
||||||
- include_role:
|
- include_role:
|
||||||
name: onlyoffice-fedora
|
name: onlyoffice
|
||||||
apply:
|
apply:
|
||||||
tags: onlyoffice-fedora
|
tags: onlyoffice
|
||||||
vars:
|
vars:
|
||||||
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('onlyoffice-fedora', 'present') }}"
|
tuxflotte_state: "{{ tuxflotte_auftrag_states.get('onlyoffice', 'present') }}"
|
||||||
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('onlyoffice-fedora', {}) }}"
|
tuxflotte_optionen: "{{ tuxflotte_auftrag_optionen.get('onlyoffice', {}) }}"
|
||||||
tags: onlyoffice-fedora
|
tags: onlyoffice
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user