-
Notifications
You must be signed in to change notification settings - Fork 78
/
Copy pathprobes.py
62 lines (54 loc) · 1.81 KB
/
probes.py
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
import logging
from chaoslib.types import Secrets
from kubernetes import client
from chaosk8s import create_k8s_api_client
__all__ = ["secret_exists"]
logger = logging.getLogger("chaostoolkit")
def secret_exists(
name: str = None,
ns: str = "default",
label_selector: str = None,
secrets: Secrets = None,
) -> bool:
"""
Lookup a secret by its name and returns False when
the secret was not found.
"""
api = create_k8s_api_client(secrets)
v1 = client.CoreV1Api(api)
if name and not label_selector:
logger.debug(f"Filtering secrets by name {name}")
ret = v1.list_namespaced_secret(
ns, field_selector=f"metadata.name={name}"
)
logger.debug(
f"Found {len(ret.items)} secrets(s) named '{name}' in ns '{ns}'"
)
elif label_selector and not name:
logger.debug(f"Filtering secrets by label {label_selector}")
ret = v1.list_namespaced_secret(ns, label_selector=label_selector)
logger.debug(
f"Found {len(ret.items)} secret(s) in ns '{ns}'"
" labelled '{label_selector}'"
)
elif name and label_selector:
logger.debug(
f"Filtering secrets by name {name} and label {label_selector}"
)
ret = v1.list_namespaced_secret(
ns,
field_selector=f"metadata.name={name}",
label_selector=label_selector,
)
logger.debug(
f"Found {len(ret.items)} secret(s) named '{name}' and labelled"
f" '{label_selector}' in ns '{ns}'"
)
else:
ret = v1.list_namespaced_secret(ns)
logger.debug(f"Found {len(ret.items)} secret(s) in ns '{ns}'")
if not ret.items:
m = f"secret '{name}' does not exist"
logger.debug(m)
return False
return True