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.
- ocp_resources/__init__.py +0 -0
- ocp_resources/api_service.py +9 -0
- ocp_resources/backup.py +52 -0
- ocp_resources/benchmark.py +92 -0
- ocp_resources/catalog_source.py +63 -0
- ocp_resources/catalog_source_config.py +86 -0
- ocp_resources/cdi.py +13 -0
- ocp_resources/cdi_config.py +52 -0
- ocp_resources/chaos_engine.py +30 -0
- ocp_resources/chaos_result.py +11 -0
- ocp_resources/cluster_operator.py +5 -0
- ocp_resources/cluster_role.py +70 -0
- ocp_resources/cluster_role_binding.py +36 -0
- ocp_resources/cluster_service_version.py +8 -0
- ocp_resources/cluster_version.py +5 -0
- ocp_resources/configmap.py +37 -0
- ocp_resources/console_cli_download.py +9 -0
- ocp_resources/console_plugin.py +9 -0
- ocp_resources/console_quick_start.py +9 -0
- ocp_resources/constants.py +26 -0
- ocp_resources/csidriver.py +9 -0
- ocp_resources/custom_resource_definition.py +5 -0
- ocp_resources/daemonset.py +61 -0
- ocp_resources/data_import_cron.py +100 -0
- ocp_resources/data_source.py +59 -0
- ocp_resources/datavolume.py +275 -0
- ocp_resources/deployment.py +65 -0
- ocp_resources/destination_rule.py +11 -0
- ocp_resources/event.py +114 -0
- ocp_resources/forklift_controller.py +10 -0
- ocp_resources/gateway.py +11 -0
- ocp_resources/hook.py +52 -0
- ocp_resources/host.py +64 -0
- ocp_resources/hostpath_provisioner.py +50 -0
- ocp_resources/hyperconverged.py +43 -0
- ocp_resources/image.py +9 -0
- ocp_resources/image_content_source_policy.py +9 -0
- ocp_resources/image_stream.py +48 -0
- ocp_resources/imagestreamtag.py +9 -0
- ocp_resources/infrastructure.py +18 -0
- ocp_resources/installplan.py +8 -0
- ocp_resources/job.py +65 -0
- ocp_resources/kube_descheduler.py +65 -0
- ocp_resources/kubevirt.py +5 -0
- ocp_resources/kubevirt_common_templates_bundle.py +5 -0
- ocp_resources/kubevirt_metrics_aggregation.py +5 -0
- ocp_resources/kubevirt_node_labeller_bundle.py +5 -0
- ocp_resources/kubevirt_template_validaotr.py +5 -0
- ocp_resources/logger.py +76 -0
- ocp_resources/machine.py +50 -0
- ocp_resources/machine_config.py +5 -0
- ocp_resources/machine_config_pool.py +9 -0
- ocp_resources/machine_health_check.py +76 -0
- ocp_resources/machine_set.py +189 -0
- ocp_resources/migration.py +63 -0
- ocp_resources/migration_policy.py +66 -0
- ocp_resources/mtv.py +171 -0
- ocp_resources/mutating_webhook_config.py +9 -0
- ocp_resources/namespace.py +40 -0
- ocp_resources/network.py +5 -0
- ocp_resources/network_addons_config.py +9 -0
- ocp_resources/network_attachment_definition.py +24 -0
- ocp_resources/network_map.py +64 -0
- ocp_resources/network_policy.py +9 -0
- ocp_resources/nmstate.py +9 -0
- ocp_resources/node.py +41 -0
- ocp_resources/node_health_check.py +10 -0
- ocp_resources/node_maintenance.py +40 -0
- ocp_resources/node_network_configuration_enactment.py +20 -0
- ocp_resources/node_network_configuration_policy.py +472 -0
- ocp_resources/node_network_state.py +121 -0
- ocp_resources/oauth.py +9 -0
- ocp_resources/operator_condition.py +5 -0
- ocp_resources/operator_group.py +37 -0
- ocp_resources/operator_hub.py +5 -0
- ocp_resources/operator_source.py +50 -0
- ocp_resources/package_manifest.py +5 -0
- ocp_resources/peer_authentication.py +18 -0
- ocp_resources/persistent_volume.py +27 -0
- ocp_resources/persistent_volume_claim.py +103 -0
- ocp_resources/plan.py +143 -0
- ocp_resources/pod.py +175 -0
- ocp_resources/pod_disruption_budget.py +53 -0
- ocp_resources/priority_class.py +48 -0
- ocp_resources/project.py +60 -0
- ocp_resources/prometheus.py +9 -0
- ocp_resources/prometheus_rule.py +9 -0
- ocp_resources/provider.py +59 -0
- ocp_resources/replicaset.py +11 -0
- ocp_resources/resource.py +1383 -0
- ocp_resources/restore.py +52 -0
- ocp_resources/role.py +11 -0
- ocp_resources/role_binding.py +67 -0
- ocp_resources/route.py +76 -0
- ocp_resources/secret.py +75 -0
- ocp_resources/security_context_constraints.py +9 -0
- ocp_resources/service.py +16 -0
- ocp_resources/service_account.py +9 -0
- ocp_resources/service_mesh_control_plane.py +11 -0
- ocp_resources/service_mesh_member_roll.py +14 -0
- ocp_resources/service_monitor.py +9 -0
- ocp_resources/sriov_network.py +54 -0
- ocp_resources/sriov_network_node_policy.py +67 -0
- ocp_resources/sriov_network_node_state.py +44 -0
- ocp_resources/ssp.py +9 -0
- ocp_resources/storage_class.py +47 -0
- ocp_resources/storage_map.py +67 -0
- ocp_resources/storage_profile.py +7 -0
- ocp_resources/subscription.py +66 -0
- ocp_resources/tekton_tasks.py +9 -0
- ocp_resources/template.py +74 -0
- ocp_resources/upload_token_request.py +39 -0
- ocp_resources/utils.py +278 -0
- ocp_resources/validating_webhook_config.py +9 -0
- ocp_resources/virtual_machine.py +177 -0
- ocp_resources/virtual_machine_Instance_replica_set.py +9 -0
- ocp_resources/virtual_machine_cluster_flavor.py +5 -0
- ocp_resources/virtual_machine_flavor.py +5 -0
- ocp_resources/virtual_machine_import.py +307 -0
- ocp_resources/virtual_machine_instance.py +322 -0
- ocp_resources/virtual_machine_instance_migration.py +36 -0
- ocp_resources/virtual_machine_instance_preset.py +9 -0
- ocp_resources/virtual_machine_restore.py +99 -0
- ocp_resources/virtual_machine_snapshot.py +96 -0
- ocp_resources/virtual_service.py +11 -0
- ocp_resources/vm_import_config.py +9 -0
- ocp_resources/volume_snapshot.py +9 -0
- ocp_resources/volume_snapshot_class.py +9 -0
- openshift_python_wrapper-4.11.61.dist-info/LICENSE +201 -0
- openshift_python_wrapper-4.11.61.dist-info/METADATA +188 -0
- openshift_python_wrapper-4.11.61.dist-info/RECORD +132 -0
- openshift_python_wrapper-4.11.61.dist-info/WHEEL +4 -0
ocp_resources/restore.py
ADDED
|
@@ -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,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
|
ocp_resources/secret.py
ADDED
|
@@ -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
|
+
]
|
ocp_resources/service.py
ADDED
|
@@ -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,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,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,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)
|