Host Manager este o aplicație web locală, Perl-only, pentru registrul de hosturi Madagascar. Nu folosește npm, pip sau pachete CPAN instalate direct pe host.
Perl-ul livrat de distribuție este acceptat ca bază de runtime. Modulele Perl incluse în distribuție sau în core pot fi folosite direct.
Pachetele CPAN nu se instalează direct pe host cu cpan, cpanm sau mecanisme similare. Dacă aplicația are nevoie de un modul CPAN, modulul trebuie făcut disponibil prin repo-ul local după audit. Este acceptabilă o versiune mai veche/stabilă din repo-ul local; nu urmărim neapărat ultima versiune upstream.
MVP-ul curent nu are dependențe CPAN externe.
config/hosts.yaml este registrul editabil și trebuie menținut în git. Aplicația este complet în spatele autentificării OTP pentru orice date de registru, exporturi sau modificări.
Git rămâne mecanismul de audit, istoric și rollback. Aplicația nu înlocuiește repo-ul și nu devine o bază de date separată.
Endpoint-uri publice:
/ — pagina de login/aplicație, fără date de host până la autentificare/api/session — status boolean al sesiunii/api/login/api/logoutHealthcheck-ul /healthz este disponibil doar pe backend-ul local (127.0.0.1:8088). Vhost-ul nginx nu îl expune.
Endpoint-uri cu OTP:
/api/hosts/api/ca/status/api/ca/certificates/download/hosts.yaml/download/local-hosts.tsv/download/monitoring.json/download/ca.crtPOST /api/hosts/upsertPOST /api/hosts/deletePOST /api/render/local-hosts-tsvHOST_MANAGER_TOTP_SECRET="BASE32_SECRET_AICI" \
perl scripts/host_manager.pl --bind 127.0.0.1 --port 8088
Deschide:
http://127.0.0.1:8088/
Implicit serverul ascultă doar pe loopback. Pe jumper, publicarea se face prin nginx, ca vhost separat, cu proxy către 127.0.0.1:8088.
Vhost-ul implicit propus este:
hosts.madagascar.xdev.ro
Configurațiile de deployment sunt în deploy/jumper/.
Instanța de pe jumper este instalată în /usr/local/xdev-host-manager și publicată prin:
http://hosts.madagascar.xdev.ro/
Secretul TOTP nu este în repo. Pentru bootstrap, citește URI-ul root-only de pe jumper:
ssh is-vpn-gw 'cat /etc/xdev/host-manager.totp-uri'
HOST_MANAGER_TOTP_SECRET trebuie să fie un secret Base32 compatibil TOTP. Fără această variabilă, healthcheck-ul și pagina de login funcționează, dar login-ul, API-ul, download-urile și scrierile nu.
Secretul nu se comite în repo. Dacă avem nevoie de integrare cu un manager de secrete sau systemd environment file, se definește separat pe host.
config/hosts.yaml./download/hosts.yaml, /download/local-hosts.tsv sau /download/monitoring.json.Write local-hosts.tsv regenerează config/local-hosts.tsv../scripts/sync_local_hosts.sh --apply --verify
madagascar.xdev.ro este domeniul implicit al rețelei interne. În config/hosts.yaml se declară doar numele canonice/FQDN-urile necesare.
Pentru orice nume *.madagascar.xdev.ro, aplicația derivă automat aliasul scurt prin eliminarea sufixului .madagascar.xdev.ro.
Exemple:
autonas01.madagascar.xdev.ro produce automat aliasul autonas01pmx.baobab.madagascar.xdev.ro produce automat aliasul pmx.baobabAliasurile derivate nu se declară separat în hosts.yaml. Ele apar în API, monitoring export și local-hosts.tsv ca nume efective.
Varianta obligatorie pentru servicii automate este să citească config/hosts.yaml din git, nu să depindă de HTTP neautentificat. Serviciile care sincronizează DNS, monitorizare sau inventare primesc chei dedicate, cu acces minim.
Reguli:
hosts.yaml.perl -c scripts/host_manager.pl și ./scripts/sync_local_hosts.sh --verify după generarea DNS.Modelul recomandat:
git repo
config/hosts.yaml sursă versionată
config/local-hosts.tsv manifest generat/versionat pentru DNS local
jumper
host-manager editează working tree cu OTP
sync_local_hosts.sh aplică DNS după review/verificare
servicii consumatoare
git pull read-only citesc hosts.yaml/local-hosts.tsv
Pentru etapa MVP, aplicația nu face commit/push automat. După o modificare, schimbarea rămâne vizibilă în working tree și se comite explicit după review. Automatizarea commit/push poate fi adăugată ulterior, dar numai cu cheie separată și reguli clare de semnare/audit.
Host Manager include un helper OpenSSL pentru o autoritate locală de certificate pentru hosturi. Cheia privată CA nu este în git și nu este servită prin aplicație.
Locația implicită:
/usr/local/xdev-host-manager/var/ca
Inițializare CA, pe jumper:
cd /usr/local/xdev-host-manager
sudo scripts/ca_manager.sh init
Semnare CSR pentru un host:
sudo scripts/ca_manager.sh sign-csr host-id /path/to/host.csr host.madagascar.xdev.ro host
Aplicația web, după OTP, poate afișa statusul CA, lista certificatelor emise și poate descărca certificatul public CA prin /download/ca.crt.
Reguli:
hosts.yaml.hosts-local.yaml și madagascar.json sunt încă surse pentru audit manual sau pentru următorul collector.