krkn-lib 5.1.13__tar.gz → 6.0.0__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.
Files changed (69) hide show
  1. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/PKG-INFO +4 -8
  2. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/pyproject.toml +3 -3
  3. krkn_lib-6.0.0/src/krkn_lib/aws_tests/__init__.py +1 -0
  4. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/elastic/krkn_elastic.py +3 -1
  5. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/k8s/krkn_kubernetes.py +72 -58
  6. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/k8s/pod_monitor/__init__.py +1 -2
  7. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/k8s/pod_monitor/pod_monitor.py +7 -5
  8. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/k8s/templates/snapshot.j2 +1 -1
  9. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/models/k8s/models.py +1 -1
  10. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/models/pod_monitor/models.py +2 -2
  11. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/ocp/krkn_openshift.py +4 -4
  12. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/prometheus/krkn_prometheus.py +1 -1
  13. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/telemetry/k8s/krkn_telemetry_kubernetes.py +1 -1
  14. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/telemetry/ocp/krkn_telemetry_openshift.py +1 -1
  15. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/base_test.py +4 -4
  16. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_elastic_models.py +2 -4
  17. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_kubernetes_check.py +3 -2
  18. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_kubernetes_create.py +5 -3
  19. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_kubernetes_delete.py +3 -2
  20. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_kubernetes_get.py +5 -4
  21. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_kubernetes_misc.py +3 -3
  22. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_kubernetes_pods_monitor_models.py +3 -4
  23. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_kubernetes_virt.py +91 -146
  24. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_openshift.py +7 -6
  25. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_telemetry_kubernetes.py +1 -3
  26. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_safe_logger.py +3 -1
  27. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_utils.py +4 -5
  28. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/utils/functions.py +4 -3
  29. krkn_lib-6.0.0/src/krkn_lib/version/version.py +6 -0
  30. krkn_lib-5.1.13/src/krkn_lib/aws_tests/__init__.py +0 -1
  31. krkn_lib-5.1.13/src/krkn_lib/version/version.py +0 -3
  32. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/LICENSE +0 -0
  33. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/README.md +0 -0
  34. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/__init__.py +0 -0
  35. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/aws_tests/test_krkn_telemetry_kubernetes.py +0 -0
  36. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/aws_tests/test_krkn_telemetry_openshift.py +0 -0
  37. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/elastic/__init__.py +0 -0
  38. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/k8s/__init__.py +0 -0
  39. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/k8s/templates/hog_pod.j2 +0 -0
  40. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/k8s/templates/node_exec_pod.j2 +0 -0
  41. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/k8s/templates/service_hijacking_config_map.j2 +0 -0
  42. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/k8s/templates/service_hijacking_pod.j2 +0 -0
  43. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/k8s/templates/syn_flood_pod.j2 +0 -0
  44. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/models/__init__.py +0 -0
  45. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/models/elastic/__init__.py +0 -0
  46. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/models/elastic/models.py +1 -1
  47. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/models/k8s/__init__.py +0 -0
  48. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/models/krkn/__init__.py +0 -0
  49. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/models/krkn/models.py +0 -0
  50. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/models/pod_monitor/__init__.py +0 -0
  51. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/models/telemetry/__init__.py +0 -0
  52. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/models/telemetry/models.py +0 -0
  53. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/ocp/__init__.py +0 -0
  54. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/prometheus/__init__.py +0 -0
  55. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/telemetry/__init__.py +0 -0
  56. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/telemetry/k8s/__init__.py +0 -0
  57. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/telemetry/ocp/__init__.py +0 -0
  58. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/__init__.py +0 -0
  59. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_elastic.py +0 -0
  60. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_kubernetes_exec.py +0 -0
  61. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_kubernetes_list.py +0 -0
  62. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_kubernetes_models.py +1 -1
  63. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_kubernetes_pods_monitor.py +0 -0
  64. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_prometheus.py +0 -0
  65. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_krkn_telemetry_models.py +0 -0
  66. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/tests/test_version.py +0 -0
  67. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/utils/__init__.py +0 -0
  68. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/utils/safe_logger.py +0 -0
  69. {krkn_lib-5.1.13 → krkn_lib-6.0.0}/src/krkn_lib/version/__init__.py +0 -0
