LocalAuthority / .doc / host-manager.md
Newer Older
230 lines | 9.379kb
Xdev Host Manager authored a day ago
1
# Madagascar Local Authority MVP
Xdev Host Manager authored 2 days ago
2

            
Xdev Host Manager authored a day ago
3
Madagascar Local Authority este o aplicație web locală, Perl-only, pentru registrul de hosturi Madagascar, manifestele DNS locale, Work Orders și autoritatea locală de certificate. Nu folosește npm, pip sau pachete CPAN instalate direct pe host.
4

            
5
Numele de produs este `Madagascar Local Authority`. Numele tehnic al serviciului, userului Unix, path-ului și fișierelor de environment rămâne `host-manager`.
Xdev Host Manager authored 2 days ago
6

            
7
## Politica de dependențe
8

            
9
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.
10

            
11
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.
12

            
13
MVP-ul curent nu are dependențe CPAN externe.
14

            
15
## Rol
16

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

            
19
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ă.
20

            
Xdev Host Manager authored a day ago
21
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, exprimă intenția operațională și trebuie dus până la capăt înainte să modifice registrul.
Xdev Host Manager authored a day ago
22

            
Xdev Host Manager authored 2 days ago
23
Endpoint-uri publice:
Xdev Host Manager authored 2 days ago
24

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

            
30
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
31

            
32
Endpoint-uri cu OTP:
33

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

            
48
## Pornire locală
49

            
50
```bash
51
HOST_MANAGER_TOTP_SECRET="BASE32_SECRET_AICI" \
52
perl scripts/host_manager.pl --bind 127.0.0.1 --port 8088
53
```
54

            
55
Deschide:
56

            
57
```text
58
http://127.0.0.1:8088/
59
```
60

            
61
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`.
62

            
63
Vhost-ul implicit propus este:
64

            
65
```text
66
hosts.madagascar.xdev.ro
67
```
68

            
69
Configurațiile de deployment sunt în `deploy/jumper/`.
70

            
Bogdan Timofte authored a day ago
71
Checkout-ul de dezvoltare este local:
72

            
73
```text
74
/Users/bogdan/Documents/Workspaces/Xdev/Madagascar/LocalAuthority
75
```
76

            
Bogdan Timofte authored a day ago
77
Repo-ul canonic în GitPrep este:
78

            
79
```text
80
git@192.168.2.102:repositories/bogdan/LocalAuthority.git
81
http://192.168.2.102:3000/bogdan/LocalAuthority
82
```
83

            
Bogdan Timofte authored a day ago
84
Instanța runtime de pe jumper este instalată în `/usr/local/xdev-host-manager` și publicată prin:
Xdev Host Manager authored 2 days ago
85

            
86
```text
87
http://hosts.madagascar.xdev.ro/
88
```
89

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

            
92
```bash
Xdev Host Manager authored a day ago
93
ssh jumper.madagascar.xdev.ro 'cat /etc/xdev/host-manager.totp-uri'
Xdev Host Manager authored 2 days ago
94
```
95

            
Bogdan Timofte authored a day ago
96
Codul aplicației se modifică local și se publică pe jumper cu:
97

            
98
```bash
99
scripts/deploy_to_jumper.sh
100
```
101

            
102
Scriptul de deploy nu copiază implicit `config/`, deoarece acesta conține date operaționale editabile de aplicația live. Folosește `--include-config` doar când vrei explicit să înlocuiești registrul runtime.
103

            
Xdev Host Manager authored 2 days ago
104
## OTP
105

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

            
108
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.
109

            
110
## Flux
111

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

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

            
Xdev Host Manager authored a day ago
121
## Work Orders
122

            
Xdev Host Manager authored a day ago
123
`config/work-orders.yaml` păstrează operațiuni care trebuie executate și confirmate înainte să atingă registrul.
124

            
125
Un WO nu înseamnă că numele nu mai este în uz. Înseamnă doar că vrem să ajungem acolo. Pentru retragerea unui nume, checklist-ul trebuie să acopere pașii reali: ștergerea vhostului, înlocuirea certificatelor publice cu certificate locale, reîncărcarea serviciilor, testarea accesului și verificarea că nu mai există consumatori.
Xdev Host Manager authored a day ago
126

            
127
În MVP, acțiunea suportată este:
128

            
129
```text
130
remove_name(host_id, name)
131
```
132

            
133
Confirmarea unui WO:
134

            
135
- cere tastarea exactă a ID-ului WO în interfață
Xdev Host Manager authored a day ago
136
- este blocată dacă există pași de checklist nemarcați `done`
Xdev Host Manager authored a day ago
137
- elimină numele declarate din `config/hosts.yaml`
138
- marchează WO-ul ca `confirmed`
139
- regenerează `config/local-hosts.tsv`
140
- nu rulează automat sync-ul către resolvere
141

            
142
După confirmare, operatorul verifică schimbarea în git și rulează explicit:
143

            
144
```bash
145
./scripts/sync_local_hosts.sh --apply --verify
146
```
147

            
Xdev Host Manager authored a day ago
148
Primul WO curent este pentru retragerea 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, dar rămân publicate până când checklist-ul operațional este complet și WO-ul este confirmat.
Xdev Host Manager authored a day ago
149

            
Xdev Host Manager authored a day ago
150
## Convenții de nume
151

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

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

            
156
Exemple:
157

            
158
- `autonas01.madagascar.xdev.ro` produce automat aliasul `autonas01`
159
- `pmx.baobab.madagascar.xdev.ro` produce automat aliasul `pmx.baobab`
160

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

            
Xdev Host Manager authored 2 days ago
163
## Git și managementul cheilor
164

            
Xdev Host Manager authored 2 days ago
165
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
166

            
167
Reguli:
168

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

            
176
Modelul recomandat:
177

            
178
```text
179
git repo
180
  config/hosts.yaml        sursă versionată
