diff k8s_ops.py @ 22:cd115f1ca2a8

use configmaps and a special pod refresh trick
author drewp@bigasterisk.com
date Sat, 24 Jun 2023 23:02:04 -0700
parents f5777b65f035
children 80e275ab2f88
line wrap: on
line diff
--- a/k8s_ops.py	Sat Jun 24 23:00:40 2023 -0700
+++ b/k8s_ops.py	Sat Jun 24 23:02:04 2023 -0700
@@ -4,7 +4,7 @@
 from kubernetes import client
 
 
-def refreshPodCmaps(pod_name, namespace='default'):
+def refreshPodCmaps(pod_name, namespace="default"):
     """
     Per https://ahmet.im/blog/kubernetes-secret-volumes-delay/ there could be a while
     until k8s updates the CM volume that a pod sees. Workaround is to edit the pod annotations.
@@ -14,33 +14,32 @@
     pod = api_instance.read_namespaced_pod(name=pod_name, namespace=namespace)
     if pod.metadata.annotations is None:
         pod.metadata.annotations = {}
-    pod.metadata.annotations['force-configmap-update'] = str(time.time())
+    pod.metadata.annotations["force-configmap-update"] = str(time.time())
     api_instance.replace_namespaced_pod(name=pod_name, namespace=namespace, body=pod)
 
 
 def firstPodName(selector):
     api_instance = client.CoreV1Api()
-    pod_list = api_instance.list_namespaced_pod(namespace='default', label_selector=selector)
+    pod_list = api_instance.list_namespaced_pod(
+        namespace="default", label_selector=selector
+    )
     return pod_list.items[0].metadata.name
 
 
 def hup(ctx, deployment, process_name):
-    ctx.run(f'kubectl exec {deployment} -- pkill -HUP {process_name}')
+    ctx.run(f"kubectl exec {deployment} -- pkill -HUP {process_name}")
 
 
-def replaceCmap(name, configObj):
+def replaceCmap(name, dataObj):
     api_instance = client.CoreV1Api()
     api_response = api_instance.replace_namespaced_config_map(  #
         name=name,
-        namespace='default',
+        namespace="default",
         body={
-            'apiVersion': 'v1',
-            'kind': 'ConfigMap',
-            'metadata': {
-                'name': name
-            },
-            'data': {
-                'scrape_main': json.dumps(configObj)
-            },
-        })
+            "apiVersion": "v1",
+            "kind": "ConfigMap",
+            "metadata": {"name": name},
+            "data": dict((fn, json.dumps(obj)) for fn, obj in dataObj.items()),
+        },
+    )
     print(f"{name} resource_version is now {api_response.metadata.resource_version}")