@@ -1,19 +1,16 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.1
2
2
  Name: krkn-lib
3
- Version: 5.1.13
3
+ Version: 6.0.0
4
4
  Summary: Foundation library for Kraken
5
+ Home-page: https://github.com/redhat-chaos/krkn
5
6
  License: Apache-2.0
6
- License-File: LICENSE
7
7
  Author: Red Hat Chaos Team
8
- Requires-Python: >=3.9,<4.0
8
+ Requires-Python: >=3.11,<4.0
9
9
  Classifier: License :: OSI Approved :: Apache Software License
10
10
  Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.9
12
- Classifier: Programming Language :: Python :: 3.10
13
11
  Classifier: Programming Language :: Python :: 3.11
14
12
  Classifier: Programming Language :: Python :: 3.12
15
13
  Classifier: Programming Language :: Python :: 3.13
16
- Classifier: Programming Language :: Python :: 3.14
17
14
  Requires-Dist: PyYAML (==6.0.1)
18
15
  Requires-Dist: base64io (>=1.0.3,<2.0.0)
19
16
  Requires-Dist: coverage (>=7.6.12,<8.0.0)
@@ -32,7 +29,6 @@ Requires-Dist: sphinx-rtd-theme (>=1.2.2,<2.0.0)
32
29
  Requires-Dist: sphinxnotes-markdown-builder (>=0.5.6,<0.6.0)
33
30
  Requires-Dist: tzlocal (==5.1)
34
31
  Requires-Dist: wheel (>=0.42.0,<0.43.0)
35
- Project-URL: Homepage, https://github.com/redhat-chaos/krkn
36
32
  Description-Content-Type: text/markdown
37
33
 
