openshift-python-wrapper 4.11.61__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.
Files changed (132) hide show
  1. ocp_resources/__init__.py +0 -0
  2. ocp_resources/api_service.py +9 -0
  3. ocp_resources/backup.py +52 -0
  4. ocp_resources/benchmark.py +92 -0
  5. ocp_resources/catalog_source.py +63 -0
  6. ocp_resources/catalog_source_config.py +86 -0
  7. ocp_resources/cdi.py +13 -0
  8. ocp_resources/cdi_config.py +52 -0
  9. ocp_resources/chaos_engine.py +30 -0
  10. ocp_resources/chaos_result.py +11 -0
  11. ocp_resources/cluster_operator.py +5 -0
  12. ocp_resources/cluster_role.py +70 -0
  13. ocp_resources/cluster_role_binding.py +36 -0
  14. ocp_resources/cluster_service_version.py +8 -0
  15. ocp_resources/cluster_version.py +5 -0
  16. ocp_resources/configmap.py +37 -0
  17. ocp_resources/console_cli_download.py +9 -0
  18. ocp_resources/console_plugin.py +9 -0
  19. ocp_resources/console_quick_start.py +9 -0
  20. ocp_resources/constants.py +26 -0
  21. ocp_resources/csidriver.py +9 -0
  22. ocp_resources/custom_resource_definition.py +5 -0
  23. ocp_resources/daemonset.py +61 -0
  24. ocp_resources/data_import_cron.py +100 -0
  25. ocp_resources/data_source.py +59 -0
  26. ocp_resources/datavolume.py +275 -0
  27. ocp_resources/deployment.py +65 -0
  28. ocp_resources/destination_rule.py +11 -0
  29. ocp_resources/event.py +114 -0
  30. ocp_resources/forklift_controller.py +10 -0
  31. ocp_resources/gateway.py +11 -0
  32. ocp_resources/hook.py +52 -0
  33. ocp_resources/host.py +64 -0
  34. ocp_resources/hostpath_provisioner.py +50 -0
  35. ocp_resources/hyperconverged.py +43 -0
  36. ocp_resources/image.py +9 -0
  37. ocp_resources/image_content_source_policy.py +9 -0
  38. ocp_resources/image_stream.py +48 -0
  39. ocp_resources/imagestreamtag.py +9 -0
  40. ocp_resources/infrastructure.py +18 -0
  41. ocp_resources/installplan.py +8 -0
  42. ocp_resources/job.py +65 -0
  43. ocp_resources/kube_descheduler.py +65 -0
  44. ocp_resources/kubevirt.py +5 -0
  45. ocp_resources/kubevirt_common_templates_bundle.py +5 -0
  46. ocp_resources/kubevirt_metrics_aggregation.py +5 -0
  47. ocp_resources/kubevirt_node_labeller_bundle.py +5 -0
  48. ocp_resources/kubevirt_template_validaotr.py +5 -0
  49. ocp_resources/logger.py +76 -0
  50. ocp_resources/machine.py +50 -0
  51. ocp_resources/machine_config.py +5 -0
  52. ocp_resources/machine_config_pool.py +9 -0
  53. ocp_resources/machine_health_check.py +76 -0
  54. ocp_resources/machine_set.py +189 -0
  55. ocp_resources/migration.py +63 -0
  56. ocp_resources/migration_policy.py +66 -0
  57. ocp_resources/mtv.py +171 -0
  58. ocp_resources/mutating_webhook_config.py +9 -0
  59. ocp_resources/namespace.py +40 -0
  60. ocp_resources/network.py +5 -0
  61. ocp_resources/network_addons_config.py +9 -0
  62. ocp_resources/network_attachment_definition.py +24 -0
  63. ocp_resources/network_map.py +64 -0
  64. ocp_resources/network_policy.py +9 -0
  65. ocp_resources/nmstate.py +9 -0
  66. ocp_resources/node.py +41 -0
  67. ocp_resources/node_health_check.py +10 -0
  68. ocp_resources/node_maintenance.py +40 -0
  69. ocp_resources/node_network_configuration_enactment.py +20 -0
  70. ocp_resources/node_network_configuration_policy.py +472 -0
  71. ocp_resources/node_network_state.py +121 -0
  72. ocp_resources/oauth.py +9 -0
  73. ocp_resources/operator_condition.py +5 -0
  74. ocp_resources/operator_group.py +37 -0
  75. ocp_resources/operator_hub.py +5 -0
  76. ocp_resources/operator_source.py +50 -0
  77. ocp_resources/package_manifest.py +5 -0
  78. ocp_resources/peer_authentication.py +18 -0
  79. ocp_resources/persistent_volume.py +27 -0
  80. ocp_resources/persistent_volume_claim.py +103 -0
  81. ocp_resources/plan.py +143 -0
  82. ocp_resources/pod.py +175 -0
  83. ocp_resources/pod_disruption_budget.py +53 -0
  84. ocp_resources/priority_class.py +48 -0
  85. ocp_resources/project.py +60 -0
  86. ocp_resources/prometheus.py +9 -0
  87. ocp_resources/prometheus_rule.py +9 -0
  88. ocp_resources/provider.py +59 -0
  89. ocp_resources/replicaset.py +11 -0
  90. ocp_resources/resource.py +1383 -0
  91. ocp_resources/restore.py +52 -0
  92. ocp_resources/role.py +11 -0
  93. ocp_resources/role_binding.py +67 -0
  94. ocp_resources/route.py +76 -0
  95. ocp_resources/secret.py +75 -0
  96. ocp_resources/security_context_constraints.py +9 -0
  97. ocp_resources/service.py +16 -0
  98. ocp_resources/service_account.py +9 -0
  99. ocp_resources/service_mesh_control_plane.py +11 -0
  100. ocp_resources/service_mesh_member_roll.py +14 -0
  101. ocp_resources/service_monitor.py +9 -0
  102. ocp_resources/sriov_network.py +54 -0
  103. ocp_resources/sriov_network_node_policy.py +67 -0
  104. ocp_resources/sriov_network_node_state.py +44 -0
  105. ocp_resources/ssp.py +9 -0
  106. ocp_resources/storage_class.py +47 -0
  107. ocp_resources/storage_map.py +67 -0
  108. ocp_resources/storage_profile.py +7 -0
  109. ocp_resources/subscription.py +66 -0
  110. ocp_resources/tekton_tasks.py +9 -0
  111. ocp_resources/template.py +74 -0
  112. ocp_resources/upload_token_request.py +39 -0
  113. ocp_resources/utils.py +278 -0
  114. ocp_resources/validating_webhook_config.py +9 -0
  115. ocp_resources/virtual_machine.py +177 -0
  116. ocp_resources/virtual_machine_Instance_replica_set.py +9 -0
  117. ocp_resources/virtual_machine_cluster_flavor.py +5 -0
  118. ocp_resources/virtual_machine_flavor.py +5 -0
  119. ocp_resources/virtual_machine_import.py +307 -0
  120. ocp_resources/virtual_machine_instance.py +322 -0
  121. ocp_resources/virtual_machine_instance_migration.py +36 -0
  122. ocp_resources/virtual_machine_instance_preset.py +9 -0
  123. ocp_resources/virtual_machine_restore.py +99 -0
  124. ocp_resources/virtual_machine_snapshot.py +96 -0
  125. ocp_resources/virtual_service.py +11 -0
  126. ocp_resources/vm_import_config.py +9 -0
  127. ocp_resources/volume_snapshot.py +9 -0
  128. ocp_resources/volume_snapshot_class.py +9 -0
  129. openshift_python_wrapper-4.11.61.dist-info/LICENSE +201 -0
  130. openshift_python_wrapper-4.11.61.dist-info/METADATA +188 -0
  131. openshift_python_wrapper-4.11.61.dist-info/RECORD +132 -0
  132. openshift_python_wrapper-4.11.61.dist-info/WHEEL +4 -0
