-
Notifications
You must be signed in to change notification settings - Fork 3.5k
Expand file tree
/
Copy pathinformer_example.py
More file actions
75 lines (57 loc) · 2.21 KB
/
informer_example.py
File metadata and controls
75 lines (57 loc) · 2.21 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
# Copyright 2026 The Kubernetes Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Example: use SharedInformer to watch pods in the default namespace.
The informer runs a background daemon thread that keeps a local cache
synchronised with the Kubernetes API server. The main thread is free to
query the cache at any time without worrying about connectivity or retries.
"""
import time
import kubernetes
from kubernetes import config
from kubernetes.client import CoreV1Api
from kubernetes.informer import ADDED, DELETED, MODIFIED, SharedInformer
def on_pod_added(pod):
name = pod.metadata.name if hasattr(pod, "metadata") else pod["metadata"]["name"]
print("[ADDED] ", name)
def on_pod_modified(pod):
name = pod.metadata.name if hasattr(pod, "metadata") else pod["metadata"]["name"]
print("[MODIFIED]", name)
def on_pod_deleted(pod):
name = pod.metadata.name if hasattr(pod, "metadata") else pod["metadata"]["name"]
print("[DELETED] ", name)
def main():
config.load_kube_config()
v1 = CoreV1Api()
informer = SharedInformer(
list_func=v1.list_namespaced_pod,
namespace="default",
resync_period=60,
)
informer.add_event_handler(ADDED, on_pod_added)
informer.add_event_handler(MODIFIED, on_pod_modified)
informer.add_event_handler(DELETED, on_pod_deleted)
informer.start()
print('Informer started. Watching pods in "default" namespace ...')
try:
while True:
cached = informer.cache.list()
print("Cached pods: {}".format(len(cached)))
time.sleep(10)
except KeyboardInterrupt:
pass
finally:
informer.stop()
print("Informer stopped.")
if __name__ == "__main__":
main()