|
Xdev Host Manager
authored
2 days ago
|
1
|
# Host Manager MVP
|
|
|
2
|
|
|
|
3
|
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.
|
|
|
4
|
|
|
|
5
|
## Politica de dependențe
|
|
|
6
|
|
|
|
7
|
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.
|
|
|
8
|
|
|
|
9
|
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.
|
|
|
10
|
|
|
|
11
|
MVP-ul curent nu are dependențe CPAN externe.
|
|
|
12
|
|
|
|
13
|
## Rol
|
|
|
14
|
|
|
Xdev Host Manager
authored
2 days ago
|
15
|
`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.
|
|
Xdev Host Manager
authored
2 days ago
|
16
|
|
|
|
17
|
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ă.
|
|
|
18
|
|
|
Xdev Host Manager
authored
2 days ago
|
19
|
Endpoint-uri publice:
|
|
Xdev Host Manager
authored
2 days ago
|
20
|
|
|
Xdev Host Manager
authored
2 days ago
|
21
|
- `/` — pagina de login/aplicație, fără date de host până la autentificare
|
|
|
22
|
- `/api/session` — status boolean al sesiunii
|
|
|
23
|
- `/api/login`
|
|
|
24
|
- `/api/logout`
|
|
Xdev Host Manager
authored
2 days ago
|
25
|
|
|
|
26
|
Healthcheck-ul `/healthz` este disponibil doar pe backend-ul local (`127.0.0.1:8088`). Vhost-ul nginx nu îl expune.
|
|
Xdev Host Manager
authored
2 days ago
|
27
|
|
|
|
28
|
Endpoint-uri cu OTP:
|
|
|
29
|
|
|
Xdev Host Manager
authored
2 days ago
|
30
|
- `/api/hosts`
|
|
|
31
|
- `/download/hosts.yaml`
|
|
|
32
|
- `/download/local-hosts.tsv`
|
|
|
33
|
- `/download/monitoring.json`
|
|
Xdev Host Manager
authored
2 days ago
|
34
|
- `POST /api/hosts/upsert`
|
|
|
35
|
- `POST /api/hosts/delete`
|
|
|
36
|
- `POST /api/render/local-hosts-tsv`
|
|
|
37
|
|
|
|
38
|
## Pornire locală
|
|
|
39
|
|
|
|
40
|
```bash
|
|
|
41
|
HOST_MANAGER_TOTP_SECRET="BASE32_SECRET_AICI" \
|
|
|
42
|
perl scripts/host_manager.pl --bind 127.0.0.1 --port 8088
|
|
|
43
|
```
|
|
|
44
|
|
|
|
45
|
Deschide:
|
|
|
46
|
|
|
|
47
|
```text
|
|
|
48
|
http://127.0.0.1:8088/
|
|
|
49
|
```
|
|
|
50
|
|
|
|
51
|
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`.
|
|
|
52
|
|
|
|
53
|
Vhost-ul implicit propus este:
|
|
|
54
|
|
|
|
55
|
```text
|
|
|
56
|
hosts.madagascar.xdev.ro
|
|
|
57
|
```
|
|
|
58
|
|
|
|
59
|
Configurațiile de deployment sunt în `deploy/jumper/`.
|
|
|
60
|
|
|
|
61
|
Instanța de pe jumper este instalată în `/usr/local/xdev-host-manager` și publicată prin:
|
|
|
62
|
|
|
|
63
|
```text
|
|
|
64
|
http://hosts.madagascar.xdev.ro/
|
|
|
65
|
```
|
|
|
66
|
|
|
|
67
|
Secretul TOTP nu este în repo. Pentru bootstrap, citește URI-ul root-only de pe jumper:
|
|
|
68
|
|
|
|
69
|
```bash
|
|
|
70
|
ssh is-vpn-gw 'cat /etc/xdev/host-manager.totp-uri'
|
|
|
71
|
```
|
|
|
72
|
|
|
|
73
|
## OTP
|
|
|
74
|
|
|
Xdev Host Manager
authored
2 days ago
|
75
|
`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.
|
|
Xdev Host Manager
authored
2 days ago
|
76
|
|
|
|
77
|
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.
|
|
|
78
|
|
|
|
79
|
## Flux
|
|
|
80
|
|
|
|
81
|
1. Hosturile se editează în aplicație sau direct în `config/hosts.yaml`.
|
|
Xdev Host Manager
authored
2 days ago
|
82
|
2. Operatorii autentificați pot descărca `/download/hosts.yaml`, `/download/local-hosts.tsv` sau `/download/monitoring.json`.
|
|
Xdev Host Manager
authored
2 days ago
|
83
|
3. Pentru DNS local, butonul `Write local-hosts.tsv` regenerează `config/local-hosts.tsv`.
|
|
|
84
|
4. Sincronizarea efectivă către is-vpn-gw și as01 rămâne:
|
|
|
85
|
|
|
|
86
|
```bash
|
|
|
87
|
./scripts/sync_local_hosts.sh --apply --verify
|
|
|
88
|
```
|
|
|
89
|
|
|
|
90
|
## Git și managementul cheilor
|
|
|
91
|
|
|
Xdev Host Manager
authored
2 days ago
|
92
|
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.
|
|
Xdev Host Manager
authored
2 days ago
|
93
|
|
|
|
94
|
Reguli:
|
|
|
95
|
|
|
|
96
|
- Fiecare host/serviciu automat are propria cheie SSH, fără reutilizare între roluri.
|
|
|
97
|
- Cheile de consum sunt read-only pentru repo.
|
|
|
98
|
- Cheile care pot scrie în repo sunt rare, separate și folosite doar de componenta de management.
|
|
|
99
|
- Cheile nu se comit în repo și nu se pun în `hosts.yaml`.
|
|
|
100
|
- Pentru deployment pe hosturi, se preferă chei restrânse la comanda necesară sau deploy keys read-only unde platforma git permite.
|
|
|
101
|
- Pull-ul automat trebuie să valideze fișierele înainte de aplicare; de exemplu `perl -c scripts/host_manager.pl` și `./scripts/sync_local_hosts.sh --verify` după generarea DNS.
|
|
|
102
|
|
|
|
103
|
Modelul recomandat:
|
|
|
104
|
|
|
|
105
|
```text
|
|
|
106
|
git repo
|
|
|
107
|
config/hosts.yaml sursă versionată
|
|
|
108
|
config/local-hosts.tsv manifest generat/versionat pentru DNS local
|
|
|
109
|
|
|
|
110
|
jumper
|
|
|
111
|
host-manager editează working tree cu OTP
|
|
|
112
|
sync_local_hosts.sh aplică DNS după review/verificare
|
|
|
113
|
|
|
|
114
|
servicii consumatoare
|
|
Xdev Host Manager
authored
2 days ago
|
115
|
git pull read-only citesc hosts.yaml/local-hosts.tsv
|
|
Xdev Host Manager
authored
2 days ago
|
116
|
```
|
|
|
117
|
|
|
|
118
|
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.
|
|
|
119
|
|
|
|
120
|
## Limitări MVP
|
|
|
121
|
|
|
|
122
|
- Parserul YAML acceptă schema strictă generată de aplicație, nu YAML arbitrar.
|
|
|
123
|
- Conflict engine-ul verifică doar consistența locală din `hosts.yaml`.
|
|
|
124
|
- DHCP, mDNS, `hosts-local.yaml` și `madagascar.json` sunt încă surse pentru audit manual sau pentru următorul collector.
|