@@ -0,0 +1,52 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from ocp_resources.resource import NamespacedResource
4
+
5
+
6
+ class Restore(NamespacedResource):
7
+ """
8
+ Restore object.
9
+ """
10
+
11
+ api_group = NamespacedResource.ApiGroup.VELERO_IO
12
+
13
+ def __init__(
14
+ self,
15
+ name=None,
16
+ namespace=None,
17
+ included_namespaces=None,
18
+ backup_name=None,
19
+ client=None,
20
+ teardown=False,
21
+ privileged_client=None,
22
+ yaml_file=None,
23
+ **kwargs,
24
+ ):
25
+ if not backup_name:
26
+ raise ValueError("backup_name can't be None")
27
+
28
+ super().__init__(
29
+ name=name,
30
+ namespace=namespace,
31
+ client=client,
32
+ teardown=teardown,
33
+ privileged_client=privileged_client,
34
+ yaml_file=yaml_file,
35
+ **kwargs,
36
+ )
37
+
38
+ self.included_namespaces = included_namespaces
39
+ self.backup_name = backup_name
40
+
41
+ def to_dict(self):
42
+ super().to_dict()
43
+ if not self.yaml_file:
44
+ self.res.update(
45
+ {
46
+ "spec": {
47
+ "backupName": self.backup_name,
48
+ }
49
+ }
50
+ )
51
+ if self.included_namespaces:
52
+ self.res["spec"]["includedNamespaces"] = self.included_namespaces
ocp_resources/role.py ADDED
@@ -0,0 +1,11 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from ocp_resources.resource import NamespacedResource
4
+
5
+
6
+ class Role(NamespacedResource):
7
+ """
8
+ Role object.
9
+ """
10
+
11
+ api_group = NamespacedResource.ApiGroup.RBAC_AUTHORIZATION_K8S_IO
@@ -0,0 +1,67 @@
1
+ # -*- coding: utf-8 -*-
2
+ from ocp_resources.constants import TIMEOUT_4MINUTES
3
+ from ocp_resources.resource import NamespacedResource
4
+
5
+
6
+ class RoleBinding(NamespacedResource):
7
+ """
8
+ RoleBinding object
9
+ """
10
+
11
+ api_group = NamespacedResource.ApiGroup.RBAC_AUTHORIZATION_K8S_IO
12
+
13
+ def __init__(
14
+ self,
15
+ name=None,
16
+ namespace=None,
17
+ client=None,
18
+ subjects_kind=None,
19
+ subjects_name=None,
20
+ subjects_namespace=None,
21
+ subjects_api_group=None,
22
+ role_ref_kind=None,
23
+ role_ref_name=None,
24
+ teardown=True,
25
+ yaml_file=None,
26
+ delete_timeout=TIMEOUT_4MINUTES,
27
+ **kwargs,
28
+ ):
29
+ super().__init__(
30
+ name=name,
31
+ namespace=namespace,
32
+ client=client,
33
+ teardown=teardown,
34
+ yaml_file=yaml_file,
35
+ delete_timeout=delete_timeout,
36
+ **kwargs,
37
+ )
38
+ self.subjects_kind = subjects_kind
39
+ self.subjects_name = subjects_name
40
+ self.subjects_namespace = subjects_namespace
41
+ self.subjects_api_group = subjects_api_group
42
+ self.role_ref_kind = role_ref_kind
43
+ self.role_ref_name = role_ref_name
44
+
45
+ def to_dict(self):
46
+ super().to_dict()
47
+ if not self.yaml_file:
48
+ subjects = {}
49
+ if self.subjects_kind:
50
+ subjects["kind"] = self.subjects_kind
51
+ if self.subjects_name:
52
+ subjects["name"] = self.subjects_name
53
+ if self.subjects_namespace:
54
+ subjects["namespace"] = self.subjects_namespace
55
+ if self.subjects_api_group:
56
+ subjects["apiGroup"] = self.subjects_api_group
57
+ if subjects:
58
+ self.res["subjects"] = [subjects]
59
+
60
+ roleref = {}
61
+ if self.role_ref_kind:
62
+ roleref["kind"] = self.role_ref_kind
63
+ if self.role_ref_name:
64
+ roleref["name"] = self.role_ref_name
65
+ if roleref:
66
+ roleref["apiGroup"] = self.api_group
67
+ self.res["roleRef"] = roleref
ocp_resources/route.py ADDED
@@ -0,0 +1,76 @@
1
+ # -*- coding: utf-8 -*-
2
+ from ocp_resources.constants import TIMEOUT_4MINUTES
3
+ from ocp_resources.resource import NamespacedResource
4
+
5
+
6
+ class Route(NamespacedResource):
7
+ """
8
+ OpenShift Route object.
9
+ """
10
+
11
+ api_group = NamespacedResource.ApiGroup.ROUTE_OPENSHIFT_IO
12
+
13
+ def __init__(
14
+ self,
15
+ name=None,
16
+ namespace=None,
17
+ client=None,
18
+ service=None,
19
+ destination_ca_cert=None,
20
+ teardown=True,
21
+ yaml_file=None,
22
+ delete_timeout=TIMEOUT_4MINUTES,
23
+ **kwargs,
24
+ ):
25
+ super().__init__(
26
+ name=name,
27
+ namespace=namespace,
28
+ client=client,
29
+ teardown=teardown,
30
+ yaml_file=yaml_file,
31
+ delete_timeout=delete_timeout,
32
+ **kwargs,
33
+ )
34
+ self.service = service
35
+ self.destination_ca_cert = destination_ca_cert
36
+
37
+ def to_dict(self):
38
+ super().to_dict()
39
+ if not self.yaml_file:
40
+ if self.service:
41
+ self.res.update(
42
+ {"spec": {"to": {"kind": "Service", "name": self.service}}}
43
+ )
44
+ if self.destination_ca_cert:
45
+ self.res["spec"]["tls"] = {
46
+ "destinationCACertificate": self.destination_ca_cert,
47
+ "termination": "reencrypt",
48
+ }
49
+
50
+ @property
51
+ def exposed_service(self):
52
+ """
53
+ returns the service the route is exposing
54
+ """
55
+ return self.instance.spec.to.name
56
+
57
+ @property
58
+ def host(self):
59
+ """
60
+ returns hostname that is exposing the service
61
+ """
62
+ return self.instance.spec.host
63
+
64
+ @property
65
+ def ca_cert(self):
66
+ """
67
+ returns destinationCACertificate
68
+ """
69
+ return self.instance.spec.tls.destinationCACertificate
70
+
71
+ @property
72
+ def termination(self):
73
+ """
74
+ returns a secured route using re-encrypt termination
75
+ """
76
+ return self.instance.spec.tls.termination
@@ -0,0 +1,75 @@
1
+ from ocp_resources.constants import TIMEOUT_4MINUTES
2
+ from ocp_resources.resource import NamespacedResource
3
+
4
+
5
+ class Secret(NamespacedResource):
6
+ """
7
+ Secret object.
8
+ """
9
+
10
+ api_version = NamespacedResource.ApiVersion.V1
11
+
12
+ def __init__(
13
+ self,
14
+ name=None,
15
+ namespace=None,
16
+ client=None,
17
+ accesskeyid=None,
18
+ secretkey=None,
19
+ htpasswd=None,
20
+ teardown=True,
21
+ data_dict=None,
22
+ string_data=None,
23
+ yaml_file=None,
24
+ delete_timeout=TIMEOUT_4MINUTES,
25
+ type=None,
26
+ **kwargs,
27
+ ):
28
+ super().__init__(
29
+ name=name,
30
+ namespace=namespace,
31
+ client=client,
32
+ teardown=teardown,
33
+ yaml_file=yaml_file,
34
+ delete_timeout=delete_timeout,
35
+ **kwargs,
36
+ )
37
+ self.accesskeyid = accesskeyid
38
+ self.secretkey = secretkey
39
+ self.htpasswd = htpasswd
40
+ self.data_dict = data_dict
41
+ self.string_data = string_data
42
+ self.type = type
43
+
44
+ def to_dict(self):
45
+ super().to_dict()
46
+ if not self.yaml_file:
47
+ if self.accesskeyid:
48
+ self.res.update(
49
+ {
50
+ "data": {
51
+ "accessKeyId": self.accesskeyid,
52
+ "secretKey": self.secretkey,
53
+ }
54
+ }
55
+ )
56
+ if self.htpasswd:
57
+ self.res.update({"data": {"htpasswd": self.htpasswd}})
58
+ if self.data_dict:
59
+ self.res.update({"data": self.data_dict})
60
+ if self.string_data:
61
+ self.res.update({"stringData": self.string_data})
62
+ if self.type:
63
+ self.res.update({"type": self.type})
64
+
65
+ @property
66
+ def certificate_not_after(self):
67
+ return self.instance.metadata.annotations[
68
+ "auth.openshift.io/certificate-not-after"
69
+ ]
70
+
71
+ @property
72
+ def certificate_not_before(self):
73
+ return self.instance.metadata.annotations[
74
+ "auth.openshift.io/certificate-not-before"
75
+ ]
@@ -0,0 +1,9 @@
1
+ from ocp_resources.resource import Resource
2
+
3
+
4
+ class SecurityContextConstraints(Resource):
5
+ """
6
+ Security Context Constraints object.
7
+ """
8
+
9
+ api_group = Resource.ApiGroup.SECURITY_OPENSHIFT_IO
@@ -0,0 +1,16 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from ocp_resources.resource import NamespacedResource
4
+
5
+
6
+ class Service(NamespacedResource):
7
+ """
8
+ OpenShift Service object.
9
+ """
10
+
11
+ api_version = NamespacedResource.ApiVersion.V1
12
+
13
+ class Type:
14
+ CLUSTER_IP = "ClusterIP"
15
+ NODE_PORT = "NodePort"
16
+ LOAD_BALANCER = "LoadBalancer"
@@ -0,0 +1,9 @@
1
+ from ocp_resources.resource import NamespacedResource
2
+
3
+
4
+ class ServiceAccount(NamespacedResource):
5
+ """
6
+ Service Account object
7
+ """
8
+
9
+ api_version = NamespacedResource.ApiVersion.V1
@@ -0,0 +1,11 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from ocp_resources.resource import NamespacedResource
4
+
5
+
6
+ class ServiceMeshControlPlane(NamespacedResource):
7
+ """
8
+ Service Mesh Control Plane object.
9
+ """
10
+
11
+ api_group = NamespacedResource.ApiGroup.MAISTRA_IO
@@ -0,0 +1,14 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from ocp_resources.resource import NamespacedResource
4
+
5
+
6
+ class ServiceMeshMemberRoll(NamespacedResource):
7
+ """
8
+ Service Mesh Member Roll object.
9
+ """
10
+
11
+ api_group = NamespacedResource.ApiGroup.MAISTRA_IO
12
+
13
+ class Status:
14
+ CONFIGURED = "Configured"
@@ -0,0 +1,9 @@
1
+ from ocp_resources.resource import NamespacedResource
2
+
3
+
4
+ class ServiceMonitor(NamespacedResource):
5
+ """
6
+ Service Monitor object.
7
+ """
8
+
9
+ api_group = NamespacedResource.ApiGroup.MONITORING_COREOS_COM
@@ -0,0 +1,54 @@
1
+ from ocp_resources.constants import TIMEOUT_4MINUTES
2
+ from ocp_resources.resource import NamespacedResource
3
+
4
+
5
+ class SriovNetwork(NamespacedResource):
6
+ """
7
+ SriovNetwork object.
8
+ """
9
+
10
+ api_group = NamespacedResource.ApiGroup.SRIOVNETWORK_OPENSHIFT_IO
11
+
12
+ def __init__(
13
+ self,
14
+ name=None,
15
+ namespace=None,
16
+ network_namespace=None,
17
+ client=None,
18
+ resource_name=None,
19
+ vlan=None,
20
+ ipam=None,
21
+ teardown=True,
22
+ yaml_file=None,
23
+ delete_timeout=TIMEOUT_4MINUTES,
24
+ macspoofchk=None,
25
+ **kwargs,
26
+ ):
27
+ super().__init__(
28
+ name=name,
29
+ namespace=namespace,
30
+ client=client,
31
+ teardown=teardown,
32
+ yaml_file=yaml_file,
33
+ delete_timeout=delete_timeout,
34
+ **kwargs,
35
+ )
36
+ self.network_namespace = network_namespace
37
+ self.resource_name = resource_name
38
+ self.vlan = vlan
39
+ self.ipam = ipam
40
+ self.macspoofchk = macspoofchk
41
+
42
+ def to_dict(self):
43
+ super().to_dict()
44
+ if not self.yaml_file:
45
+ self.res["spec"] = {
46
+ "ipam": self.ipam or "{}\n",
47
+ "networkNamespace": self.network_namespace,
48
+ "resourceName": self.resource_name,
49
+ }
50
+ if self.vlan:
51
+ self.res["spec"]["vlan"] = self.vlan
52
+
53
+ if self.macspoofchk:
54
+ self.res["spec"]["spoofChk"] = self.macspoofchk
@@ -0,0 +1,67 @@
1
+ from ocp_resources.constants import TIMEOUT_4MINUTES
2
+ from ocp_resources.resource import NamespacedResource
3
+
4
+
5
+ class SriovNetworkNodePolicy(NamespacedResource):
6
+ """
7
+ SriovNetworkNodePolicy object.
8
+ """
9
+
10
+ api_group = NamespacedResource.ApiGroup.SRIOVNETWORK_OPENSHIFT_IO
11
+
12
+ def __init__(
13
+ self,
14
+ name=None,
15
+ namespace=None,
16
+ pf_names=None,
17
+ root_devices=None,
18
+ num_vfs=None,
19
+ resource_name=None,
20
+ client=None,
21
+ priority=None,
22
+ mtu=None,
23
+ node_selector=None,
24
+ teardown=True,
25
+ yaml_file=None,
26
+ delete_timeout=TIMEOUT_4MINUTES,
27
+ **kwargs,
28
+ ):
29
+ super().__init__(
30
+ name=name,
31
+ namespace=namespace,
32
+ client=client,
33
+ teardown=teardown,
34
+ yaml_file=yaml_file,
35
+ delete_timeout=delete_timeout,
36
+ **kwargs,
37
+ )
38
+ self.pf_names = pf_names
39
+ self.root_devices = root_devices
40
+ self.num_vfs = num_vfs
41
+ self.priority = priority
42
+ self.resource_name = resource_name
43
+ self.mtu = mtu
44
+ self.node_selector = node_selector
45
+
46
+ def to_dict(self):
47
+ super().to_dict()
48
+ if not self.yaml_file:
49
+ self.res["spec"] = {
50
+ "deviceType": "vfio-pci",
51
+ "nicSelector": {
52
+ "pfNames": [self.pf_names],
53
+ "rootDevices": [self.root_devices],
54
+ },
55
+ "numVfs": self.num_vfs,
56
+ "resourceName": self.resource_name,
57
+ }
58
+ if self.mtu:
59
+ self.res["spec"]["mtu"] = self.mtu
60
+ if self.priority:
61
+ self.res["spec"]["priority"] = self.priority
62
+ if self.node_selector:
63
+ self.res["spec"]["nodeSelector"] = self.node_selector
64
+ else:
65
+ self.res["spec"]["nodeSelector"] = {
66
+ "feature.node.kubernetes.io/network-sriov.capable": "true"
67
+ }
@@ -0,0 +1,44 @@
1
+ from ocp_resources.resource import NamespacedResource
2
+ from ocp_resources.utils import TimeoutExpiredError, TimeoutSampler
3
+
4
+
5
+ class SriovNetworkNodeState(NamespacedResource):
6
+ """
7
+ SriovNetworkNodeState object.
8
+ """
9
+
10
+ api_group = NamespacedResource.ApiGroup.SRIOVNETWORK_OPENSHIFT_IO
11
+
12
+ @property
13
+ def interfaces(self):
14
+ return self.instance.status.interfaces
15
+
16
+ @staticmethod
17
+ def iface_name(iface):
18
+ return iface.name
19
+
20
+ @staticmethod
21
+ def pciaddress(iface):
22
+ return iface.pciAddress
23
+
24
+ @staticmethod
25
+ def totalvfs(iface):
26
+ return iface.totalvfs
27
+
28
+ def wait_for_status_sync(self, wanted_status, timeout=1000):
29
+ self.logger.info(
30
+ f"Wait for {self.kind} {self.name} status to be {wanted_status}"
31
+ )
32
+ try:
33
+ for sample in TimeoutSampler(
34
+ wait_timeout=timeout,
35
+ sleep=3,
36
+ func=lambda: self.instance.status.syncStatus,
37
+ ):
38
+ if sample == wanted_status:
39
+ return
40
+ except TimeoutExpiredError:
41
+ self.logger.error(
42
+ f"after {timeout} seconds, {self.name} status is {self.instance.status.syncStatus}"
43
+ )
44
+ raise
ocp_resources/ssp.py ADDED
@@ -0,0 +1,9 @@
1
+ from ocp_resources.resource import NamespacedResource
2
+
3
+
4
+ class SSP(NamespacedResource):
5
+ """
6
+ SSP object.
7
+ """
8
+
9
+ api_group = NamespacedResource.ApiGroup.SSP_KUBEVIRT_IO
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from ocp_resources.resource import Resource
4
+
5
+
6
+ class StorageClass(Resource):
7
+ """
8
+ StorageClass object.
9
+ """
10
+
11
+ api_group = Resource.ApiGroup.STORAGE_K8S_IO
12
+
13
+ class Types:
14
+ """
15
+ These are names of StorageClass instances when you run `oc get sc`
16
+ """
17
+
18
+ LOCAL_BLOCK = "local-block"
19
+ HOSTPATH = "hostpath-provisioner"
20
+ CEPH_RBD = "ocs-storagecluster-ceph-rbd"
21
+ NFS = "nfs"
22
+ HOSTPATH_CSI = "hostpath-csi"
23
+
24
+ class Provisioner:
25
+ HOSTPATH = "kubevirt.io/hostpath-provisioner"
26
+ NO_PROVISIONER = "kubernetes.io/no-provisioner"
27
+ CEPH_RBD = "openshift-storage.rbd.csi.ceph.com"
28
+ HOSTPATH_CSI = "kubevirt.io.hostpath-provisioner"
29
+
30
+ class VolumeBindingMode:
31
+ """
32
+ VolumeBindingMode indicates how PersistentVolumeClaims should be provisioned and bound.
33
+ When unset, Immediate is used.
34
+ When "Immediate", if you want to use the "node aware" hostpath-provisioner,
35
+ ProvisionOnNode annotations should be introduced to PVC.
36
+ Or in order to be able to use the hpp without specifying the node on the PVC,
37
+ since CNV-2.2, hpp supports for "WaitForFirstConsumer".
38
+ """
39
+
40
+ # TODO: Rename to Uppercase
41
+ Immediate = "Immediate"
42
+ WaitForFirstConsumer = "WaitForFirstConsumer"
43
+
44
+ class Annotations:
45
+ IS_DEFAULT_CLASS = (
46
+ f"{Resource.ApiGroup.STORAGECLASS_KUBERNETES_IO}/is-default-class"
47
+ )
@@ -0,0 +1,67 @@
1
+ from ocp_resources.constants import TIMEOUT_4MINUTES
2
+ from ocp_resources.mtv import MTV
3
+ from ocp_resources.resource import NamespacedResource
4
+
5
+
6
+ class StorageMap(NamespacedResource, MTV):
7
+ """
8
+ Migration Toolkit For Virtualization (MTV) StorageMap object.
9
+
10
+ Args:
11
+ source_provider_name (str): MTV Source Provider CR name.
12
+ source_provider_namespace (str): MTV Source Provider CR namespace.
13
+ destination_provider_name (str): MTV Destination Provider CR name.
14
+ destination_provider_namespace (str): MTV Destination Provider CR namespace.
15
+ mapping (dict): Storage Resources Mapping
16
+ Example:
17
+ [ { "destination" : { "storageClass": "nfs",
18
+ "accessMode": " ReadWriteMany",
19
+ "volumeMode": "Filesystem" },
20
+ "source" : { "id": "datastore-11" }},
21
+
22
+ { "destination" : { "storageClass": "hss",
23
+ "accessMode": " ReadWriteMany",
24
+ "volumeMode": "Block" },
25
+ "source" : { "name": "MyDatastore" }},
26
+
27
+ ]
28
+
29
+ """
30
+
31
+ api_group = NamespacedResource.ApiGroup.FORKLIFT_KONVEYOR_IO
32
+
33
+ def __init__(
34
+ self,
35
+ name=None,
36
+ namespace=None,
37
+ source_provider_name=None,
38
+ source_provider_namespace=None,
39
+ destination_provider_name=None,
40
+ destination_provider_namespace=None,
41
+ mapping=None,
42
+ client=None,
43
+ teardown=True,
44
+ yaml_file=None,
45
+ delete_timeout=TIMEOUT_4MINUTES,
46
+ **kwargs,
47
+ ):
48
+ super().__init__(
49
+ name=name,
50
+ namespace=namespace,
51
+ client=client,
52
+ teardown=teardown,
53
+ yaml_file=yaml_file,
54
+ delete_timeout=delete_timeout,
55
+ **kwargs,
56
+ )
57
+ self.mapping = mapping
58
+ self.source_provider_name = source_provider_name
59
+ self.source_provider_namespace = source_provider_namespace
60
+ self.destination_provider_name = destination_provider_name
61
+ self.destination_provider_namespace = destination_provider_namespace
62
+ self.condition_message_ready = self.ConditionMessage.STORAGE_MAP_READY
63
+
64
+ def to_dict(self):
65
+ super().to_dict()
66
+ if not self.yaml_file:
67
+ self.res.update(self.map_to_dict)
@@ -0,0 +1,7 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from ocp_resources.resource import Resource
4
+
5
+
6
+ class StorageProfile(Resource):
7
+ api_group = Resource.ApiGroup.CDI_KUBEVIRT_IO