Madagascar Local Authority folosește SQLite ca sursă de adevăr runtime pentru hosturi, aliasuri, vhosturi, taguri, Work Orders, workeri de date și certificate.
Locația implicită în checkout:
var/host-manager.sqlite
Locația runtime pe jumper:
/usr/local/xdev-host-manager/var/host-manager.sqlite
Path-ul poate fi schimbat cu:
HOST_MANAGER_DB=/path/to/host-manager.sqlite
Hosturile sunt identificate prin FQDN complet, nu prin short name. Exemplu: gw.local și gw.remote sunt identități diferite. Coloana internă compatibilă legacy_id păstrează ID-ul scurt pentru migrare și Work Orders istorice, dar contractul UI/export este hosts.fqdn.
Schema evită să transforme hosts într-un tabel cu prea multe coloane. Datele specializate stau în tabele separate:
host_aliaseshost_roleshost_sourceshost_flagstags, host_tagshost_sshvhostscertificates, certificate_dns_namesdata_workers, dhcp_leases, mdns_observationsdocuments rămâne doar tabel legacy pentru migrarea din modelul vechi document-store. Aplicația nu îl mai folosește ca sursă de adevăr.
Schema curentă este versiunea 3.
schema_meta('schema_version') = '3'
schema_meta păstrează și metadate runtime precum registry_updated_at.
| Tabel | Rol |
|---|---|
schema_meta |
metadate de schemă/runtime |
documents |
document-store legacy pentru migrare |
hosts |
hosturi canonice, identificate prin FQDN |
host_aliases |
aliasuri păstrate inclusiv după retragere |
host_roles |
roluri active/retrase per host |
host_sources |
surse active/retrase per host |
host_flags |
flaguri extensibile per host |
tags |
catalog de taguri cu label, culoare și icon |
host_tags |
asocieri active/retrase între hosturi și taguri |
host_ssh |
profile SSH per host |
vhosts |
vhosturi mutabile între hosturi |
data_workers |
workeri/surse care colectează date |
dhcp_leases |
date observate din DHCP lease/reservation |
mdns_observations |
date observate din mDNS |
certificates |
certificate emise de CA locală |
certificate_dns_names |
SAN DNS names pentru certificate |
work_orders |
Work Orders |
work_order_checklist |
checklist items pentru Work Orders |
work_order_actions |
acțiuni confirmabile pentru Work Orders |
erDiagram
hosts ||--o{ host_aliases : has
hosts ||--o{ vhosts : serves
hosts ||--o{ host_roles : has
hosts ||--o{ host_sources : has
hosts ||--o{ host_flags : has
hosts ||--o{ host_tags : tagged
tags ||--o{ host_tags : catalog
hosts ||--o{ host_ssh : has
hosts ||--o{ dhcp_leases : may_match
hosts ||--o{ mdns_observations : may_match
hosts ||--o{ certificates : may_own
certificates ||--o{ certificate_dns_names : has
data_workers ||--o{ dhcp_leases : collects
data_workers ||--o{ mdns_observations : collects
work_orders ||--o{ work_order_checklist : has
work_orders ||--o{ work_order_actions : has
hosts ||--o{ work_order_actions : targets
La prima inițializare a unei baze fără rânduri în hosts, aplicația seed-uiește din:
documents.name = 'hosts_yaml', dacă există din vechiul modelconfig/hosts.yaml, dacă documentul legacy lipseșteWork Orders se seed-uiesc similar din documents.name = 'work_orders_yaml' sau config/work-orders.yaml.
Seed-ul curent produce:
hosts.*, pmx.* și pbs.*dhcp-router și mdns-listenerconfig/hosts.yaml este exportul finit și seed pentru instalări noi. Nu mai există un export versionat local-hosts.tsv; scriptul de sync generează recorduri efemere direct din SQLite-ul runtime de pe jumper.
Pe jumper:
cd /usr/local/xdev-host-manager
sqlite3 var/host-manager.sqlite '.tables'
sqlite3 var/host-manager.sqlite '.schema hosts'
sqlite3 var/host-manager.sqlite '.schema host_aliases'
sqlite3 var/host-manager.sqlite '.schema vhosts'
sqlite3 var/host-manager.sqlite 'pragma foreign_key_list(vhosts);'
sqlite3 var/host-manager.sqlite 'pragma index_list(host_aliases);'
sqlite3 var/host-manager.sqlite 'select fqdn, status, dns_ip from hosts order by fqdn;'
sqlite3 var/host-manager.sqlite 'select alias_name, host_fqdn, alias_kind, status from host_aliases order by alias_name;'
sqlite3 var/host-manager.sqlite 'select vhost_fqdn, host_fqdn, status from vhosts order by vhost_fqdn;'
Backup recomandat:
cd /usr/local/xdev-host-manager
sqlite3 var/host-manager.sqlite ".backup 'backups/host-manager/host-manager.sqlite.$(date +%Y%m%d_%H%M%S).bak'"
Cu WAL activ, o copie brută trebuie să trateze fișierele ca set coerent:
var/host-manager.sqlite
var/host-manager.sqlite-wal
var/host-manager.sqlite-shm
Restore-ul înlocuiește sursa de adevăr runtime:
sudo systemctl stop host-manager
sudo cp backups/host-manager/host-manager.sqlite.YYYYMMDD_HHMMSS.bak var/host-manager.sqlite
sudo chown host-manager:host-manager var/host-manager.sqlite
sudo systemctl start host-manager
curl -fsS http://127.0.0.1:8088/healthz >/dev/null