38
34
  ![action](https://github.com/krkn-chaos/krkn-lib/actions/workflows/build.yaml/badge.svg)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "krkn-lib"
3
- version = "5.1.13"
3
+ version = "6.0.0"
4
4
  description = "Foundation library for Kraken"
5
5
  authors = ["Red Hat Chaos Team"]
6
6
  license = "Apache-2.0"
@@ -9,7 +9,7 @@ homepage = "https://github.com/redhat-chaos/krkn"
9
9
  #packages = [{include= "src/krkn_lib"}]
10
10
 
11
11
  [tool.poetry.dependencies]
12
- python = "^3.9"
12
+ python = "^3.11"
13
13
  kubernetes ="34.1.0"
14
14
  sphinxnotes-markdown-builder="^0.5.6"
15
15
  requests="^2.29.0"
@@ -35,7 +35,7 @@ boto3 = "^1.28.12"
35
35
 
36
36
  [tool.black]
37
37
  line-length = 79
38
- target-version = ['py37', 'py38']
38
+ target-version = ['py311', 'py312']
39
39
  include = '\.pyi?$'
40
40
  exclude = '''
41
41
  /(
@@ -0,0 +1 @@
1
+ from ..tests.base_test import * # NOQA
@@ -53,7 +53,9 @@ class KrknElastic:
53
53
  ssl_show_warn=False,
54
54
  )
55
55
  except Exception as e:
56
- self.safe_logger.error("Failed to initalize elasticsearch: %s" % e)
56
+ self.safe_logger.error(
57
+ "Failed to initialize elasticsearch: %s" % e
58
+ )
57
59
  raise e
58
60
 
59
61
  def upload_data_to_elasticsearch(self, item: dict, index: str = "") -> int:
@@ -159,10 +159,16 @@ class KrknKubernetes:
159
159
  os.environ["HTTP_PROXY"] = http_proxy
160
160
  self.client_config.proxy = http_proxy
161
161
  proxy_auth = urlparse(http_proxy)
162
- auth_string = proxy_auth.username + ":" + proxy_auth.password
163
- self.client_config.proxy_headers = urllib3.util.make_headers(
164
- proxy_basic_auth=auth_string
165
- )
162
+ if (
163
+ proxy_auth.username is not None
164
+ and proxy_auth.password is not None
165
+ ):
166
+ auth_string = (
167
+ proxy_auth.username + ":" + proxy_auth.password
168
+ )
169
+ self.client_config.proxy_headers = (
170
+ urllib3.util.make_headers(proxy_basic_auth=auth_string)
171
+ )
166
172
 
167
173
  client.Configuration.set_default(self.client_config)
168
174
  self.watch_resource = watch.Watch()
@@ -185,7 +191,7 @@ class KrknKubernetes:
185
191
  on other distributions
186
192
 
187
193
  *** IT MUST BE CONSIDERED A PRIVATE METHOD (CANNOT USE
188
- *** DOUBLE UNDERSCORE TO MANTAIN IT VISIBLE ON SUB-CLASSES)
194
+ *** DOUBLE UNDERSCORE TO MAINTAIN IT VISIBLE ON SUB-CLASSES)
189
195
  *** USED IN KrknKubernetes and KrknOpenshift TO AUTODETECT
190
196
  *** THE CLUSTER TYPE
191
197
 
@@ -237,7 +243,10 @@ class KrknKubernetes:
237
243
  minor_version = api_response.minor
238
244
  return major_version + "." + minor_version
239
245
  except ApiException as e:
240
- print("Exception when calling VersionApi->get_code: %s\n" % e)
246
+ logging.error(
247
+ "Exception when calling VersionApi->get_code: %s", str(e)
248
+ )
249
+ raise e
241
250
 
242
251
  def get_host(self) -> str:
243
252
  """
@@ -874,7 +883,7 @@ class KrknKubernetes:
874
883
  services.append(serv.metadata.name)
875
884
  return services
876
885
 
877
- # Outputs a json blob with informataion about all pods in a given namespace
886
+ # Outputs a json blob with information about all pods in a given namespace
878
887
  def get_all_pod_info(
879
888
  self,
880
889
  namespace: str = "default",
@@ -978,7 +987,7 @@ class KrknKubernetes:
978
987
  :param command: command parameters list or full command string
979
988
  if the command must be piped to `bash -c`
980
989
  (in that case `base_command` parameter
981
- must is omitted`)
990
+ must be omitted`)
982
991
  :param pod_name: pod where the command must be executed
983
992
  :param namespace: namespace of the pod
984
993
  :param container: container where the command
@@ -1038,7 +1047,7 @@ class KrknKubernetes:
1038
1047
  :param command: command parameters list or full command string
1039
1048
  if the command must be piped to `bash -c`
1040
1049
  (in that case `base_command` parameter
1041
- must is omitted`)
1050
+ must be omitted`)
1042
1051
  :param pod_name: pod where the command must be executed
1043
1052
  :param namespace: namespace of the pod
1044
1053
  :param container: container where the command
@@ -1093,7 +1102,7 @@ class KrknKubernetes:
1093
1102
  )
1094
1103
  except Exception as e:
1095
1104
  raise e
1096
- # apparently stream API doesn't rise an Exception
1105
+ # apparently stream API doesn't raise an Exception
1097
1106
  # if the command fails to be executed
1098
1107
 
1099
1108
  if "OCI runtime exec failed" in ret:
@@ -1486,7 +1495,9 @@ class KrknKubernetes:
1486
1495
  raise
1487
1496
  return vmis_list
1488
1497
 
1489
- def create_vmi(self, name: str, namespace: str, vm_name: str, vmi_body: dict) -> Optional[Dict]:
1498
+ def create_vmi(
1499
+ self, name: str, namespace: str, vm_name: str, vmi_body: dict
1500
+ ) -> Optional[Dict]:
1490
1501
  """
1491
1502
  Create a Virtual Machine Instance by name and namespace.
1492
1503
 
@@ -1501,13 +1512,14 @@ class KrknKubernetes:
1501
1512
  version="v1",
1502
1513
  namespace=namespace,
1503
1514
  plural="virtualmachineinstances",
1504
- name=name,
1505
1515
  body=vmi_body,
1506
1516
  )
1507
1517
  return vmi
1508
1518
  except ApiException as e:
1509
1519
  if e.status == 404:
1510
- logging.warning(f"VMI {name} not found in namespace {namespace}")
1520
+ logging.warning(
1521
+ f"VMI {name} not found in namespace {namespace}"
1522
+ )
1511
1523
  return None
1512
1524
  else:
1513
1525
  logging.error(f"Error creating VMI {name}: {e}")
@@ -1516,7 +1528,9 @@ class KrknKubernetes:
1516
1528
  logging.error(f"Unexpected error creating VMI {name}: {e}")
1517
1529
  raise
1518
1530
 
1519
- def patch_vm(self, name: str, namespace: str, vm_body: dict) -> Optional[Dict]:
1531
+ def patch_vm(
1532
+ self, name: str, namespace: str, vm_body: dict
1533
+ ) -> Optional[Dict]:
1520
1534
  """
1521
1535
  Patch a Virtual Machine by name and namespace.
1522
1536
 
@@ -1537,7 +1551,9 @@ class KrknKubernetes:
1537
1551
  return vmi
1538
1552
  except ApiException as e:
1539
1553
  if e.status == 404:
1540
- logging.warning(f"VM {name} not found in namespace {namespace}")
1554
+ logging.warning(
1555
+ f"VM {name} not found in namespace {namespace}"
1556
+ )
1541
1557
  return None
1542
1558
  else:
1543
1559
  logging.error(f"Error patching VM {name}: {e}")
@@ -1546,7 +1562,9 @@ class KrknKubernetes:
1546
1562
  logging.error(f"Unexpected error patching VM {name}: {e}")
1547
1563
  raise
1548
1564
 
1549
- def patch_vmi(self, name: str, namespace: str, vmi_body: dict) -> Optional[Dict]:
1565
+ def patch_vmi(
1566
+ self, name: str, namespace: str, vmi_body: dict
1567
+ ) -> Optional[Dict]:
1550
1568
  """
1551
1569
  Patch a Virtual Machine Instance by name and namespace.
1552
1570
 
@@ -1567,7 +1585,9 @@ class KrknKubernetes:
1567
1585
  return vmi
1568
1586
  except ApiException as e:
1569
1587
  if e.status == 404:
1570
- logging.warning(f"VMI {name} not found in namespace {namespace}")
1588
+ logging.warning(
1589
+ f"VMI {name} not found in namespace {namespace}"
1590
+ )
1571
1591
  return None
1572
1592
  else:
1573
1593
  logging.error(f"Error patching VMI {name}: {e}")
@@ -1613,7 +1633,7 @@ class KrknKubernetes:
1613
1633
  except Exception as e:
1614
1634
  logging.error(f"Unexpected error getting VM {regex_name}: {e}")
1615
1635
  raise
1616
-
1636
+
1617
1637
  def get_snapshot(self, name: str, namespace: str) -> Optional[Dict]:
1618
1638
  """
1619
1639
  Get a Snapshot by name and namespace.
@@ -1623,25 +1643,25 @@ class KrknKubernetes:
1623
1643
  :return: The Snapshot object if found, None otherwise
1624
1644
  """
1625
1645
  try:
1626
- vmi = self.custom_object_client.get_namespaced_custom_object(
1627
- group="kubevirt.io",
1628
- version="v1",
1646
+ snapshot = self.custom_object_client.get_namespaced_custom_object(
1647
+ group="snapshot.kubevirt.io",
1648
+ version="v1beta1",
1629
1649
  namespace=namespace,
1630
- plural="VirtualMachineSnapshot",
1650
+ plural="virtualmachinesnapshots",
1631
1651
  name=name,
1632
1652
  )
1633
- return vmi
1653
+ return snapshot
1634
1654
  except ApiException as e:
1635
1655
  if e.status == 404:
1636
1656
  logging.warning(
1637
- f"VMI {name} not found in namespace {namespace}"
1657
+ f"SnapShot {name} not found in namespace {namespace}"
1638
1658
  )
1639
1659
  return None
1640
1660
  else:
1641
- logging.error(f"Error getting VMI {name}: {e}")
1661
+ logging.error(f"Error getting snapshot {name}: {e}")
1642
1662
  raise
1643
1663
  except Exception as e:
1644
- logging.error(f"Unexpected error getting VMI {name}: {e}")
1664
+ logging.error(f"Unexpected error getting snapshot {name}: {e}")
1645
1665
  raise
1646
1666
 
1647
1667
  def create_snapshot(
@@ -1664,24 +1684,20 @@ class KrknKubernetes:
1664
1684
  name=name, namespace=namespace, vm_name=vm_name
1665
1685
  )
1666
1686
  )
1667
- vmi = self.custom_object_client.create_namespaced_custom_object(
1668
- group="kubevirt.io",
1669
- version="v1",
1670
- namespace=namespace,
1671
- plural="VirtualMachineSnapshot",
1672
- name=name,
1673
- body=ss_body,
1687
+ snapshot = (
1688
+ self.custom_object_client.create_namespaced_custom_object(
1689
+ group="snapshot.kubevirt.io",
1690
+ version="v1beta1",
1691
+ namespace=namespace,
1692
+ plural="virtualmachinesnapshots",
1693
+ body=ss_body,
1694
+ )
1674
1695
  )
1675
- return vmi
1696
+ return snapshot
1676
1697
  except ApiException as e:
1677
- if e.status == 404:
1678
- logging.warning(
1679
- f"Snapshot {name} not found in namespace {namespace}"
1680
- )
1681
- return None
1682
- else:
1683
- logging.error(f"Error creating Snapshot {name}: {e}")
1684
- raise
1698
+
1699
+ logging.error(f"Error creating Snapshot {name}: {e}")
1700
+ raise
1685
1701
  except Exception as e:
1686
1702
  logging.error(f"Unexpected error creating Snapshot {name}: {e}")
1687
1703
  raise
@@ -1766,20 +1782,18 @@ class KrknKubernetes:
1766
1782
 
1767
1783
  def delete_snapshot(self, snapshot_name: str, namespace: str):
1768
1784
  """Helper method to delete any snapshot created by the scenario."""
1769
- self.logger.info(f"Deleting snapshot '{self.snapshot_name}'...")
1785
+ logging.info(f"Deleting snapshot '{snapshot_name}'...")
1770
1786
  try:
1771
1787
  self.custom_object_client.delete_namespaced_custom_object(
1772
- group="kubevirt.io",
1773
- version="v1",
1788
+ group="snapshot.kubevirt.io",
1789
+ version="v1beta1",
1774
1790
  namespace=namespace,
1775
- plural="VirtualMachineSnapshot",
1791
+ plural="virtualmachinesnapshots",
1776
1792
  name=snapshot_name,
1777
1793
  )
1778
- self.logger.info(
1779
- f"Snapshot '{self.snapshot_name}' deleted successfully."
1780
- )
1794
+ logging.info(f"Snapshot '{snapshot_name}' deleted successfully.")
1781
1795
  except Exception as e:
1782
- self.logger.warning(
1796
+ logging.warning(
1783
1797
  "Failed to delete snapshot, "
1784
1798
  f"might have been already deleted: {e}"
1785
1799
  )
@@ -1806,6 +1820,7 @@ class KrknKubernetes:
1806
1820
  str(e),
1807
1821
  )
1808
1822
  raise e
1823
+ node_ready_status = "False"
1809
1824
  for condition in node_info.status.conditions:
1810
1825
  if condition.type == "KernelDeadlock":
1811
1826
  node_kerneldeadlock_status = condition.status
@@ -2379,7 +2394,7 @@ class KrknKubernetes:
2379
2394
  )
2380
2395
 
2381
2396
  path = f"/api/{api_version}/{resource.name}"
2382
- (data) = self.api_client.call_api(
2397
+ data = self.api_client.call_api(
2383
2398
  path,
2384
2399
  "GET",
2385
2400
  path_params,
@@ -2542,7 +2557,6 @@ class KrknKubernetes:
2542
2557
  else:
2543
2558
  node_info.nodes_type = "unknown"
2544
2559
 
2545
- node_info.architecture = node.status.node_info.architecture
2546
2560
  node_info.architecture = node.status.node_info.architecture
2547
2561
  node_info.kernel_version = node.status.node_info.kernel_version
2548
2562
  node_info.kubelet_version = (
@@ -2629,7 +2643,7 @@ class KrknKubernetes:
2629
2643
  sequential number of the archive assigned to the worker
2630
2644
  and the extension tar.b64
2631
2645
  :param queue: the queue from which the sequential
2632
- number wil be popped
2646
+ number will be popped
2633
2647
  :param queue_size: total size of the queue
2634
2648
  :param downloaded_file_list: the list of
2635
2649
  archive number and local filename downloaded
@@ -2751,7 +2765,7 @@ class KrknKubernetes:
2751
2765
  where the temporary archive
2752
2766
  will be stored (will be deleted once the download
2753
2767
  terminates, must be writable
2754
- and must have enough space to temporarly store the archive)
2768
+ and must have enough space to temporarily store the archive)
2755
2769
  :param target_path: the path that will be archived
2756
2770
  and downloaded from the container
2757
2771
  :param archive_files_prefix: prefix string that will be added
@@ -3014,7 +3028,7 @@ class KrknKubernetes:
3014
3028
  ["application/json"]
3015
3029
  )
3016
3030
  try:
3017
- (data) = self.api_client.call_api(
3031
+ data = self.api_client.call_api(
3018
3032
  path,
3019
3033
  "POST",
3020
3034
  path_params,
@@ -3255,7 +3269,7 @@ class KrknKubernetes:
3255
3269
  default 5000
3256
3270
  :param port_name: the port name if the Service is pointing to
3257
3271
  a string name instead of a port number
3258
- :param stats_route: overrides the defautl route where the stats
3272
+ :param stats_route: overrides the default route where the stats
3259
3273
  action will be mapped, change it only if you have a /stats
3260
3274
  route in your test_plan
3261
3275
  :return: a structure containing all the infos of the
@@ -3320,7 +3334,7 @@ class KrknKubernetes:
3320
3334
 
3321
3335
  def service_exists(self, service_name: str, namespace: str) -> bool:
3322
3336
  """
3323
- Checks wheter a kubernetes Service exist or not
3337
+ Checks whether a kubernetes Service exist or not
3324
3338
  :param service_name: the name of the service to check
3325
3339
  :param namespace: the namespace where the service should exist
3326
3340
  :return: True if the service exists, False if not
@@ -3433,7 +3447,7 @@ class KrknKubernetes:
3433
3447
  ["application/json"]
3434
3448
  )
3435
3449
  path = f"/api/v1/nodes/{node_name}/proxy/stats/summary"
3436
- (data) = self.api_client.call_api(
3450
+ data = self.api_client.call_api(
3437
3451
  path,
3438
3452
  "GET",
3439
3453
  path_params,
@@ -1,10 +1,9 @@
1
1
  from .pod_monitor import (
2
2
  select_and_monitor_by_label,
3
- select_and_monitor_by_namespace_pattern_and_label,
4
3
  select_and_monitor_by_name_pattern_and_namespace_pattern,
4
+ select_and_monitor_by_namespace_pattern_and_label,
5
5
  )
6
6
 
7
-
8
7
  __all__ = [
9
8
  "select_and_monitor_by_label",
10
9
  "select_and_monitor_by_namespace_pattern_and_label",
@@ -7,13 +7,13 @@ from concurrent.futures.thread import ThreadPoolExecutor
7
7
  from functools import partial
8
8
 
9
9
  from kubernetes import watch
10
- from kubernetes.client import V1Pod, CoreV1Api
10
+ from kubernetes.client import CoreV1Api, V1Pod
11
11
  from urllib3.exceptions import ProtocolError
12
12
 
13
13
  from krkn_lib.models.pod_monitor.models import (
14
- PodsSnapshot,
15
14
  MonitoredPod,
16
15
  PodEvent,
16
+ PodsSnapshot,
17
17
  PodStatus,
18
18
  )
19
19
 
@@ -80,7 +80,9 @@ def _monitor_pods(
80
80
  remain_timeout = max(1, int(max_timeout - elapsed))
81
81
  logging.info("remain timeout " + str(remain_timeout))
82
82
  if remain_timeout <= 0:
83
- logging.info("Maximum timeout reached, stopping monitoring")
83
+ logging.info(
84
+ "Maximum timeout reached, stopping monitoring"
85
+ )
84
86
  break
85
87
  logging.info(
86
88
  "Reconnecting watch stream"
@@ -132,7 +134,7 @@ def _monitor_pods(
132
134
  pod_event.status = PodStatus.ADDED
133
135
 
134
136
  if pod_event.status == PodStatus.ADDED:
135
-
137
+
136
138
  if pod_name not in snapshot.added_pods:
137
139
  snapshot.added_pods.append(pod_name)
138
140
  # in case a pod is respawn with the same name
@@ -194,7 +196,7 @@ def _monitor_pods(
194
196
  logging.error("Error in monitor pods: " + str(e))
195
197
  logging.error("Stack trace:\n%s", traceback.format_exc())
196
198
  raise Exception(e)
197
-
199
+
198
200
  retry_count += 1
199
201
 
200
202
  return snapshot
@@ -1,4 +1,4 @@
1
- apiVersion: snapshot.kubevirt.io/v1alpha1
1
+ apiVersion: snapshot.kubevirt.io/v1beta1
2
2
  kind: VirtualMachineSnapshot
3
3
  metadata:
4
4
  name: {{name}}
@@ -326,7 +326,7 @@ class AffectedNodeStatus:
326
326
  match_found = []
327
327
  for affected_node in self.affected_nodes:
328
328
  counter2 = counter + 1
329
- for aff_node2 in self.affected_nodes[counter + 1:]: # fmt: skip
329
+ for aff_node2 in self.affected_nodes[counter + 1 :]: # noqa: E203
330
330
  if affected_node.node_name == aff_node2.node_name:
331
331
  match_found.append(counter2)
332
332
  cur_node = self.affected_nodes[counter]
@@ -2,9 +2,9 @@ import json
2
2
  import time
3
3
  from dataclasses import dataclass
4
4
  from enum import Enum
5
- from typing import Optional, Any
5
+ from typing import Any, Optional
6
6
 
7
- from krkn_lib.models.k8s import PodsStatus, AffectedPod
7
+ from krkn_lib.models.k8s import AffectedPod, PodsStatus
8
8
 
9
9
 
10
10
  class PodStatus(Enum):
@@ -65,7 +65,7 @@ class KrknOpenshift(KrknKubernetes):
65
65
  )
66
66
 
67
67
  path = "/apis/config.openshift.io/v1/infrastructures/cluster"
68
- (data) = api_client.call_api(
68
+ data = api_client.call_api(
69
69
  path,
70
70
  "GET",
71
71
  path_params,
@@ -111,7 +111,7 @@ class KrknOpenshift(KrknKubernetes):
111
111
  )
112
112
 
113
113
  path = "/apis/config.openshift.io/v1/infrastructures/cluster"
114
- (data) = api_client.call_api(
114
+ data = api_client.call_api(
115
115
  path,
116
116
  "GET",
117
117
  path_params,
@@ -147,7 +147,7 @@ class KrknOpenshift(KrknKubernetes):
147
147
  )
148
148
 
149
149
  path = "/apis/config.openshift.io/v1/networks"
150
- (data) = api_client.call_api(
150
+ data = api_client.call_api(
151
151
  path,
152
152
  "GET",
153
153
  path_params,
@@ -440,7 +440,7 @@ class KrknOpenshift(KrknKubernetes):
440
440
  ["application/json"]
441
441
  )
442
442
 
443
- (data) = self.api_client.call_api(
443
+ data = self.api_client.call_api(
444
444
  path,
445
445
  "GET",
446
446
  path_params,
@@ -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,
@@ -425,7 +425,7 @@ class KrknTelemetryKubernetes:
425
425
  :param uploaded_file_list: uploaded file list shared between threads
426
426
  :param max_retries: maximum number of retries from config.yaml.
427
427
  If 0 will retry indefinitely.
428
- :param remote_file_prefix: the prefix that will given to the file
428
+ :param remote_file_prefix: the prefix that will be given to the file
429
429
  in the S3 bucket along with the progressive number
430
430
  (if is a multiple file archive)
431
431
  :param remote_file_extension: the extension of the remote
@@ -244,7 +244,7 @@ class KrknTelemetryOpenshift(KrknTelemetryKubernetes):
244
244
  )
245
245
 
246
246
  path = "/apis/kubevirt.io/v1/virtualmachineinstances"
247
- (data) = api_client.call_api(
247
+ data = api_client.call_api(
248
248
  path,
249
249
  "GET",
250
250
  path_params,
@@ -583,7 +583,7 @@ class BaseTest(unittest.TestCase):
583
583
  "start_timestamp": "2025-03-12T14:57:34.555878",
584
584
  "end_timestamp": "2025-03-12T14:57:54.904352",
585
585
  "duration": 20.348474,
586
- "new_ip_address": ""
586
+ "new_ip_address": "",
587
587
  },
588
588
  {
589
589
  "node_name": "h27-r660",
@@ -594,7 +594,7 @@ class BaseTest(unittest.TestCase):
594
594
  "start_timestamp": "2025-03-12T14:57:34.759105",
595
595
  "end_timestamp": "2025-03-12T14:57:54.904352",
596
596
  "duration": 20.145247,
597
- "new_ip_address": ""
597
+ "new_ip_address": "",
598
598
  },
599
599
  {
600
600
  "node_name": "h10-r660",
@@ -605,7 +605,7 @@ class BaseTest(unittest.TestCase):
605
605
  "start_timestamp": "2025-03-12T14:57:35.308957",
606
606
  "end_timestamp": "2025-03-12T14:57:54.904352",
607
607
  "duration": 19.595395,
608
- "new_ip_address": "0.0.0.3"
608
+ "new_ip_address": "0.0.0.3",
609
609
  },
610
610
  ],
611
611
  "post_virt_checks": [
@@ -618,7 +618,7 @@ class BaseTest(unittest.TestCase):
618
618
  "start_timestamp": "2025-03-12T14:57:55.904352",
619
619
  "end_timestamp": "2025-03-12T14:57:55.904352",
620
620
  "duration": 0.00,
621
- "new_ip_address": ""
621
+ "new_ip_address": "",
622
622
  }
623
623
  ],
624
624
  "total_node_count": 3,
@@ -1,9 +1,9 @@
1
+ import datetime
1
2
  import uuid
2
3
 
3
4
  from krkn_lib.models.elastic.models import ElasticChaosRunTelemetry
4
5
  from krkn_lib.models.telemetry import ChaosRunTelemetry
5
6
  from krkn_lib.tests import BaseTest
6
- import datetime
7
7
 
8
8
 
9
9
  class TestKrknElasticModels(BaseTest):
@@ -222,9 +222,7 @@ 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
- )
225
+ self.assertEqual(elastic_telemetry.virt_checks[0].new_ip_address, "")
228
226
  self.assertEqual(
229
227
  elastic_telemetry.virt_checks[2].new_ip_address, "0.0.0.3"
230
228
  )
@@ -2,10 +2,11 @@ import logging
2
2
  import time
3
3
  import unittest
4
4
 
5
- from krkn_lib.tests import BaseTest
6
- from krkn_lib.k8s import ApiRequestException
7
5
  from kubernetes.client import ApiException
8
6
 
7
+ from krkn_lib.k8s import ApiRequestException
8
+ from krkn_lib.tests import BaseTest
9
+
9
10
 
10
11
  class KrknKubernetesTestsCheck(BaseTest):
11
12
  def test_check_namespaces(self):
@@ -1,10 +1,12 @@
1
1
  import logging
2
+ import tempfile
2
3
  import unittest
4
+
3
5
  import yaml
4
- import tempfile
5
- from krkn_lib.tests import BaseTest
6
- from kubernetes.client import ApiException
7
6
  from jinja2 import Environment, FileSystemLoader
7
+ from kubernetes.client import ApiException
8
+
9
+ from krkn_lib.tests import BaseTest
8
10
 
9
11
 
10
12
  class KrknKubernetesTestsCreate(BaseTest):
@@ -2,10 +2,11 @@ import logging
2
2
  import time
3
3
  import unittest
4
4
 
5
- from krkn_lib.tests import BaseTest
6
- from krkn_lib.k8s import ApiRequestException
7
5
  from kubernetes.client import ApiException
8
6
 
7
+ from krkn_lib.k8s import ApiRequestException
8
+ from krkn_lib.tests import BaseTest
9
+
9
10
 
10
11
  class KrknKubernetesTestsDelete(BaseTest):
11
12
  def test_delete_namespace(self):