LocalAuthority / .doc / host-manager.md
Newer Older
203 lines | 7.876kb
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 a day ago
19
Schimbările cu impact operațional care elimină nume sau schimbă semantica serviciilor locale se fac prin Work Order (WO), nu prin ștergere directă din UI. WO-ul rămâne în git și trebuie confirmat explicit înainte să modifice registrul.
20

            
Xdev Host Manager authored 2 days ago
21
Endpoint-uri publice:
Xdev Host Manager authored 2 days ago
22

            
Xdev Host Manager authored 2 days ago
23
- `/` — pagina de login/aplicație, fără date de host până la autentificare
24
- `/api/session` — status boolean al sesiunii
25
- `/api/login`
26
- `/api/logout`
Xdev Host Manager authored 2 days ago
27

            
28
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
29

            
30
Endpoint-uri cu OTP:
31

            
Xdev Host Manager authored 2 days ago
32
- `/api/hosts`
Xdev Host Manager authored a day ago
33
- `/api/work-orders`
Xdev Host Manager authored 2 days ago
34
- `/api/ca/status`
35
- `/api/ca/certificates`
Xdev Host Manager authored 2 days ago
36
- `/download/hosts.yaml`
37
- `/download/local-hosts.tsv`
38
- `/download/monitoring.json`
Xdev Host Manager authored 2 days ago
39
- `/download/ca.crt`
Xdev Host Manager authored 2 days ago
40
- `POST /api/hosts/upsert`
41
- `POST /api/hosts/delete`
Xdev Host Manager authored a day ago
42
- `POST /api/work-orders/confirm`
Xdev Host Manager authored 2 days ago
43
- `POST /api/render/local-hosts-tsv`
44

            
45
## Pornire locală
46

            
47
```bash
48
HOST_MANAGER_TOTP_SECRET="BASE32_SECRET_AICI" \
49
perl scripts/host_manager.pl --bind 127.0.0.1 --port 8088
50
```
51

            
52
Deschide:
53

            
54
```text
55
http://127.0.0.1:8088/
56
```
57

            
58
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`.
59

            
60
Vhost-ul implicit propus este:
61

            
62
```text
63
hosts.madagascar.xdev.ro
64
```
65

            
66
Configurațiile de deployment sunt în `deploy/jumper/`.
67

            
68
Instanța de pe jumper este instalată în `/usr/local/xdev-host-manager` și publicată prin:
69

            
70
```text
71
http://hosts.madagascar.xdev.ro/
72
```
73

            
74
Secretul TOTP nu este în repo. Pentru bootstrap, citește URI-ul root-only de pe jumper:
75

            
76
```bash
Xdev Host Manager authored a day ago
77
ssh jumper.madagascar.xdev.ro 'cat /etc/xdev/host-manager.totp-uri'
Xdev Host Manager authored 2 days ago
78
```
79

            
80
## OTP
81

            
Xdev Host Manager authored 2 days ago
82
`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
83

            
84
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.
85

            
86
## Flux
87

            
88
1. Hosturile se editează în aplicație sau direct în `config/hosts.yaml`.
Xdev Host Manager authored 2 days ago
89
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
90
3. Pentru DNS local, butonul `Write local-hosts.tsv` regenerează `config/local-hosts.tsv`.
Xdev Host Manager authored a day ago
91
4. Sincronizarea efectivă către jumper și as01 rămâne:
Xdev Host Manager authored 2 days ago
92

            
93
```bash
94
./scripts/sync_local_hosts.sh --apply --verify
95
```
96

            
Xdev Host Manager authored a day ago
97
## Work Orders
98

            
99
`config/work-orders.yaml` păstrează operațiuni care trebuie confirmate înainte să atingă registrul.
100

            
101
În MVP, acțiunea suportată este:
102

            
103
```text
104
remove_name(host_id, name)
105
```
106

            
107
Confirmarea unui WO:
108

            
109
- cere tastarea exactă a ID-ului WO în interfață
110
- elimină numele declarate din `config/hosts.yaml`
111
- marchează WO-ul ca `confirmed`
112
- regenerează `config/local-hosts.tsv`
113
- nu rulează automat sync-ul către resolvere
114

            
115
După confirmare, operatorul verifică schimbarea în git și rulează explicit:
116

            
117
```bash
118
./scripts/sync_local_hosts.sh --apply --verify
119
```
120

            
121
Primul WO curent este pentru eliminarea numelor locale `pmx.*`/`pbs.*` create istoric pentru vhosturi nginx cu certificate Let's Encrypt. Odată cu CA-ul local, aceste nume nu mai trebuie să existe ca vhosturi separate pentru interfețele Proxmox/PBS.
122

            
Xdev Host Manager authored a day ago
123
## Convenții de nume
124

            
125
`madagascar.xdev.ro` este domeniul implicit al rețelei interne. În `config/hosts.yaml` se declară doar numele canonice/FQDN-urile necesare.
126

            
127
Pentru orice nume `*.madagascar.xdev.ro`, aplicația derivă automat aliasul scurt prin eliminarea sufixului `.madagascar.xdev.ro`.
128

            
129
Exemple:
130

            
131
- `autonas01.madagascar.xdev.ro` produce automat aliasul `autonas01`
132
- `pmx.baobab.madagascar.xdev.ro` produce automat aliasul `pmx.baobab`
133

            
134
Aliasurile derivate nu se declară separat în `hosts.yaml`. Ele apar în API, monitoring export și `local-hosts.tsv` ca nume efective.
135

            
Xdev Host Manager authored 2 days ago
136
## Git și managementul cheilor
137

            
Xdev Host Manager authored 2 days ago
138
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
139

            
140
Reguli:
141

            
142
- Fiecare host/serviciu automat are propria cheie SSH, fără reutilizare între roluri.
143
- Cheile de consum sunt read-only pentru repo.
144
- Cheile care pot scrie în repo sunt rare, separate și folosite doar de componenta de management.
145
- Cheile nu se comit în repo și nu se pun în `hosts.yaml`.
146
- Pentru deployment pe hosturi, se preferă chei restrânse la comanda necesară sau deploy keys read-only unde platforma git permite.
147
- 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.
148

            
149
Modelul recomandat:
150

            
151
```text
152
git repo
153
  config/hosts.yaml        sursă versionată
154
  config/local-hosts.tsv   manifest generat/versionat pentru DNS local
Xdev Host Manager authored a day ago
155
  config/work-orders.yaml  operațiuni confirmabile/versionate
Xdev Host Manager authored 2 days ago
156

            
157
jumper
158
  host-manager             editează working tree cu OTP
159
  sync_local_hosts.sh      aplică DNS după review/verificare
160

            
161
servicii consumatoare
Xdev Host Manager authored 2 days ago
162
  git pull read-only       citesc hosts.yaml/local-hosts.tsv
Xdev Host Manager authored 2 days ago
163
```
164

            
165
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.
166

            
Xdev Host Manager authored 2 days ago
167
## Autoritate locală de certificate
168

            
169
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.
170

            
171
Locația implicită:
172

            
173
```text
174
/usr/local/xdev-host-manager/var/ca
175
```
176

            
177
Inițializare CA, pe jumper:
178

            
179
```bash
180
cd /usr/local/xdev-host-manager
181
sudo scripts/ca_manager.sh init
182
```
183

            
184
Semnare CSR pentru un host:
185

            
186
```bash
187
sudo scripts/ca_manager.sh sign-csr host-id /path/to/host.csr host.madagascar.xdev.ro host
188
```
189

            
190
Aplicația web, după OTP, poate afișa statusul CA, lista certificatelor emise și poate descărca certificatul public CA prin `/download/ca.crt`.
191

            
192
Reguli:
193

            
194
- Se semnează preferabil CSR-uri generate pe hosturi; cheia privată a hostului nu trebuie copiată în Host Manager.
195
- CA private key rămâne local pe jumper și în afara git-ului.
196
- Endpoint-urile CA sunt în spatele OTP-ului.
197
- Automatizarea pentru emitere direct din UI se adaugă ulterior doar cu helper privilegiat și audit separat.
198

            
Xdev Host Manager authored 2 days ago
199
## Limitări MVP
200

            
201
- Parserul YAML acceptă schema strictă generată de aplicație, nu YAML arbitrar.
202
- Conflict engine-ul verifică doar consistența locală din `hosts.yaml`.
203
- DHCP, mDNS, `hosts-local.yaml` și `madagascar.json` sunt încă surse pentru audit manual sau pentru următorul collector.