krkn-lib 5.0.2__py3-none-any.whl → 5.1.0__py3-none-any.whl

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.
@@ -1,7 +1,6 @@
1
1
  import datetime
2
2
 
3
3
  from elasticsearch_dsl import (
4
- Boolean,
5
4
  Date,
6
5
  Document,
7
6
  Float,
@@ -10,6 +9,7 @@ from elasticsearch_dsl import (
10
9
  Keyword,
11
10
  Nested,
12
11
  Text,
12
+ Boolean,
13
13
  )
14
14
 
15
15
  from krkn_lib.models.telemetry import ChaosRunTelemetry
@@ -77,6 +77,10 @@ class Container:
77
77
  """
78
78
  Container Ready status
79
79
  """
80
+ containerId: str = ""
81
+ """
82
+ Container Id
83
+ """
80
84
 
81
85
 
82
86
  @dataclass(frozen=True, order=False)
@@ -50,7 +50,7 @@ class KrknPrometheus:
50
50
  query: str,
51
51
  start_time: datetime = None,
52
52
  end_time: datetime = None,
53
- granularity: int = 10,
53
+ granularity: int = 10
54
54
  ) -> list[dict[str:any]]:
55
55
  """
56
56
  Executes a query to the Prometheus API in PromQL languag,
@@ -100,12 +100,10 @@ class KrknTelemetryKubernetes:
100
100
  node_infos, taints = self.__kubecli.get_nodes_infos()
101
101
  chaos_telemetry.node_summary_infos = node_infos
102
102
  chaos_telemetry.cluster_version = self.__kubecli.get_version()
103
-
104
103
  chaos_telemetry.major_version = chaos_telemetry.cluster_version[1:5]
105
104
  chaos_telemetry.node_taints = taints
106
105
  for info in node_infos:
107
106
  chaos_telemetry.total_node_count += info.count
108
-
109
107
  chaos_telemetry.job_status = True
110
108
  for scenario in chaos_telemetry.scenarios:
111
109
  if scenario.exit_status > 0:
@@ -491,6 +491,13 @@ class BaseTest(unittest.TestCase):
491
491
  thread.daemon = True
492
492
  thread.start()
493
493
 
494
+ def background_delete_ns(self, namespace: str):
495
+ thread = threading.Thread(
496
+ target=self.lib_k8s.delete_namespace, args=(namespace,)
497
+ )
498
+ thread.daemon = True
499
+ thread.start()
500
+
494
501
  def get_ChaosRunTelemetry_json(self, run_uuid: str) -> dict:
495
502
  example_data = {
496
503
  "scenarios": [
@@ -1,9 +1,9 @@
1
- import datetime
2
1
  import uuid
3
2
 
4
3
  from krkn_lib.models.elastic.models import ElasticChaosRunTelemetry
5
4
  from krkn_lib.models.telemetry import ChaosRunTelemetry
6
5
  from krkn_lib.tests import BaseTest
6
+ import datetime
7
7
 
8
8
 
9
9
  class TestKrknElasticModels(BaseTest):
@@ -2,10 +2,9 @@ import logging
2
2
  import time
3
3
  import unittest
4
4
 
5
- from kubernetes.client import ApiException
6
-
7
- from krkn_lib.k8s import ApiRequestException
8
5
  from krkn_lib.tests import BaseTest
6
+ from krkn_lib.k8s import ApiRequestException
7
+ from kubernetes.client import ApiException
9
8
 
10
9
 
11
10
  class KrknKubernetesTestsCheck(BaseTest):
@@ -1,12 +1,10 @@
1
1
  import logging
2
- import tempfile
3
2
  import unittest
4
-
5
3
  import yaml
6
- from jinja2 import Environment, FileSystemLoader
7
- from kubernetes.client import ApiException
8
-
4
+ import tempfile
9
5
  from krkn_lib.tests import BaseTest
6
+ from kubernetes.client import ApiException
7
+ from jinja2 import Environment, FileSystemLoader
10
8
 
11
9
 
12
10
  class KrknKubernetesTestsCreate(BaseTest):
@@ -2,10 +2,9 @@ import logging
2
2
  import time
3
3
  import unittest
4
4
 
5
- from kubernetes.client import ApiException
6
-
7
- from krkn_lib.k8s import ApiRequestException
8
5
  from krkn_lib.tests import BaseTest
6
+ from krkn_lib.k8s import ApiRequestException
7
+ from kubernetes.client import ApiException
9
8
 
10
9
 
11
10
  class KrknKubernetesTestsDelete(BaseTest):
@@ -1,16 +1,15 @@
1
1
  import logging
2
- import os
3
2
  import random
4
3
  import re
5
4
  import time
5
+ import os
6
6
  import unittest
7
7
 
8
- from kubernetes import config
9
- from kubernetes.client import ApiException
10
-
11
- from krkn_lib.k8s import ApiRequestException, KrknKubernetes
12
8
  from krkn_lib.models.telemetry import ChaosRunTelemetry
13
9
  from krkn_lib.tests import BaseTest
10
+ from kubernetes import config
11
+ from krkn_lib.k8s import ApiRequestException, KrknKubernetes
12
+ from kubernetes.client import ApiException
14
13
 
15
14
 
16
15
  class KrknKubernetesTestsGet(BaseTest):
@@ -55,8 +54,22 @@ class KrknKubernetesTestsGet(BaseTest):
55
54
  # test with label_selector filter
56
55
  results = self.lib_k8s.get_all_pods("random=%s" % random_label)
57
56
  self.assertTrue(len(results) == 1)
57
+ self.assertEqual(results[0][1], namespace)
58
58
  self.assertEqual(results[0][0], "kraken-deployment")
59
+ self.wait_pod("kraken-deployment", namespace)
60
+ results = self.lib_k8s.get_all_pods(
61
+ "random=%s" % random_label, field_selector="status.phase=Running"
62
+ )
63
+ print("resuls" + str(results))
64
+ self.assertTrue(len(results) == 1)
59
65
  self.assertEqual(results[0][1], namespace)
66
+ self.assertEqual(results[0][0], "kraken-deployment")
67
+
68
+ results = self.lib_k8s.get_all_pods(
69
+ field_selector="status.phase=Running"
70
+ )
71
+ self.assertTrue(len(results) >= 1)
72
+
60
73
  self.pod_delete_queue.put(["kraken-deployment", namespace])
61
74
 
62
75
  def test_get_pod_log(self):
@@ -135,6 +148,9 @@ class KrknKubernetesTestsGet(BaseTest):
135
148
  self.assertIsNotNone(info.podIP)
136
149
  self.assertIsNotNone(info.nodeName)
137
150
  self.assertIsNotNone(info.containers)
151
+
152
+ info = self.lib_k8s.get_pod_info("test1", namespace)
153
+ self.assertIsNone(info)
138
154
  except Exception as e:
139
155
  logging.error("test raised exception {0}".format(str(e)))
140
156
  self.assertTrue(False)
@@ -247,6 +263,89 @@ class KrknKubernetesTestsGet(BaseTest):
247
263
  with self.assertRaises(Exception):
248
264
  ip_address = self.lib_k8s.get_node_ip("not_existing")
249
265
 
266
+ def test_get_pod_container_id(self):
267
+ namespace = "test-cid-" + self.get_random_string(10)
268
+ name = "test-name-" + self.get_random_string(10)
269
+ self.deploy_namespace(namespace, [])
270
+ self.deploy_fedtools(namespace=namespace, name=name)
271
+ self.wait_pod(name, namespace)
272
+ container_ids = self.lib_k8s.get_container_ids(
273
+ pod_name=name, namespace=namespace
274
+ )
275
+ self.assertTrue(len(container_ids) > 0)
276
+ container_ids = self.lib_k8s.get_container_ids(
277
+ pod_name="do_not_exists", namespace="do_not_exists"
278
+ )
279
+ self.assertTrue(len(container_ids) == 0)
280
+
281
+ def test_get_pod_pids(self):
282
+ namespace = "test-cid-" + self.get_random_string(10)
283
+ base_pod_name = "test-name-" + self.get_random_string(10)
284
+ target_pod_name = "test-name-" + self.get_random_string(10)
285
+
286
+ self.deploy_namespace(namespace, [])
287
+ self.deploy_fedtools(namespace=namespace, name=base_pod_name)
288
+ self.deploy_fedtools(namespace=namespace, name=target_pod_name)
289
+
290
+ self.wait_pod(base_pod_name, namespace)
291
+ self.wait_pod(target_pod_name, namespace)
292
+
293
+ container_id = self.lib_k8s.get_container_ids(
294
+ pod_name=target_pod_name, namespace=namespace
295
+ )
296
+ pids = self.lib_k8s.get_pod_pids(
297
+ base_pod_name,
298
+ namespace,
299
+ base_pod_name,
300
+ target_pod_name,
301
+ namespace,
302
+ container_id[0],
303
+ )
304
+
305
+ self.assertIsNotNone(pids)
306
+ self.assertTrue(isinstance(pids, list))
307
+ self.assertTrue(len(pids) > 0)
308
+
309
+ pids = self.lib_k8s.get_pod_pids(
310
+ base_pod_name,
311
+ namespace,
312
+ base_pod_name,
313
+ target_pod_name,
314
+ namespace,
315
+ "does_not_exist",
316
+ )
317
+ self.assertIsNone(pids)
318
+
319
+ with self.assertRaises(Exception):
320
+ _ = self.lib_k8s.get_pod_pids(
321
+ "does_not_exist",
322
+ namespace,
323
+ base_pod_name,
324
+ target_pod_name,
325
+ namespace,
326
+ container_id[0],
327
+ )
328
+
329
+ with self.assertRaises(Exception):
330
+ _ = self.lib_k8s.get_pod_pids(
331
+ base_pod_name,
332
+ namespace,
333
+ base_pod_name,
334
+ "does_not_exist",
335
+ namespace,
336
+ container_id[0],
337
+ )
338
+
339
+ with self.assertRaises(Exception):
340
+ _ = self.lib_k8s.get_pod_pids(
341
+ base_pod_name,
342
+ namespace,
343
+ "does_not_exist",
344
+ target_pod_name,
345
+ namespace,
346
+ container_id[0],
347
+ )
348
+
250
349
 
251
350
  if __name__ == "__main__":
252
351
  unittest.main()
@@ -70,6 +70,19 @@ class KrknKubernetesTestsList(BaseTest):
70
70
  pods = self.lib_k8s.list_pods(namespace=namespace)
71
71
  self.assertTrue(len(pods) == 1)
72
72
  self.assertIn("kraken-deployment", pods)
73
+
74
+ self.wait_pod(pods[0], namespace)
75
+
76
+ pods = self.lib_k8s.list_pods(
77
+ namespace=namespace, field_selector="status.phase=Running"
78
+ )
79
+ self.assertTrue(len(pods) == 1)
80
+ self.assertIn("kraken-deployment", pods)
81
+
82
+ pods = self.lib_k8s.list_pods(
83
+ namespace=namespace, field_selector="status.phase=Terminating"
84
+ )
85
+ self.assertTrue(len(pods) == 0)
73
86
  self.pod_delete_queue.put(["kraken-deployment", namespace])
74
87
 
75
88
  def test_list_ready_nodes(self):
@@ -6,11 +6,11 @@ import time
6
6
  import unittest
7
7
 
8
8
  import yaml
9
- from kubernetes.client import ApiException
10
- from tzlocal import get_localzone
11
9
 
12
10
  from krkn_lib.models.krkn import HogConfig, HogType
13
11
  from krkn_lib.tests import BaseTest
12
+ from tzlocal import get_localzone
13
+ from kubernetes.client import ApiException
14
14
 
15
15
 
16
16
  class KrknKubernetesTestsMisc(BaseTest):
@@ -1,10 +1,10 @@
1
+ from krkn_lib.models.krkn import HogConfig, HogType
1
2
  from krkn_lib.models.k8s import (
2
3
  AffectedNode,
3
4
  AffectedNodeStatus,
4
5
  AffectedPod,
5
6
  PodsStatus,
6
7
  )
7
- from krkn_lib.models.krkn import HogConfig, HogType
8
8
  from krkn_lib.tests import BaseTest
9
9
 
10
10