Repository navigation
Expand file tree
/
Copy pathclusters.py
More file actions
190 lines (186 loc) · 13.1 KB
/
Copy pathclusters.py
File metadata and controls
190 lines (186 loc) · 13.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
"""
Proxmox Mock Server — Cluster definitions.
Each cluster: 3 nodes, ~30 VMs/LXC per node.
Resource tuple: (vmid, name, kind, node_idx, vcpus, ram_gb, tags, pool, status, base_cpu_pct, base_ram_pct)
kind: "q" = qemu, "l" = lxc
"""
# fmt: off
_MILAN = [
# ── Node 0 (pve-mi-node01) ──────────────────────────────────────
(100,"web-frontend-01","q",0,4,8,"production;web","web-tier","running",32,58),
(101,"web-frontend-02","q",0,4,8,"production;web","web-tier","running",28,55),
(102,"web-frontend-03","q",0,4,8,"production;web","web-tier","running",35,60),
(103,"web-backend-01","q",0,8,16,"production;api","app-tier","running",45,62),
(104,"web-backend-02","q",0,8,16,"production;api","app-tier","running",40,58),
(105,"app-api-01","q",0,8,32,"production;api","app-tier","running",52,70),
(106,"app-api-02","q",0,8,32,"production;api","app-tier","running",48,68),
(107,"db-mysql-master","q",0,16,64,"production;database","db-tier","running",55,82),
(108,"monitoring-grafana","q",0,4,8,"infra;monitoring","infra","running",18,45),
(109,"mail-relay-01","q",0,2,4,"infra;mail","infra","running",12,35),
(110,"jump-host","q",0,2,4,"infra;security","infra","running",5,20),
(150,"ct-nginx-lb-01","l",0,2,2,"production;lb","web-tier","running",22,40),
(151,"ct-dns-mi-01","l",0,1,1,"infra;dns","infra","running",3,15),
(152,"ct-ntp-01","l",0,1,1,"infra;ntp","infra","running",1,8),
(153,"ct-certbot-01","l",0,1,1,"infra;ssl","infra","running",2,10),
# ── Node 1 (pve-mi-node02) ──────────────────────────────────────
(111,"web-frontend-04","q",1,4,8,"production;web","web-tier","running",30,56),
(112,"web-backend-03","q",1,8,16,"production;api","app-tier","running",42,60),
(113,"app-api-03","q",1,8,32,"production;api","app-tier","running",50,72),
(114,"app-worker-01","q",1,4,16,"production;worker","app-tier","running",60,55),
(115,"app-worker-02","q",1,4,16,"production;worker","app-tier","running",58,52),
(116,"db-mysql-replica-01","q",1,16,64,"production;database","db-tier","running",38,78),
(117,"redis-cache-01","q",1,4,16,"production;cache","cache-tier","running",15,88),
(118,"elk-logstash","q",1,8,32,"infra;logging","infra","running",42,65),
(119,"vpn-gateway","q",1,2,4,"infra;network","infra","running",8,25),
(120,"app-scheduler-01","q",1,4,8,"production;scheduler","app-tier","running",25,40),
(121,"web-cdn-origin","q",1,4,8,"production;web","web-tier","running",20,35),
(154,"ct-haproxy-01","l",1,2,2,"production;lb","web-tier","running",25,42),
(155,"ct-syslog-01","l",1,1,2,"infra;logging","infra","running",5,30),
(156,"ct-metrics-collector","l",1,1,1,"infra;monitoring","infra","running",8,22),
(157,"ct-fail2ban-01","l",1,1,1,"infra;security","infra","running",3,12),
# ── Node 2 (pve-mi-node03) ──────────────────────────────────────
(122,"web-backend-04","q",2,8,16,"production;api","app-tier","running",44,61),
(123,"app-api-04","q",2,8,32,"production;api","app-tier","running",47,69),
(124,"app-worker-03","q",2,4,16,"production;worker","app-tier","running",55,50),
(125,"db-postgres-01","q",2,16,64,"production;database","db-tier","running",50,85),
(126,"redis-cache-02","q",2,4,16,"production;cache","cache-tier","running",12,90),
(127,"memcached-01","q",2,4,8,"production;cache","cache-tier","running",10,92),
(128,"monitoring-prometheus","q",2,8,16,"infra;monitoring","infra","running",30,55),
(129,"dns-resolver-01","q",2,2,4,"infra;dns","infra","running",6,18),
(130,"elk-elasticsearch","q",2,16,64,"infra;logging","infra","running",48,75),
(131,"elk-kibana","q",2,4,8,"infra;logging","infra","running",15,40),
(132,"legacy-erp","q",2,4,16,"production;legacy","legacy","stopped",0,0),
(158,"ct-nginx-lb-02","l",2,2,2,"production;lb","web-tier","running",20,38),
(159,"ct-backup-agent-01","l",2,1,2,"infra;backup","infra","running",10,25),
(160,"ct-cron-01","l",2,1,1,"infra;scheduler","infra","running",4,15),
(161,"ct-wireguard-01","l",2,1,1,"infra;vpn","infra","running",2,10),
]
_ROME = [
# ── Node 0 (pve-rm-node01) ──────────────────────────────────────
(300,"dev-frontend-01","q",0,4,8,"dev;web","development","running",22,45),
(301,"dev-frontend-02","q",0,4,8,"dev;web","development","running",18,40),
(302,"dev-backend-01","q",0,4,8,"dev;api","development","running",25,48),
(303,"dev-backend-02","q",0,4,8,"dev;api","development","running",20,42),
(304,"gitlab-runner-01","q",0,4,8,"cicd;runner","ci-cd","running",65,55),
(305,"gitlab-runner-02","q",0,4,8,"cicd;runner","ci-cd","running",58,50),
(306,"staging-api-01","q",0,4,16,"staging;api","staging","running",30,52),
(307,"staging-db-01","q",0,8,32,"staging;database","staging","running",35,65),
(308,"wiki-confluence","q",0,4,8,"tools;docs","tools","running",12,50),
(309,"jira-server","q",0,4,16,"tools;pm","tools","running",18,55),
(310,"code-review-01","q",0,4,8,"tools;review","tools","running",10,35),
(350,"ct-registry-01","l",0,2,4,"cicd;registry","ci-cd","running",15,60),
(351,"ct-minio-01","l",0,2,4,"tools;storage","tools","running",8,45),
(352,"ct-sonarqube","l",0,2,4,"cicd;quality","ci-cd","running",20,55),
(353,"ct-plantuml","l",0,1,1,"tools;docs","tools","running",2,10),
# ── Node 1 (pve-rm-node02) ──────────────────────────────────────
(311,"dev-frontend-03","q",1,4,8,"dev;web","development","running",15,38),
(312,"dev-backend-03","q",1,4,8,"dev;api","development","running",22,44),
(313,"gitlab-runner-03","q",1,4,8,"cicd;runner","ci-cd","running",70,58),
(314,"jenkins-master","q",1,4,16,"cicd;jenkins","ci-cd","running",25,60),
(315,"jenkins-agent-01","q",1,4,8,"cicd;jenkins","ci-cd","running",55,48),
(316,"jenkins-agent-02","q",1,4,8,"cicd;jenkins","ci-cd","running",50,45),
(317,"staging-api-02","q",1,4,16,"staging;api","staging","running",28,50),
(318,"staging-db-02","q",1,8,32,"staging;database","staging","running",32,62),
(319,"devops-ansible","q",1,2,4,"tools;automation","tools","running",8,30),
(320,"devops-terraform","q",1,2,4,"tools;iac","tools","running",5,25),
(321,"dev-sandbox-01","q",1,2,4,"dev;sandbox","development","stopped",0,0),
(354,"ct-vault-01","l",1,2,2,"infra;secrets","infra","running",6,20),
(355,"ct-consul-01","l",1,2,2,"infra;discovery","infra","running",8,25),
(356,"ct-nexus-01","l",1,2,4,"cicd;artifacts","ci-cd","running",12,55),
(357,"ct-mailhog","l",1,1,1,"dev;mail","development","running",1,8),
# ── Node 2 (pve-rm-node03) ──────────────────────────────────────
(322,"qa-selenium-01","q",2,8,16,"qa;testing","qa","running",40,50),
(323,"qa-loadtest-01","q",2,8,16,"qa;perf","qa","running",55,45),
(324,"dev-mongo-01","q",2,8,32,"dev;database","development","running",28,60),
(325,"staging-redis-01","q",2,4,8,"staging;cache","staging","running",10,75),
(326,"dev-k8s-master","q",2,4,8,"dev;k8s","k8s-dev","running",20,42),
(327,"dev-k8s-worker-01","q",2,4,8,"dev;k8s","k8s-dev","running",35,55),
(328,"dev-k8s-worker-02","q",2,4,8,"dev;k8s","k8s-dev","running",38,52),
(329,"perf-test-01","q",2,4,16,"qa;perf","qa","running",45,40),
(330,"sandbox-02","q",2,2,4,"dev;sandbox","development","stopped",0,0),
(331,"training-env","q",2,2,4,"tools;training","tools","stopped",0,0),
(358,"ct-ldap-01","l",2,2,2,"infra;auth","infra","running",5,18),
(359,"ct-smtp-dev","l",2,1,1,"dev;mail","development","running",2,12),
(360,"ct-proxy-dev","l",2,1,2,"infra;proxy","infra","running",6,20),
(361,"ct-redis-test","l",2,1,1,"qa;cache","qa","running",4,30),
]
_NAPLES = [
# ── Node 0 (pve-na-node01) ──────────────────────────────────────
(500,"dr-web-01","q",0,4,8,"dr;web","dr-web","running",10,30),
(501,"dr-web-02","q",0,4,8,"dr;web","dr-web","running",8,28),
(502,"dr-web-03","q",0,4,8,"dr;web","dr-web","running",12,32),
(503,"dr-api-01","q",0,8,32,"dr;api","dr-app","running",15,35),
(504,"dr-api-02","q",0,8,32,"dr;api","dr-app","running",12,33),
(505,"dr-db-master","q",0,16,64,"dr;database","dr-db","running",20,55),
(506,"backup-veeam-01","q",0,4,16,"backup;veeam","backup","running",30,50),
(507,"fw-pfsense-01","q",0,2,4,"security;firewall","security","running",8,22),
(508,"vpn-site2site","q",0,2,4,"infra;vpn","infra","running",5,18),
(509,"monitoring-zabbix","q",0,4,8,"infra;monitoring","infra","running",15,42),
(510,"geo-dns-01","q",0,2,4,"infra;dns","infra","running",4,15),
(550,"ct-dns-dr-01","l",0,1,1,"infra;dns","infra","running",3,12),
(551,"ct-ntp-dr-01","l",0,1,1,"infra;ntp","infra","running",1,6),
(552,"ct-proxy-dr-01","l",0,2,2,"infra;proxy","infra","running",5,18),
(553,"ct-waf-01","l",0,2,2,"security;waf","security","running",8,25),
# ── Node 1 (pve-na-node02) ──────────────────────────────────────
(511,"dr-db-replica","q",1,16,64,"dr;database","dr-db","running",18,52),
(512,"backup-borg-01","q",1,4,8,"backup;borg","backup","running",35,40),
(513,"backup-restic-01","q",1,4,8,"backup;restic","backup","running",28,38),
(514,"nas-primary","q",1,8,32,"storage;nas","storage","running",15,45),
(515,"nas-secondary","q",1,8,32,"storage;nas","storage","running",12,42),
(516,"s3-gateway-01","q",1,4,16,"storage;s3","storage","running",10,35),
(517,"ids-suricata-01","q",1,4,8,"security;ids","security","running",22,38),
(518,"siem-wazuh-01","q",1,8,16,"security;siem","security","running",30,55),
(519,"log-collector-01","q",1,4,8,"infra;logging","infra","running",18,40),
(520,"replication-mgr","q",1,2,4,"infra;replication","infra","running",8,22),
(521,"dr-mq-broker","q",1,4,8,"dr;messaging","dr-app","running",14,35),
(554,"ct-rsync-01","l",1,1,2,"infra;sync","infra","running",12,30),
(555,"ct-cron-dr","l",1,1,1,"infra;scheduler","infra","running",4,10),
(556,"ct-monitoring-agent","l",1,1,1,"infra;monitoring","infra","running",5,15),
(557,"ct-netdata","l",1,1,2,"infra;monitoring","infra","running",6,20),
# ── Node 2 (pve-na-node03) ──────────────────────────────────────
(522,"dr-cache-01","q",2,4,16,"dr;cache","dr-app","running",8,70),
(523,"dr-worker-01","q",2,4,16,"dr;worker","dr-app","running",10,28),
(524,"dr-worker-02","q",2,4,16,"dr;worker","dr-app","running",12,30),
(525,"archive-server","q",2,8,32,"storage;archive","storage","running",20,55),
(526,"tape-gateway","q",2,4,8,"storage;tape","storage","running",15,32),
(527,"cold-storage-01","q",2,4,8,"storage;cold","storage","running",5,25),
(528,"compliance-audit","q",2,4,8,"security;compliance","security","running",10,35),
(529,"disaster-orchestrator","q",2,4,8,"dr;orchestration","dr-app","running",6,20),
(530,"dr-loadbalancer","q",2,2,4,"dr;lb","dr-web","running",8,22),
(531,"test-failover","q",2,2,4,"dr;testing","dr-app","stopped",0,0),
(532,"cold-standby-db","q",2,8,32,"dr;database","dr-db","stopped",0,0),
(558,"ct-snmp-01","l",2,1,1,"infra;snmp","infra","running",3,10),
(559,"ct-syslog-dr","l",2,1,2,"infra;logging","infra","running",5,18),
(560,"ct-health-check","l",2,1,1,"infra;monitoring","infra","running",4,12),
(561,"ct-acme-dr","l",2,1,1,"infra;ssl","infra","running",1,5),
]
# fmt: on
CLUSTERS = {
"datacenter-milan": {
"nodes": [
{"name": "pve-mi-node01", "maxcpu": 64, "maxmem_gb": 256, "subnet": "10.10.1"},
{"name": "pve-mi-node02", "maxcpu": 64, "maxmem_gb": 256, "subnet": "10.10.2"},
{"name": "pve-mi-node03", "maxcpu": 64, "maxmem_gb": 256, "subnet": "10.10.3"},
],
"storage_gb": {"local": 500, "local-lvm": 2000, "ceph-pool": 10000},
"resources": _MILAN,
},
"datacenter-rome": {
"nodes": [
{"name": "pve-rm-node01", "maxcpu": 32, "maxmem_gb": 128, "subnet": "10.20.1"},
{"name": "pve-rm-node02", "maxcpu": 32, "maxmem_gb": 128, "subnet": "10.20.2"},
{"name": "pve-rm-node03", "maxcpu": 32, "maxmem_gb": 128, "subnet": "10.20.3"},
],
"storage_gb": {"local": 250, "local-lvm": 1000, "ceph-pool": 5000},
"resources": _ROME,
},
"datacenter-naples": {
"nodes": [
{"name": "pve-na-node01", "maxcpu": 48, "maxmem_gb": 192, "subnet": "10.30.1"},
{"name": "pve-na-node02", "maxcpu": 48, "maxmem_gb": 192, "subnet": "10.30.2"},
{"name": "pve-na-node03", "maxcpu": 48, "maxmem_gb": 192, "subnet": "10.30.3"},
],
"storage_gb": {"local": 500, "local-lvm": 2000, "ceph-pool": 8000},
"resources": _NAPLES,
},
}