comparison next/create_all.py @ 57:b3addcd4486c

extract css/js to their own files (patch is contaminated with some parameterization code)
author drewp@bigasterisk.com
date Fri, 26 Apr 2024 15:35:23 -0700
parents a72c47973aa4
children e3151ab43579
comparison
equal deleted inserted replaced
56:a72c47973aa4 57:b3addcd4486c
1 from pathlib import Path
1 from index_page import makeIndexHtml 2 from index_page import makeIndexHtml
2 from output import affinityToNode, build, createIngress, createPv, createPvc, toJson, createSvc 3 from output import affinityToNode, build, createIngress, createPv, createPvc, toJson, createSvc
3 4
4 5
5 def createAgentDeploy(tzArg, vmVersion, pipelineWebRoot, agentFileName, agentName, agentPort, scrapeMapKey, insertName, pipelineName): 6 def createAgentDeploy(tzArg, vmVersion, pipelineWebRoot, agentFileName, agentName, agentPort, scrapeMapKey, insertName, pipelineName):
176 177
177 (build / f'{objPrefix}-3index_cmap.yaml').write_text(toJson({ 178 (build / f'{objPrefix}-3index_cmap.yaml').write_text(toJson({
178 "apiVersion": "v1", "kind": "ConfigMap", "metadata": { "name": name }, 179 "apiVersion": "v1", "kind": "ConfigMap", "metadata": { "name": name },
179 "data": { 180 "data": {
180 "index.html": html, 181 "index.html": html,
181 (??) } 182 "index.js": Path("index.js").read_text(),
182 (??) })) 183 "index.css": Path("index.css").read_text(),
183 (??)(build / 'vmselect_svc.yaml').write_text(toJson({ 184 }
184 (??) "apiVersion": "v1",
185 (??) "kind": "Service",
186 (??) "metadata": {
187 (??) "name": "next-victoriametrics-vmselect"
188 (??) },
189 (??) "spec": {
190 (??) "ports": [{
191 (??) "port": 80,
192 (??) "targetPort": 8481
193 (??) }],
194 (??) "selector": {
195 (??) "app": "next-victoriametrics-vmselect"
196 (??) }
197 (??) }
198 (??)}
199 (??) # in vmui, set server url to
200 (??) # https://bigasterisk.com/m/next/vmselect/select/0/prometheus
201 (??) ))
202 (??)
203 (??)(build / 'vmselect_svc.yaml').write_text(
204 (??) toJson({
205 (??) "apiVersion": "networking.k8s.io/v1",
206 (??) "kind": "Ingress",
207 (??) "metadata": {
208 (??) "name": "next-victoriametrics",
209 (??) "annotations": {
210 (??) "cert-manager.io/cluster-issuer": "letsencrypt-prod",
211 (??) "ingress.pomerium.io/allow_public_unauthenticated_access": "false",
212 (??) "ingress.pomerium.io/pass_identity_headers": "true",
213 (??) "ingress.pomerium.io/preserve_host_header": "true",
214 })) # yapf: disable 185 })) # yapf: disable
215 186
216 (build / f'{objPrefix}-3index_deploy.yaml').write_text( 187 (build / f'{objPrefix}-3index_deploy.yaml').write_text(
217 toJson({ 188 toJson({
218 "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "name": name }, 189 "apiVersion": "apps/v1", "kind": "Deployment", "metadata": { "name": name },
237 } 208 }
238 } 209 }
239 })) # yapf: disable 210 })) # yapf: disable
240 createSvc(f'{objPrefix}-3index', f'{objPrefix}-index', [{'port': 80, 'targetPort': 80}]) 211 createSvc(f'{objPrefix}-3index', f'{objPrefix}-index', [{'port': 80, 'targetPort': 80}])
241 212
242 (build / 'vmselect_svc.yaml').write_text( 213
243 toJson({ 214 def main():
244 "apiVersion": "networking.k8s.io/v1", 215 tzArg = "-loggerTimezone=America/Los_Angeles"
245 "kind": "Ingress", 216 objPrefix = "next-victoriametrics" # prefix on all k8s object names
246 "metadata": { 217 webRoot = "/m/next"
247 "name": "next-victoriametrics", 218 vmVersion = "v1.100.1"
248 "annotations": { 219 webHost = 'bigasterisk.com'
249 "cert-manager.io/cluster-issuer": "letsencrypt-prod", 220 pipelines = [
250 "ingress.pomerium.io/allow_public_unauthenticated_access": "false", 221 ('forever', '100y'),
251 "ingress.pomerium.io/pass_identity_headers": "true", 222 ('recent', '90y'),
252 "ingress.pomerium.io/preserve_host_header": "true", 223 ]
253 } 224 storageSvcs = [createIngestPipeline(tzArg, vmVersion, webRoot, objPrefix, p, f'scrape_{p}', ret) for p, ret in pipelines]
254 }, 225
255 "spec": { 226 selectPort = 8481
256 "ingressClassName": "pomerium", 227 createVmselectDeploy(tzArg, vmVersion, webRoot, objPrefix, storageSvcs, selectPort)
257 "rules": [{ 228 createSvc(f'{objPrefix}-1vmselect', f"{objPrefix}-vmselect", [{"port": 80, "targetPort": selectPort}])
258 "host": "bigasterisk.com", 229
259 "http": { 230 ingressPaths = [
260 "paths": [{ 231 { "pathType": "Prefix", "path": f"{webRoot}/", "backend": { "service": { "name": f"{objPrefix}-index", "port": { "number": 80 } } } },
261 "pathType": "Prefix", 232 { "pathType": "Prefix", "path": f"{webRoot}/vmselect/", "backend": { "service": { "name": f"{objPrefix}-vmselect", "port": { "number": 80 } } } },
262 "path": "/m/next/vmselect/", 233 ] # yapf: disable
263 "backend": { 234 for p, _ in pipelines:
264 "service": { 235 ingressPaths.extend([
265 "name": "next-victoriametrics-vmselect", 236 { "pathType": "Prefix", "path": f"{webRoot}/{p}/vmagent/", "backend": { "service": { "name": f"{objPrefix}-{p}-vmagent", "port": { "number": 80 } } } },
266 "port": { 237 { "pathType": "Prefix", "path": f"{webRoot}/{p}/vminsert/", "backend": { "service": { "name": f"{objPrefix}-{p}-vminsert", "port": { "number": 80 } } } },
267 "number": 80 238 { "pathType": "Prefix", "path": f"{webRoot}/{p}/vmstorage/", "backend": { "service": { "name": f"{objPrefix}-{p}-vmstorage", "port": { "number": 80 } } } },
268 } 239 ]) # yapf: disable
269 } 240
270 } 241 policy = """\
271 }, { 242 allow:
272 "pathType": "Prefix", 243 or:
273 "path": "/m/next/vmagent/", 244 - { email: { is: "drewpca@gmail.com" }}
274 "backend": { 245 - { email: { is: "kelsimp@gmail.com" }}
275 "service": { 246 """
276 "name": "next-victoriametrics-vmagent", 247 createIngress(f'{objPrefix}-2ingress.yaml', objPrefix, policy, ingressPaths, webHost)
277 "port": { 248 createIndex(objPrefix, webRoot, makeIndexHtml(objPrefix, webRoot, webHost))
278 "number": 80 249 # this should also emit a static html page and web server deploy that serves at webRoot and has a map of everything
279 } 250
280 } 251
281 } 252 main()
282 }, { 253
283 "pathType": "Prefix", 254 # in vmui, set server url to
284 "path": "/m/next/vmselect/", 255 # https://bigasterisk.com{webRoot}/vmselect/select/0/prometheus
285 "backend": {
286 "service": {
287 "name": "next-victoriametrics-vmselect",
288 "port": {
289 "number": 80
290 }
291 }
292 }
293 }]
294 }
295 }],
296 "tls": [{
297 "hosts": ["bigasterisk.com"],
298 "secretName": "bigasterisk.com-tls"
299 }]
300 }
301 }))