Newer Older
162 lines | 6.437kb
Bogdan Timofte authored 4 days ago
1
# SQLite Database
2

            
Bogdan Timofte authored a day ago
3
Madagascar Local Authority folosește SQLite ca sursă de adevăr runtime pentru hosturi, aliasuri, vhosturi, taguri, Work Orders, workeri de date și certificate.
Bogdan Timofte authored 4 days ago
4

            
5
Locația implicită în checkout:
6

            
7
```text
8
var/host-manager.sqlite
9
```
10

            
11
Locația runtime pe jumper:
12

            
13
```text
14
/usr/local/xdev-host-manager/var/host-manager.sqlite
15
```
16

            
17
Path-ul poate fi schimbat cu:
18

            
19
```text
20
HOST_MANAGER_DB=/path/to/host-manager.sqlite
21
```
22

            
23
## Principii
24

            
Bogdan Timofte authored a day ago
25
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`.
Bogdan Timofte authored 4 days ago
26

            
27
Schema evită să transforme `hosts` într-un tabel cu prea multe coloane. Datele specializate stau în tabele separate:
28

            
29
- aliasuri: [`host_aliases`](tables/host_aliases.md)
30
- roluri: [`host_roles`](tables/host_roles.md)
31
- surse: [`host_sources`](tables/host_sources.md)
32
- flaguri: [`host_flags`](tables/host_flags.md)
Bogdan Timofte authored a day ago
33
- taguri: [`tags`](tables/tags.md), [`host_tags`](tables/host_tags.md)
Bogdan Timofte authored 4 days ago
34
- SSH: [`host_ssh`](tables/host_ssh.md)
35
- vhosturi mutabile: [`vhosts`](tables/vhosts.md)
36
- certificate: [`certificates`](tables/certificates.md), [`certificate_dns_names`](tables/certificate_dns_names.md)
37
- workeri și observații: [`data_workers`](tables/data_workers.md), [`dhcp_leases`](tables/dhcp_leases.md), [`mdns_observations`](tables/mdns_observations.md)
38

            
39
[`documents`](tables/documents.md) 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.
40

            
41
## Schema Version
42

            
Bogdan Timofte authored a day ago
43
Schema curentă este versiunea `3`.
Bogdan Timofte authored 4 days ago
44

            
45
```sql
Bogdan Timofte authored a day ago
46
schema_meta('schema_version') = '3'
Bogdan Timofte authored 4 days ago
47
```
48

            
49
[`schema_meta`](tables/schema_meta.md) păstrează și metadate runtime precum `registry_updated_at`.
50

            
51
## Catalog
52

            
53
| Tabel | Rol |
54
|-------|-----|
55
| [`schema_meta`](tables/schema_meta.md) | metadate de schemă/runtime |
56
| [`documents`](tables/documents.md) | document-store legacy pentru migrare |
57
| [`hosts`](tables/hosts.md) | hosturi canonice, identificate prin FQDN |
58
| [`host_aliases`](tables/host_aliases.md) | aliasuri păstrate inclusiv după retragere |
59
| [`host_roles`](tables/host_roles.md) | roluri active/retrase per host |
60
| [`host_sources`](tables/host_sources.md) | surse active/retrase per host |
61
| [`host_flags`](tables/host_flags.md) | flaguri extensibile per host |
Bogdan Timofte authored a day ago
62
| [`tags`](tables/tags.md) | catalog de taguri cu label, culoare și icon |
63
| [`host_tags`](tables/host_tags.md) | asocieri active/retrase între hosturi și taguri |
Bogdan Timofte authored 4 days ago
64
| [`host_ssh`](tables/host_ssh.md) | profile SSH per host |
65
| [`vhosts`](tables/vhosts.md) | vhosturi mutabile între hosturi |
66
| [`data_workers`](tables/data_workers.md) | workeri/surse care colectează date |
67
| [`dhcp_leases`](tables/dhcp_leases.md) | date observate din DHCP lease/reservation |
68
| [`mdns_observations`](tables/mdns_observations.md) | date observate din mDNS |
69
| [`certificates`](tables/certificates.md) | certificate emise de CA locală |
70
| [`certificate_dns_names`](tables/certificate_dns_names.md) | SAN DNS names pentru certificate |
71
| [`work_orders`](tables/work_orders.md) | Work Orders |
72
| [`work_order_checklist`](tables/work_order_checklist.md) | checklist items pentru Work Orders |
73
| [`work_order_actions`](tables/work_order_actions.md) | acțiuni confirmabile pentru Work Orders |
74

            
75
## Relații Principale
76

            
77
```mermaid
78
erDiagram
79
  hosts ||--o{ host_aliases : has
80
  hosts ||--o{ vhosts : serves
81
  hosts ||--o{ host_roles : has
82
  hosts ||--o{ host_sources : has
83
  hosts ||--o{ host_flags : has
Bogdan Timofte authored a day ago
84
  hosts ||--o{ host_tags : tagged
85
  tags ||--o{ host_tags : catalog
Bogdan Timofte authored 4 days ago
86
  hosts ||--o{ host_ssh : has
87
  hosts ||--o{ dhcp_leases : may_match
88
  hosts ||--o{ mdns_observations : may_match
89
  hosts ||--o{ certificates : may_own
90
  certificates ||--o{ certificate_dns_names : has
91
  data_workers ||--o{ dhcp_leases : collects
92
  data_workers ||--o{ mdns_observations : collects
93
  work_orders ||--o{ work_order_checklist : has
94
  work_orders ||--o{ work_order_actions : has
95
  hosts ||--o{ work_order_actions : targets
96
```
97

            
98
## Migrare și Seed
99

            
100
La prima inițializare a unei baze fără rânduri în `hosts`, aplicația seed-uiește din:
101

            
102
1. `documents.name = 'hosts_yaml'`, dacă există din vechiul model
103
2. `config/hosts.yaml`, dacă documentul legacy lipsește
104
3. document gol valid, dacă lipsește și seed-ul
105

            
106
Work Orders se seed-uiesc similar din `documents.name = 'work_orders_yaml'` sau `config/work-orders.yaml`.
107

            
108
Seed-ul curent produce:
109

            
110
- 11 hosturi cunoscute
111
- aliasuri scurte derivate pentru hosturi și vhosturi
112
- vhosturile `hosts.*`, `pmx.*` și `pbs.*`
113
- workerii `dhcp-router` și `mdns-listener`
114
- Work Order-ul existent pentru retragerea numelor legacy
115

            
Bogdan Timofte authored a day ago
116
`config/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.
Bogdan Timofte authored 4 days ago
117

            
118
## Inspecție
119

            
120
Pe jumper:
121

            
122
```bash
123
cd /usr/local/xdev-host-manager
124
sqlite3 var/host-manager.sqlite '.tables'
125
sqlite3 var/host-manager.sqlite '.schema hosts'
126
sqlite3 var/host-manager.sqlite '.schema host_aliases'
127
sqlite3 var/host-manager.sqlite '.schema vhosts'
128
sqlite3 var/host-manager.sqlite 'pragma foreign_key_list(vhosts);'
129
sqlite3 var/host-manager.sqlite 'pragma index_list(host_aliases);'
Bogdan Timofte authored a day ago
130
sqlite3 var/host-manager.sqlite 'select fqdn, status, dns_ip from hosts order by fqdn;'
Bogdan Timofte authored 4 days ago
131
sqlite3 var/host-manager.sqlite 'select alias_name, host_fqdn, alias_kind, status from host_aliases order by alias_name;'
132
sqlite3 var/host-manager.sqlite 'select vhost_fqdn, host_fqdn, status from vhosts order by vhost_fqdn;'
133
```
134

            
135
## Backup
136

            
137
Backup recomandat:
138

            
139
```bash
140
cd /usr/local/xdev-host-manager
141
sqlite3 var/host-manager.sqlite ".backup 'backups/host-manager/host-manager.sqlite.$(date +%Y%m%d_%H%M%S).bak'"
142
```
143

            
144
Cu WAL activ, o copie brută trebuie să trateze fișierele ca set coerent:
145

            
146
```text
147
var/host-manager.sqlite
148
var/host-manager.sqlite-wal
149
var/host-manager.sqlite-shm
150
```
151

            
152
## Restore
153

            
154
Restore-ul înlocuiește sursa de adevăr runtime:
155

            
156
```bash
157
sudo systemctl stop host-manager
158
sudo cp backups/host-manager/host-manager.sqlite.YYYYMMDD_HHMMSS.bak var/host-manager.sqlite
159
sudo chown host-manager:host-manager var/host-manager.sqlite
160
sudo systemctl start host-manager
161
curl -fsS http://127.0.0.1:8088/healthz >/dev/null
162
```