181
  config/local-hosts.tsv   manifest generat/versionat pentru DNS local
Xdev Host Manager authored a day ago
182
  config/work-orders.yaml  operațiuni confirmabile/versionate
Xdev Host Manager authored 2 days ago
183

            
184
jumper
185
  host-manager             editează working tree cu OTP
186
  sync_local_hosts.sh      aplică DNS după review/verificare
187

            
188
servicii consumatoare
Xdev Host Manager authored 2 days ago
189
  git pull read-only       citesc hosts.yaml/local-hosts.tsv
Xdev Host Manager authored 2 days ago
190
```
191

            
192
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.
193

            
Xdev Host Manager authored 2 days ago
194
## Autoritate locală de certificate
195

            
Xdev Host Manager authored a day ago
196
Madagascar Local Authority 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.
Xdev Host Manager authored 2 days ago
197

            
198
Locația implicită:
199

            
200
```text
201
/usr/local/xdev-host-manager/var/ca
202
```
203

            
204
Inițializare CA, pe jumper:
205

            
206
```bash
207
cd /usr/local/xdev-host-manager
208
sudo scripts/ca_manager.sh init
209
```
210

            
211
Semnare CSR pentru un host:
212

            
213
```bash
214
sudo scripts/ca_manager.sh sign-csr host-id /path/to/host.csr host.madagascar.xdev.ro host
215
```
216

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

            
219
Reguli:
220

            
Xdev Host Manager authored a day ago
221
- Se semnează preferabil CSR-uri generate pe hosturi; cheia privată a hostului nu trebuie copiată în Madagascar Local Authority.
Xdev Host Manager authored 2 days ago
222
- CA private key rămâne local pe jumper și în afara git-ului.
223
- Endpoint-urile CA sunt în spatele OTP-ului.
224
- Automatizarea pentru emitere direct din UI se adaugă ulterior doar cu helper privilegiat și audit separat.
225

            
Xdev Host Manager authored 2 days ago
226
## Limitări MVP
227

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