annotate tasks.py @ 16:73d23fdfee8e

change server to ditto
author drewp@bigasterisk.com
date Fri, 23 Jun 2023 23:53:24 -0700
parents 2c37fab420da
children f5777b65f035
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
10
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
1 import json
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
2 import sys
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
3 import tempfile
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
4 import time
4
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
5 import urllib.request
10
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
6 from pathlib import Path
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
7 from typing import Dict
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
8
4
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
9 from invoke import task
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
10
12
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
11 sys.path.append('/usr/lib/python3/dist-packages/')
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
12 import yaml
4
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
13
12
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
14 _tfs = []
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
15
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
16
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
17 def saveTmp(text):
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
18 tf = tempfile.NamedTemporaryFile(mode='wt')
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
19 _tfs.append(tf)
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
20 tf.write(text)
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
21 tf.flush()
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
22 return Path(tf.name)
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
23
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
24
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
25 def writeConfigmap(ctx, files: Dict[str, Path]):
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
26 arg = ','.join(f'{k}={v}' for k, v in files.items())
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
27 ctx.run(
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
28 f'kubectl create configmap victoriametrics-config --from-file {arg} -o yaml --dry-run=client | kubectl apply -f -'
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
29 )
4
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
30
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
31
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
32 def reload(ctx, svc):
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
33 host = ctx.run(f'khost {svc}').stdout
12
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
34 path = {'victoriametrics': '/m/', 'vmalert': '/'}[svc]
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
35 reload_url = f'http://{host}{path}-/reload'
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
36 print(f'reload with POST {reload_url}')
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
37 for workaround in [1]:
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
38 print(' -> status',
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
39 urllib.request.urlopen(reload_url, data=b'unused').status)
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
40 time.sleep(0)
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
41
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
42
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
43
10
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
44 def hostsExpectedOnline(ctx):
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
45 return ctx.run(
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
46 'cd /my/serv/lanscape; pdm run python hosts_expected_online.py').stdout
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
47
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
48
12
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
49 def expectedK8sNodes(ctx):
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
50 getNode = json.loads(ctx.run("kubectl get node -o json").stdout)
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
51 hosts = [item['metadata']['name'] for item in getNode['items']]
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
52 return yaml.dump({
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
53 'groups': [{
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
54 'name':
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
55 'k8s_expected_nodes',
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
56 'rules': [{
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
57 'alert':
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
58 'kube_node_log_size_report_' + h,
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
59 'expr':
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
60 'absent(kubelet_container_log_filesystem_used_bytes{instance="%s"})'
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
61 % h,
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
62 'for':
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
63 '1h',
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
64 'annotations': {
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
65 'summary': f"no recent k8s log size report from host {h}"
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
66 }
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
67 } for h in hosts]
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
68 }]
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
69 })
4
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
70
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
71
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
72 @task
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
73 def sync_config(ctx):
12
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
74 config = Path('config')
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
75 for workaround in [1]:
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
76 writeConfigmap(
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
77 ctx, {
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
78 # 'scrape_ssl.yaml': saveTmp(httpsCertProber()),
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
79 'rules_expected_nodes.yaml': saveTmp(expectedK8sNodes(ctx)),
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
80 'rules_expected_hosts.yaml': saveTmp(hostsExpectedOnline(ctx)),
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
81 })
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
82 reload(ctx, 'victoriametrics')
4
1eb6e6a2b9b6 version control configs finally; use configmaps to present them to VM
drewp@bigasterisk.com
parents:
diff changeset
83
12
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
84 # this reload doesn't get the new config- not sure if it's vmalert bug or k8s cm propogation problem
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
85 # reload(ctx, 'vmalert')
b6720e379d5b config updates
drewp@bigasterisk.com
parents: 10
diff changeset
86 ctx.run('kubectl rollout restart deploy/vmalert')
10
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
87
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
88 @task
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
89 def build_config(ctx):
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
90 with open('rules/build/expected_hosts.yaml', 'w') as out:
2023a6ce7bc0 some of the config-rebuild code
drewp@bigasterisk.com
parents: 4
diff changeset
91 out.write(hostsExpectedOnline(ctx))