added ollama role and host

This commit is contained in:
2026-08-05 11:21:54 +02:00
parent 25593dafa0
commit 6a3a1020db
12 changed files with 171 additions and 0 deletions

View File

4
hosts
View File

@@ -51,6 +51,7 @@ jitsimeet
mailserver mailserver
mastodon mastodon
nameserver nameserver
ollama
printspooler printspooler
proxmoxserver proxmoxserver
proxyserver proxyserver
@@ -135,6 +136,9 @@ ns1.universe.local
unbound01.universe.local unbound01.universe.local
unbound02.universe.local unbound02.universe.local
[ollama]
ollama.universe.local
[omada_controller] [omada_controller]
omada.universe.local omada.universe.local
omada-stdby.universe.local omada-stdby.universe.local

View File

@@ -204,6 +204,14 @@
roles: roles:
- omada-controller - omada-controller
- hosts: ollama
tags: server,ollama
become: true
handlers:
- ansible.builtin.import_tasks: global_handlers/global_handlers.yml
roles:
- ollama
- hosts: backup - hosts: backup
tags: server,backup tags: server,backup
become: true become: true

59
roles/ollama/README.md Normal file
View File

@@ -0,0 +1,59 @@
# Ansible Role: ollama
Diese Rolle richtet einen Debian-Host vollständig als Ollama-Server ein.
Sie installiert Ollama über das offizielle Installationsskript, aktiviert den systemd-Dienst `ollama` und erzeugt einen systemd-Override, damit der Server auf allen Interfaces lauscht (`OLLAMA_HOST=0.0.0.0:11434`). Anschließend werden die über die Variable `ollama_models` definierten Modelle automatisch heruntergeladen jeweils nur, wenn sie noch nicht vorhanden sind.
Eine Firewall-Konfiguration wird bewusst nicht vorgenommen.
## Anforderungen
Diese Rolle wurde für Debian-basierte Systeme entwickelt und getestet (Debian, Ubuntu insbesondere LXC-Container).
Das offizielle Installationsskript lädt die neueste Ollama-Version von `https://ollama.com/install.sh` und benötigt dafür `curl`. Dieses wird vom Skript bei Bedarf selbst mit installiert.
## Rollenvariablen
Die folgenden Variablen können angepasst werden, um das Verhalten der Rolle zu steuern. Die Standardwerte sind in `defaults/main.yml` definiert.
| Variable | Standardwert | Beschreibung |
|---|---|---|
| `ollama_host` | `"0.0.0.0:11434"` | Host/Port, auf dem der Ollama-Server lauschen soll. `0.0.0.0` bedeutet alle Interfaces. |
| `ollama_install_script_url` | `"https://ollama.com/install.sh"` | URL des offiziellen Ollama-Installationsskripts. |
| `ollama_models` | `["qwen3:8b"]` | Liste der Modelle, die automatisch heruntergeladen werden. |
## Abhängigkeiten
Diese Rolle hat keine Abhängigkeiten von anderen Ansible-Rollen.
## Beispiel-Playbook
So können Sie die Rolle in Ihr Playbook integrieren:
```yaml
- hosts: ollama
become: true
roles:
- ollama
```
Um weitere Modelle herunterzuladen, überschreiben Sie die Variable im Playbook oder in den `host_vars`:
```yaml
- hosts: ollama
become: true
vars:
ollama_models:
- qwen3:8b
- llama3.1:8b
roles:
- ollama
```
## Lizenz
MIT
## Autor
Ihr Name

View File

@@ -0,0 +1,13 @@
---
# defaults file for roles/ollama
# Host/Port, auf dem der Ollama-Server lauschen soll.
# 0.0.0.0:11434 => alle Interfaces.
ollama_host: "0.0.0.0:11434"
# URL des offiziellen Ollama-Installationsskripts.
ollama_install_script_url: "https://ollama.com/install.sh"
# Liste der Modelle, die automatisch heruntergeladen werden.
ollama_models:
- qwen3:8b

View File

@@ -0,0 +1,8 @@
---
# handlers file for roles/ollama
- name: Reload systemd and restart Ollama
ansible.builtin.systemd:
name: ollama
state: restarted
daemon_reload: yes

View File

@@ -0,0 +1,20 @@
---
# tasks file for roles/ollama
# systemd-Override, damit Ollama auf allen Interfaces lauscht (OLLAMA_HOST).
- name: ollama | configure | create systemd override directory
tags: ollama,configure
ansible.builtin.file:
path: /etc/systemd/system/ollama.service.d
state: directory
mode: '0755'
- name: ollama | configure | set OLLAMA_HOST via systemd override
tags: ollama,configure
ansible.builtin.template:
src: ollama-override.conf.j2
dest: /etc/systemd/system/ollama.service.d/override.conf
mode: '0644'
# Der Handler lädt systemd neu und startet den Dienst nur bei Änderungen neu.
notify: Reload systemd and restart Ollama
# Hinweis: Eine Firewall-Konfiguration (z.B. ufw) wird bewusst NICHT vorgenommen.

View File

@@ -0,0 +1,17 @@
---
# tasks file for roles/ollama
# Installation von Ollama über das offizielle Installationsskript.
- name: ollama | install | download official install script
tags: ollama,install
ansible.builtin.get_url:
url: "{{ ollama_install_script_url }}"
dest: "/tmp/ollama-install.sh"
mode: "0755"
- name: ollama | install | run official install script
tags: ollama,install
# Das Skript installiert das Binary nach /usr/local/bin/ollama.
# 'creates' sorgt für Idempotenz: Bei vorhandenem Binary wird die Ausführung übersprungen.
ansible.builtin.shell:
cmd: "/tmp/ollama-install.sh"
creates: /usr/local/bin/ollama

View File

@@ -0,0 +1,12 @@
---
# Load distro specific variables
- ansible.builtin.include_vars: "{{ ansible_facts['distribution'] | lower }}.yml"
tags: always
ignore_errors: True
- ansible.builtin.include_vars: "{{ ansible_facts['fqdn'] | lower }}.yml"
ignore_errors: True
- ansible.builtin.import_tasks: install.yml
- ansible.builtin.import_tasks: configure.yml
- ansible.builtin.import_tasks: service.yml
- ansible.builtin.import_tasks: models.yml

View File

@@ -0,0 +1,20 @@
---
# tasks file for roles/ollama
# Modellverwaltung: Es werden nur Modelle heruntergeladen, die noch nicht vorhanden sind.
- name: ollama | models | list installed models
tags: ollama,models
ansible.builtin.command: ollama list
register: ollama_installed_models
changed_when: false
# Kurzes Warten auf den frisch gestarteten Daemon beim Erstlauf (Retry-Muster wie omada-controller).
retries: 5
until: ollama_installed_models is success
delay: 2
- name: ollama | models | pull missing models
tags: ollama,models
ansible.builtin.command: ollama pull {{ item }}
loop: "{{ ollama_models }}"
# 'ollama list' führt die Modellnamen in der ersten Spalte auf; ein bereits
# vorhandenes Modell wird nicht erneut heruntergeladen.
when: item not in ollama_installed_models.stdout

View File

@@ -0,0 +1,8 @@
---
# tasks file for roles/ollama
- name: ollama | service | enable and start Ollama
tags: ollama,service
ansible.builtin.service:
name: ollama
state: started
enabled: true

View File

@@ -0,0 +1,2 @@
[Service]
Environment="OLLAMA_HOST={{ ollama_host }}"