#jinja2: trim_blocks: True, lstrip_blocks: True # {{ ansible_managed }} # Рендерится playbooks/dashboard.yml ИЗ реестра homelab_services. НЕ править # на хосте: меняй сервисы в ansible/inventory/group_vars/all/services.yml, # затем `make dashboard`. # # Правило ссылки на сервис: # * есть proxy.domain -> https:// (+ siteMonitor) # * иначе первый веб-порт -> http(s)://: (+ siteMonitor для http) # приоритет имён портов: http > ui > setup > uptime-kuma > grafana > # controller > pbs-api # * ни того, ни другого -> группа Headless, только ICMP ping по ip {% set port_priority = ['http', 'ui', 'setup', 'uptime-kuma', 'grafana', 'controller', 'pbs-api'] %} {% if homelab_dashboard_proxmox_url | default('') | length > 0 %} - Infrastructure: - Proxmox кластер: description: cloud-pc + mini-pc widget: type: proxmox url: {{ homelab_dashboard_proxmox_url }} username: "{{ '{{HOMEPAGE_VAR_PROXMOX_USER}}' }}" password: "{{ '{{HOMEPAGE_VAR_PROXMOX_TOKEN}}' }}" {% endif %} {% for node in dashboard_nodes %} - {{ node }}: {% for name, svc in homelab_services | dictsort %} {% if svc.node == node %} {% set proxy = svc.proxy | default({}) %} {% set ns = namespace(scheme='', port=0) %} {% for pref in port_priority %} {% for p in svc.ports | default([]) %} {% if ns.port == 0 and p.name == pref %} {% set ns.port = p.port %} {% set ns.scheme = 'https' if pref == 'pbs-api' else 'http' %} {% endif %} {% endfor %} {% endfor %} {% if proxy.domain is defined %} - {{ name }}: href: https://{{ proxy.domain }} description: {{ svc.role }} siteMonitor: https://{{ proxy.domain }} {% elif ns.port > 0 %} - {{ name }}: href: {{ ns.scheme }}://{{ svc.ip }}:{{ ns.port }} description: {{ svc.role }} {% if ns.scheme == 'http' %} siteMonitor: http://{{ svc.ip }}:{{ ns.port }} {% endif %} {% endif %} {% endif %} {% endfor %} {% endfor %} - Headless: {% for name, svc in homelab_services | dictsort %} {% set proxy = svc.proxy | default({}) %} {% set ns = namespace(web=false) %} {% for pref in port_priority %} {% for p in svc.ports | default([]) %} {% if p.name == pref %} {% set ns.web = true %} {% endif %} {% endfor %} {% endfor %} {% if proxy.domain is not defined and not ns.web %} - {{ name }}: description: {{ svc.role }} ping: {{ svc.ip }} {% endif %} {% endfor %}