diff --git a/host_vars/artemis.ai.home.yml b/host_vars/artemis.ai.home.yml new file mode 100644 index 0000000..a20d6eb --- /dev/null +++ b/host_vars/artemis.ai.home.yml @@ -0,0 +1,31 @@ +--- +# Artemis (AI Foreman) — Control node, no NVIDIA GPU +node_type: foreman +has_gpu: false + +# Artemis-specific packages (monitoring and control) +extra_packages: + - nvtop # GPU monitoring (uses AMD iGPU info if available) + - nethogs # Per-process network monitoring + - iotop # Per-process I/O monitoring + - lm-sensors # Temperature/fan monitoring + - stress-ng # Load testing + - cockpit # Web-based system management + +# Services to manage (not auto-started, just ensure packages installed) +managed_services: + - name: hermes-gateway + enabled: true + - name: hermes-dashboard + enabled: true + +# Ollama models for Artemis (CPU inference, small models only) +ollama_models: + - gemma3:4b # Small enough for CPU + - phi4-mini:latest # Tiny, fast + +# Hermes configuration +hermes_config: + provider: openrouter + model: openai/gpt-4o-mini + context_length: 128000 diff --git a/host_vars/bones.yml b/host_vars/bones.yml new file mode 100644 index 0000000..d7eefbd --- /dev/null +++ b/host_vars/bones.yml @@ -0,0 +1,27 @@ +--- +# Bones (Mark XLI) — Headless CPU-only node +node_type: headless +has_gpu: false + +# Headless essentials +extra_packages: + - cpufrequtils # CPU frequency management + - lm-sensors # Temperature monitoring + - smartmontools # Disk health monitoring + - hdparm # Disk performance tuning + - netdata # lightweight monitoring (optional) + +# Services managed on Bones +managed_services: + - name: jarvis # Paperclip + Ollama + PostgreSQL stack + enabled: true + - name: ollama # CPU inference only + enabled: true + +# Ollama config (CPU mode, very small models) +ollama_models: + - gemma3:1b # Ultra-tiny for CPU + +# Node-specific vars +bones_storage: "256GB SSD" +jvm_heap: "512m" diff --git a/host_vars/hulkbuster.ai.home.yml b/host_vars/hulkbuster.ai.home.yml new file mode 100644 index 0000000..6db9b4d --- /dev/null +++ b/host_vars/hulkbuster.ai.home.yml @@ -0,0 +1,35 @@ +--- +# Mark44 (Hulkbuster) — Heavy GPU compute node +node_type: gpu_heavy +has_gpu: true +gpu_type: nvidia +gpu_model: "RTX 4070" +vram_mb: 12282 + +# GPU-specific packages +extra_packages: + - nvidia-driver # NVIDIA driver (if not already installed via proprietary) + - cuda-toolkit # CUDA toolkit for ML workloads + - nvtop # GPU monitoring (better than nvidia-smi for live view) + - nethogs # Network per-process monitoring + - iotop # I/O per-process monitoring + +# Ollama models — largest VRAM headroom, can run big models +ollama_models: + - gemma4:e4b # Already pulled — keep it + - qwen2.5-coder:14b # Primary coding model + - qwen2.5:14b # General purpose large model + - mistral:7b # Fallback fast model + +# Services +managed_services: + - name: ollama + enabled: true + - name: open-webui + enabled: true + - name: hermes-gateway + enabled: true + +# Ollama port override (standard) +ollama_port: 11434 +open_webui_port: 8080 diff --git a/host_vars/mark44.yml b/host_vars/mark44.yml new file mode 100644 index 0000000..6db9b4d --- /dev/null +++ b/host_vars/mark44.yml @@ -0,0 +1,35 @@ +--- +# Mark44 (Hulkbuster) — Heavy GPU compute node +node_type: gpu_heavy +has_gpu: true +gpu_type: nvidia +gpu_model: "RTX 4070" +vram_mb: 12282 + +# GPU-specific packages +extra_packages: + - nvidia-driver # NVIDIA driver (if not already installed via proprietary) + - cuda-toolkit # CUDA toolkit for ML workloads + - nvtop # GPU monitoring (better than nvidia-smi for live view) + - nethogs # Network per-process monitoring + - iotop # I/O per-process monitoring + +# Ollama models — largest VRAM headroom, can run big models +ollama_models: + - gemma4:e4b # Already pulled — keep it + - qwen2.5-coder:14b # Primary coding model + - qwen2.5:14b # General purpose large model + - mistral:7b # Fallback fast model + +# Services +managed_services: + - name: ollama + enabled: true + - name: open-webui + enabled: true + - name: hermes-gateway + enabled: true + +# Ollama port override (standard) +ollama_port: 11434 +open_webui_port: 8080 diff --git a/host_vars/mark5.ai.home.yml b/host_vars/mark5.ai.home.yml new file mode 100644 index 0000000..1d4df70 --- /dev/null +++ b/host_vars/mark5.ai.home.yml @@ -0,0 +1,30 @@ +--- +# Mark5 (Suitcase) — Mobile/light GPU node +node_type: gpu_light +has_gpu: true +gpu_type: nvidia +gpu_model: "RTX 4060 Laptop" +vram_mb: 8188 + +# Laptop-specific packages +extra_packages: + - nvtop # GPU monitoring + - powertop # Power management analysis + - tlp # Laptop power management + - htop # Already baseline, ensure present + +# Ollama models — limited VRAM, smaller models only +ollama_models: + - qwen2.5-coder:7b # Small coding model + - gemma3:4b # Tiny, fast + - llama3.1:8b # Balanced + +# Services +managed_services: + - name: ollama + enabled: true + - name: hermes-gateway + enabled: true + +# Ollama port +ollama_port: 11434 diff --git a/local.yml b/local.yml index 8109894..4ceb712 100644 --- a/local.yml +++ b/local.yml @@ -5,8 +5,9 @@ tasks: - name: Print start message debug: - msg: "Ansible Pull baseline running on {{ ansible_hostname }} ({{ inventory_hostname }})" + msg: "Ansible Pull running on {{ ansible_hostname }} ({{ inventory_hostname }}) — role: {{ node_type | default('unspecified') }}" + # --- ALL NODES: baseline --- - name: Ensure apt packages are updated apt: update_cache: yes @@ -23,49 +24,64 @@ - tmux - jq - vim + - python3-pip state: present when: ansible_os_family == "Debian" tags: [baseline] - # --- Artemis-specific placeholder --- - - name: Ensure Artemis monitoring packages + # --- NODE-SPECIFIC: extra packages --- + - name: Ensure node-specific extra packages installed + apt: + name: "{{ extra_packages }}" + state: present + when: + - ansible_os_family == "Debian" + - extra_packages is defined + - extra_packages | length > 0 + tags: [node_specific] + + # --- NODE-SPECIFIC: Ollama model management --- + - name: Ensure Ollama is installed + command: which ollama + register: ollama_check + ignore_errors: true + changed_when: false + tags: [ollama] + + - name: Pull node-specific Ollama models + command: "ollama pull {{ item }}" + loop: "{{ ollama_models }}" + when: + - ollama_check.rc == 0 + - ollama_models is defined + - ollama_models | length > 0 + register: ollama_pull_result + tags: [ollama] + + # --- NODE-SPECIFIC: Service management (placeholder) --- + - name: Ensure managed services are enabled + systemd: + name: "{{ item.name }}" + enabled: "{{ item.enabled | default(true) }}" + loop: "{{ managed_services }}" + when: + - managed_services is defined + - managed_services | length > 0 + ignore_errors: true + tags: [services] + + # --- Artemis-specific: monitoring dashboard --- + - name: Ensure Artemis cockpit available apt: name: - - nethogs - - iotop + - cockpit + - cockpit-pcp state: present - when: inventory_hostname == "Artemis" + when: + - inventory_hostname == "artemis.ai.home" + - ansible_os_family == "Debian" tags: [artemis] - # --- Mark44 GPU node placeholder --- - - name: Ensure GPU node tools - package: - name: - - nvidia-smi - state: present - when: inventory_hostname == "mk44" - ignore_errors: true - tags: [gpu] - - # --- Mark5 laptop node placeholder --- - - name: Ensure laptop power management (example) - package: - name: - - powertop - state: present - when: inventory_hostname == "mk5" - ignore_errors: true - tags: [laptop] - - # --- Bones headless placeholder --- - - name: Ensure headless essentials - apt: - name: - - cpufrequtils - state: present - when: inventory_hostname == "bones" - tags: [bones] - - name: Print completion message debug: - msg: "Baseline complete on {{ ansible_hostname }}" + msg: "Baseline complete on {{ ansible_hostname }} — node_type={{ node_type | default('unspecified') }}, gpu={{ has_gpu | default(false) }}"