krkn-lib 5.1.7__tar.gz → 5.1.10__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/PKG-INFO +4 -4
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/pyproject.toml +4 -4
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/k8s/krkn_kubernetes.py +50 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/k8s/pod_monitor/pod_monitor.py +1 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/models/elastic/models.py +2 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/models/pod_monitor/models.py +4 -4
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/models/telemetry/models.py +5 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/base_test.py +5 -1
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_elastic_models.py +6 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_kubernetes_check.py +6 -2
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_kubernetes_list.py +46 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_kubernetes_pods_monitor.py +4 -1
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/utils/functions.py +7 -8
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/LICENSE +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/README.md +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/aws_tests/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/aws_tests/test_krkn_telemetry_kubernetes.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/aws_tests/test_krkn_telemetry_openshift.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/elastic/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/elastic/krkn_elastic.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/k8s/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/k8s/pod_monitor/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/k8s/templates/hog_pod.j2 +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/k8s/templates/node_exec_pod.j2 +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/k8s/templates/service_hijacking_config_map.j2 +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/k8s/templates/service_hijacking_pod.j2 +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/k8s/templates/syn_flood_pod.j2 +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/models/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/models/elastic/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/models/k8s/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/models/k8s/models.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/models/krkn/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/models/krkn/models.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/models/pod_monitor/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/models/telemetry/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/ocp/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/ocp/krkn_openshift.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/prometheus/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/prometheus/krkn_prometheus.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/telemetry/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/telemetry/k8s/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/telemetry/k8s/krkn_telemetry_kubernetes.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/telemetry/ocp/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/telemetry/ocp/krkn_telemetry_openshift.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_elastic.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_kubernetes_create.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_kubernetes_delete.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_kubernetes_exec.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_kubernetes_get.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_kubernetes_misc.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_kubernetes_models.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_kubernetes_pods_monitor_models.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_openshift.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_prometheus.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_telemetry_models.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_utils.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_version.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/utils/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/utils/safe_logger.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/version/__init__.py +0 -0
- {krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/version/version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: krkn-lib
|
|
3
|
-
Version: 5.1.
|
|
3
|
+
Version: 5.1.10
|
|
4
4
|
Summary: Foundation library for Kraken
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -19,10 +19,10 @@ Requires-Dist: base64io (>=1.0.3,<2.0.0)
|
|
|
19
19
|
Requires-Dist: coverage (>=7.6.12,<8.0.0)
|
|
20
20
|
Requires-Dist: cython (==3.0)
|
|
21
21
|
Requires-Dist: deprecation (==2.1.0)
|
|
22
|
-
Requires-Dist: elasticsearch (==
|
|
23
|
-
Requires-Dist: elasticsearch-dsl (==
|
|
22
|
+
Requires-Dist: elasticsearch (==8.19.1)
|
|
23
|
+
Requires-Dist: elasticsearch-dsl (==8.18.0)
|
|
24
24
|
Requires-Dist: kubeconfig (>=1.1.1,<2.0.0)
|
|
25
|
-
Requires-Dist: kubernetes (==
|
|
25
|
+
Requires-Dist: kubernetes (==34.1.0)
|
|
26
26
|
Requires-Dist: numpy (==1.26.4)
|
|
27
27
|
Requires-Dist: prometheus-api-client (>=0.5.4,<0.6.0)
|
|
28
28
|
Requires-Dist: pytz (>=2023.3,<2024.0)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "krkn-lib"
|
|
3
|
-
version = "5.1.
|
|
3
|
+
version = "5.1.10"
|
|
4
4
|
description = "Foundation library for Kraken"
|
|
5
5
|
authors = ["Red Hat Chaos Team"]
|
|
6
6
|
license = "Apache-2.0"
|
|
@@ -10,7 +10,7 @@ homepage = "https://github.com/redhat-chaos/krkn"
|
|
|
10
10
|
|
|
11
11
|
[tool.poetry.dependencies]
|
|
12
12
|
python = "^3.9"
|
|
13
|
-
kubernetes ="
|
|
13
|
+
kubernetes ="34.1.0"
|
|
14
14
|
sphinxnotes-markdown-builder="^0.5.6"
|
|
15
15
|
requests="^2.29.0"
|
|
16
16
|
kubeconfig = "^1.1.1"
|
|
@@ -20,8 +20,8 @@ tzlocal = "5.1"
|
|
|
20
20
|
pytz = "^2023.3"
|
|
21
21
|
PyYAML = "6.0.1"
|
|
22
22
|
prometheus-api-client = "^0.5.4"
|
|
23
|
-
elasticsearch = "
|
|
24
|
-
elasticsearch-dsl = "
|
|
23
|
+
elasticsearch = "8.19.1"
|
|
24
|
+
elasticsearch-dsl = "8.18.0"
|
|
25
25
|
wheel = "^0.42.0"
|
|
26
26
|
cython = "3.0"
|
|
27
27
|
numpy= "1.26.4"
|
|
@@ -166,7 +166,13 @@ class KrknKubernetes:
|
|
|
166
166
|
|
|
167
167
|
client.Configuration.set_default(self.client_config)
|
|
168
168
|
self.watch_resource = watch.Watch()
|
|
169
|
+
# Get the logger for the kubernetes client
|
|
170
|
+
kubernetes_logger = logging.getLogger('kubernetes')
|
|
169
171
|
|
|
172
|
+
# Set the logging level to a higher level than DEBUG,
|
|
173
|
+
# such as INFO, WARNING, or ERROR
|
|
174
|
+
# This will effectively disable DEBUG level messages.
|
|
175
|
+
kubernetes_logger.setLevel(logging.INFO)
|
|
170
176
|
except OSError:
|
|
171
177
|
raise Exception(
|
|
172
178
|
"Invalid kube-config file: {0}. "
|
|
@@ -528,6 +534,7 @@ class KrknKubernetes:
|
|
|
528
534
|
namespace: str,
|
|
529
535
|
label_selector: str = None,
|
|
530
536
|
field_selector: str = None,
|
|
537
|
+
exclude_label: str = None,
|
|
531
538
|
) -> list[str]:
|
|
532
539
|
"""
|
|
533
540
|
List pods in the given namespace
|
|
@@ -537,6 +544,8 @@ class KrknKubernetes:
|
|
|
537
544
|
(optional default `None`)
|
|
538
545
|
:param field_selector: filter results by config details
|
|
539
546
|
select only running pods by setting "status.phase=Running"
|
|
547
|
+
:param exclude_label: exclude pods matching this label
|
|
548
|
+
in format "key=value" (optional default `None`)
|
|
540
549
|
:return: a list of pod names
|
|
541
550
|
"""
|
|
542
551
|
pods = []
|
|
@@ -552,6 +561,14 @@ class KrknKubernetes:
|
|
|
552
561
|
raise e
|
|
553
562
|
for ret_list in ret:
|
|
554
563
|
for pod in ret_list.items:
|
|
564
|
+
# Skip pods with the exclude label if specified
|
|
565
|
+
if exclude_label and pod.metadata.labels:
|
|
566
|
+
exclude_key, exclude_value = exclude_label.split("=", 1)
|
|
567
|
+
if (
|
|
568
|
+
exclude_key in pod.metadata.labels
|
|
569
|
+
and pod.metadata.labels[exclude_key] == exclude_value
|
|
570
|
+
):
|
|
571
|
+
continue
|
|
555
572
|
pods.append(pod.metadata.name)
|
|
556
573
|
return pods
|
|
557
574
|
|
|
@@ -3130,3 +3147,36 @@ class KrknKubernetes:
|
|
|
3130
3147
|
pids_list = list(filter(None, pids_list))
|
|
3131
3148
|
return pids_list
|
|
3132
3149
|
return None
|
|
3150
|
+
|
|
3151
|
+
def list_pod_network_interfaces(
|
|
3152
|
+
self, pod_name: str, namespace: str, container_name: str = None
|
|
3153
|
+
) -> list[str]:
|
|
3154
|
+
"""
|
|
3155
|
+
Lists the network interfaces of a pod (Linux only)
|
|
3156
|
+
:param pod_name: the name of the pod
|
|
3157
|
+
:param namespace: the namespaces of the pod
|
|
3158
|
+
:param container_name: the container of the pod where the interfaces
|
|
3159
|
+
will be listed, if None the first will be picked
|
|
3160
|
+
:return: the list of the interfaces
|
|
3161
|
+
"""
|
|
3162
|
+
|
|
3163
|
+
if not self.check_if_pod_exists(pod_name, namespace):
|
|
3164
|
+
raise Exception(
|
|
3165
|
+
f"target pod {pod_name} does not exist in "
|
|
3166
|
+
f"namespace {namespace}"
|
|
3167
|
+
)
|
|
3168
|
+
|
|
3169
|
+
cmd = "ls /sys/class/net"
|
|
3170
|
+
nics_str = self.exec_cmd_in_pod(
|
|
3171
|
+
[cmd],
|
|
3172
|
+
pod_name,
|
|
3173
|
+
namespace,
|
|
3174
|
+
container_name,
|
|
3175
|
+
)
|
|
3176
|
+
nics = nics_str.split("\n")
|
|
3177
|
+
try:
|
|
3178
|
+
nics.remove("lo")
|
|
3179
|
+
nics.remove("")
|
|
3180
|
+
except ValueError:
|
|
3181
|
+
pass
|
|
3182
|
+
return nics
|
|
@@ -118,6 +118,7 @@ class ElasticHealthChecks(InnerDoc):
|
|
|
118
118
|
class ElasticVirtChecks(InnerDoc):
|
|
119
119
|
vm_name = Text()
|
|
120
120
|
ip_address = Text()
|
|
121
|
+
new_ip_address = Text()
|
|
121
122
|
namespace = Text()
|
|
122
123
|
node_name = Text()
|
|
123
124
|
status = Boolean()
|
|
@@ -243,6 +244,7 @@ class ElasticChaosRunTelemetry(Document):
|
|
|
243
244
|
ElasticVirtChecks(
|
|
244
245
|
vm_name=info.vm_name,
|
|
245
246
|
ip_address=info.ip_address,
|
|
247
|
+
new_ip_address=info.new_ip_address,
|
|
246
248
|
namespace=info.namespace,
|
|
247
249
|
node_name=info.node_name,
|
|
248
250
|
status=info.status,
|
|
@@ -144,7 +144,8 @@ class PodsSnapshot:
|
|
|
144
144
|
)
|
|
145
145
|
)
|
|
146
146
|
else:
|
|
147
|
-
|
|
147
|
+
|
|
148
|
+
# pod stayed ready but was restarted
|
|
148
149
|
# or has a failed container
|
|
149
150
|
pods_status.recovered.append(
|
|
150
151
|
AffectedPod(
|
|
@@ -153,9 +154,8 @@ class PodsSnapshot:
|
|
|
153
154
|
pod_readiness_time=ready_status.timestamp
|
|
154
155
|
- status_change.timestamp,
|
|
155
156
|
pod_rescheduling_time=0,
|
|
156
|
-
total_recovery_time=
|
|
157
|
-
|
|
158
|
-
- status_change.timestamp
|
|
157
|
+
total_recovery_time=ready_status.timestamp
|
|
158
|
+
- status_change.timestamp,
|
|
159
159
|
)
|
|
160
160
|
)
|
|
161
161
|
break
|
|
@@ -436,6 +436,10 @@ class VirtCheck:
|
|
|
436
436
|
"""
|
|
437
437
|
Vm ip address
|
|
438
438
|
"""
|
|
439
|
+
new_ip_address: str
|
|
440
|
+
"""
|
|
441
|
+
New Ip address when vm restarts
|
|
442
|
+
"""
|
|
439
443
|
namespace: str
|
|
440
444
|
"""
|
|
441
445
|
Namespace
|
|
@@ -471,6 +475,7 @@ class VirtCheck:
|
|
|
471
475
|
self.start_timestamp = json_dict.get("start_timestamp", "")
|
|
472
476
|
self.end_timestamp = json_dict.get("end_timestamp", "")
|
|
473
477
|
self.duration = json_dict.get("duration", "")
|
|
478
|
+
self.new_ip_address = json_dict.get("new_ip_address", "")
|
|
474
479
|
|
|
475
480
|
|
|
476
481
|
@dataclass(order=False)
|
|
@@ -165,12 +165,13 @@ class BaseTest(unittest.TestCase):
|
|
|
165
165
|
|
|
166
166
|
def deploy_fake_kraken(
|
|
167
167
|
self,
|
|
168
|
+
name: str = "kraken-deployment",
|
|
168
169
|
namespace: str = "default",
|
|
169
170
|
random_label: str = None,
|
|
170
171
|
node_name: str = None,
|
|
171
172
|
):
|
|
172
173
|
template = self.template_to_pod(
|
|
173
|
-
|
|
174
|
+
name, namespace, random_label, node_name
|
|
174
175
|
)
|
|
175
176
|
self.apply_template(template)
|
|
176
177
|
|
|
@@ -582,6 +583,7 @@ class BaseTest(unittest.TestCase):
|
|
|
582
583
|
"start_timestamp": "2025-03-12T14:57:34.555878",
|
|
583
584
|
"end_timestamp": "2025-03-12T14:57:54.904352",
|
|
584
585
|
"duration": 20.348474,
|
|
586
|
+
"new_ip_address": ""
|
|
585
587
|
},
|
|
586
588
|
{
|
|
587
589
|
"node_name": "h27-r660",
|
|
@@ -592,6 +594,7 @@ class BaseTest(unittest.TestCase):
|
|
|
592
594
|
"start_timestamp": "2025-03-12T14:57:34.759105",
|
|
593
595
|
"end_timestamp": "2025-03-12T14:57:54.904352",
|
|
594
596
|
"duration": 20.145247,
|
|
597
|
+
"new_ip_address": ""
|
|
595
598
|
},
|
|
596
599
|
{
|
|
597
600
|
"node_name": "h10-r660",
|
|
@@ -602,6 +605,7 @@ class BaseTest(unittest.TestCase):
|
|
|
602
605
|
"start_timestamp": "2025-03-12T14:57:35.308957",
|
|
603
606
|
"end_timestamp": "2025-03-12T14:57:54.904352",
|
|
604
607
|
"duration": 19.595395,
|
|
608
|
+
"new_ip_address": "0.0.0.3"
|
|
605
609
|
},
|
|
606
610
|
],
|
|
607
611
|
"total_node_count": 3,
|
|
@@ -222,6 +222,12 @@ class TestKrknElasticModels(BaseTest):
|
|
|
222
222
|
self.assertEqual(
|
|
223
223
|
elastic_telemetry.virt_checks[0].ip_address, "0.0.0.0"
|
|
224
224
|
)
|
|
225
|
+
self.assertEqual(
|
|
226
|
+
elastic_telemetry.virt_checks[0].new_ip_address, ""
|
|
227
|
+
)
|
|
228
|
+
self.assertEqual(
|
|
229
|
+
elastic_telemetry.virt_checks[2].new_ip_address, "0.0.0.3"
|
|
230
|
+
)
|
|
225
231
|
self.assertEqual(
|
|
226
232
|
elastic_telemetry.virt_checks[0].namespace, "benchmark-runner"
|
|
227
233
|
)
|
|
@@ -82,7 +82,9 @@ class KrknKubernetesTestsCheck(BaseTest):
|
|
|
82
82
|
bad_namespace = "test-ns-" + self.get_random_string(10)
|
|
83
83
|
self.deploy_namespace(bad_namespace, [])
|
|
84
84
|
self.deploy_fake_kraken(
|
|
85
|
-
bad_namespace,
|
|
85
|
+
namespace=bad_namespace,
|
|
86
|
+
random_label=None,
|
|
87
|
+
node_name="do_not_exist",
|
|
86
88
|
)
|
|
87
89
|
status = self.lib_k8s.monitor_namespace(namespace=bad_namespace)
|
|
88
90
|
# sleeping for a while just in case
|
|
@@ -108,7 +110,9 @@ class KrknKubernetesTestsCheck(BaseTest):
|
|
|
108
110
|
bad_namespace = "test-ns-" + self.get_random_string(10)
|
|
109
111
|
self.deploy_namespace(bad_namespace, [])
|
|
110
112
|
self.deploy_fake_kraken(
|
|
111
|
-
bad_namespace,
|
|
113
|
+
namespace=bad_namespace,
|
|
114
|
+
random_label=None,
|
|
115
|
+
node_name="do_not_exist",
|
|
112
116
|
)
|
|
113
117
|
status = self.lib_k8s.monitor_component(
|
|
114
118
|
iteration=1, component_namespace=bad_namespace
|
|
@@ -67,6 +67,8 @@ class KrknKubernetesTestsList(BaseTest):
|
|
|
67
67
|
namespace = "test-lp" + self.get_random_string(10)
|
|
68
68
|
self.deploy_namespace(namespace, [])
|
|
69
69
|
self.deploy_fake_kraken(namespace=namespace)
|
|
70
|
+
|
|
71
|
+
# Test basic pod listing
|
|
70
72
|
pods = self.lib_k8s.list_pods(namespace=namespace)
|
|
71
73
|
self.assertTrue(len(pods) == 1)
|
|
72
74
|
self.assertIn("kraken-deployment", pods)
|
|
@@ -83,7 +85,38 @@ class KrknKubernetesTestsList(BaseTest):
|
|
|
83
85
|
namespace=namespace, field_selector="status.phase=Terminating"
|
|
84
86
|
)
|
|
85
87
|
self.assertTrue(len(pods) == 0)
|
|
88
|
+
|
|
89
|
+
# Test with exclude_label - should not exclude
|
|
90
|
+
# any pods (no matching labels)
|
|
91
|
+
pods = self.lib_k8s.list_pods(
|
|
92
|
+
namespace=namespace, exclude_label="skip=true"
|
|
93
|
+
)
|
|
94
|
+
self.assertTrue(len(pods) == 1)
|
|
95
|
+
self.assertIn("kraken-deployment", pods)
|
|
96
|
+
|
|
97
|
+
# Add a pod with the exclude label leveraging random_label will set
|
|
98
|
+
# random=skip
|
|
99
|
+
self.deploy_fake_kraken(
|
|
100
|
+
namespace=namespace, name="kraken-exclude", random_label="skip"
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
# Test listing all pods without exclusion
|
|
104
|
+
pods = self.lib_k8s.list_pods(namespace=namespace)
|
|
105
|
+
self.assertTrue(len(pods) == 2)
|
|
106
|
+
self.assertIn("kraken-deployment", pods)
|
|
107
|
+
self.assertIn("kraken-exclude", pods)
|
|
108
|
+
|
|
109
|
+
# Test with exclude_label - should exclude the labeled pod
|
|
110
|
+
pods = self.lib_k8s.list_pods(
|
|
111
|
+
namespace=namespace, exclude_label="random=skip"
|
|
112
|
+
)
|
|
113
|
+
self.assertTrue(len(pods) == 1)
|
|
114
|
+
self.assertIn("kraken-deployment", pods)
|
|
115
|
+
self.assertNotIn("kraken-exclude", pods)
|
|
116
|
+
|
|
117
|
+
# Clean up
|
|
86
118
|
self.pod_delete_queue.put(["kraken-deployment", namespace])
|
|
119
|
+
self.pod_delete_queue.put(["kraken-exclude", namespace])
|
|
87
120
|
|
|
88
121
|
def test_list_ready_nodes(self):
|
|
89
122
|
try:
|
|
@@ -140,6 +173,19 @@ class KrknKubernetesTestsList(BaseTest):
|
|
|
140
173
|
len(schedulable_nodes), len(schedulable_nodes_empty_selector)
|
|
141
174
|
)
|
|
142
175
|
|
|
176
|
+
def test_list_pod_network_interfaces(self):
|
|
177
|
+
namespace = "test-cid-" + self.get_random_string(10)
|
|
178
|
+
base_pod_name = "test-name-" + self.get_random_string(10)
|
|
179
|
+
self.deploy_namespace(namespace, [])
|
|
180
|
+
self.deploy_fedtools(namespace=namespace, name=base_pod_name)
|
|
181
|
+
self.wait_pod(base_pod_name, namespace)
|
|
182
|
+
|
|
183
|
+
nics = self.lib_k8s.list_pod_network_interfaces(
|
|
184
|
+
base_pod_name, namespace
|
|
185
|
+
)
|
|
186
|
+
self.assertGreater(len(nics), 0)
|
|
187
|
+
self.assertTrue("eth0" in nics)
|
|
188
|
+
|
|
143
189
|
|
|
144
190
|
if __name__ == "__main__":
|
|
145
191
|
unittest.main()
|
|
@@ -443,7 +443,10 @@ class TestKrknKubernetesPodsMonitor(BaseTest):
|
|
|
443
443
|
self.assertEqual(len(pods_status.recovered), 1)
|
|
444
444
|
self.assertEqual(pods_status.recovered[0].pod_rescheduling_time, 0)
|
|
445
445
|
self.assertGreater(pods_status.recovered[0].pod_readiness_time, 0)
|
|
446
|
-
self.assertEqual(
|
|
446
|
+
self.assertEqual(
|
|
447
|
+
pods_status.recovered[0].total_recovery_time,
|
|
448
|
+
pods_status.recovered[0].pod_readiness_time,
|
|
449
|
+
)
|
|
447
450
|
|
|
448
451
|
def test_monitor_stopping_earlier(self):
|
|
449
452
|
|
|
@@ -472,13 +472,12 @@ def get_ci_job_url():
|
|
|
472
472
|
prow_base_url = (
|
|
473
473
|
"https://prow.ci.openshift.org/view/gs/origin-ci-test/logs"
|
|
474
474
|
)
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
)
|
|
475
|
+
|
|
476
|
+
prow_pr_base_url = "https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_release" # NOQA
|
|
478
477
|
task_id = os.getenv("BUILD_ID")
|
|
479
478
|
job_id = os.getenv("JOB_NAME")
|
|
480
479
|
pull_number = os.getenv("PULL_NUMBER")
|
|
481
|
-
job_type=os.getenv("JOB_TYPE")
|
|
480
|
+
job_type = os.getenv("JOB_TYPE")
|
|
482
481
|
if job_type == "presubmit" and "pull" in task_id:
|
|
483
482
|
# Indicates a ci test triggered in PR against source code
|
|
484
483
|
job_type = "pull"
|
|
@@ -487,11 +486,11 @@ def get_ci_job_url():
|
|
|
487
486
|
job_type = "pull"
|
|
488
487
|
# Handle cases where a periodic job iw triggered via pull request
|
|
489
488
|
if job_type == "periodic" and pull_number:
|
|
490
|
-
|
|
491
|
-
if job_type == "pull"
|
|
492
|
-
build_url=f"{prow_pr_base_url}/{pull_number}/{task_id}/{job_id}"
|
|
489
|
+
job_type = "pull"
|
|
490
|
+
if job_type == "pull":
|
|
491
|
+
build_url = f"{prow_pr_base_url}/{pull_number}/{task_id}/{job_id}"
|
|
493
492
|
else:
|
|
494
|
-
build_url=f"{prow_base_url}/{job_id}/{task_id}"
|
|
493
|
+
build_url = f"{prow_base_url}/{job_id}/{task_id}"
|
|
495
494
|
|
|
496
495
|
elif os.getenv("BUILD_URL", ""):
|
|
497
496
|
# Jenkins build url
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/k8s/templates/service_hijacking_config_map.j2
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{krkn_lib-5.1.7 → krkn_lib-5.1.10}/src/krkn_lib/tests/test_krkn_kubernetes_pods_monitor_models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|