20
|
1 import json
|
|
2 import time
|
|
3
|
|
4 from kubernetes import client
|
|
5
|
|
6
|
|
7 def refreshPodCmaps(pod_name, namespace='default'):
|
|
8 """
|
|
9 Per https://ahmet.im/blog/kubernetes-secret-volumes-delay/ there could be a while
|
|
10 until k8s updates the CM volume that a pod sees. Workaround is to edit the pod annotations.
|
|
11 """
|
|
12 api_instance = client.CoreV1Api()
|
|
13
|
|
14 pod = api_instance.read_namespaced_pod(name=pod_name, namespace=namespace)
|
|
15 if pod.metadata.annotations is None:
|
|
16 pod.metadata.annotations = {}
|
|
17 pod.metadata.annotations['force-configmap-update'] = str(time.time())
|
|
18 api_instance.replace_namespaced_pod(name=pod_name, namespace=namespace, body=pod)
|
|
19
|
|
20
|
|
21 def firstPodName(selector):
|
|
22 api_instance = client.CoreV1Api()
|
|
23 pod_list = api_instance.list_namespaced_pod(namespace='default', label_selector=selector)
|
|
24 return pod_list.items[0].metadata.name
|
|
25
|
|
26
|
|
27 def hup(ctx, deployment, process_name):
|
|
28 ctx.run(f'kubectl exec {deployment} -- pkill -HUP {process_name}')
|
|
29
|
|
30
|
|
31 def replaceCmap(name, configObj):
|
|
32 api_instance = client.CoreV1Api()
|
|
33 api_response = api_instance.replace_namespaced_config_map( #
|
|
34 name=name,
|
|
35 namespace='default',
|
|
36 body={
|
|
37 'apiVersion': 'v1',
|
|
38 'kind': 'ConfigMap',
|
|
39 'metadata': {
|
|
40 'name': name
|
|
41 },
|
|
42 'data': {
|
|
43 'scrape_main': json.dumps(configObj)
|
|
44 },
|
|
45 })
|
|
46 print(f"{name} resource_version is now {api_response.metadata.resource_version}")
|