Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 33 additions & 24 deletions ocp_resources/data_source.py
Original file line number Diff line number Diff line change
@@ -1,34 +1,26 @@
from openshift.dynamic.exceptions import ResourceNotFoundError

from ocp_resources.constants import TIMEOUT_4MINUTES
from warnings import warn
from kubernetes.dynamic.exceptions import ResourceNotFoundError
from ocp_resources.persistent_volume_claim import PersistentVolumeClaim
from ocp_resources.resource import NamespacedResource
from ocp_resources.volume_snapshot import VolumeSnapshot


class DataSource(NamespacedResource):
"""
DataSource object.

https://kubevirt.io/cdi-api-reference/main/definitions.html#_v1beta1_datasource
"""

api_group = NamespacedResource.ApiGroup.CDI_KUBEVIRT_IO

def __init__(
self,
name=None,
namespace=None,
client=None,
source=None,
teardown=True,
yaml_file=None,
delete_timeout=TIMEOUT_4MINUTES,
**kwargs,
):
super().__init__(
name=name,
namespace=namespace,
client=client,
teardown=teardown,
yaml_file=yaml_file,
delete_timeout=delete_timeout,
**kwargs,
)
self.source = source
def __init__(self, source=None, **kwargs):
"""
Args:
source (dict): The source of the data.
"""
super().__init__(**kwargs)
self._source = source

def to_dict(self):
super().to_dict()
Expand All @@ -40,9 +32,14 @@ def to_dict(self):
},
}
)
if not self._source:
raise ValueError("Passing yaml_file or parameter 'source' is required")

self.res["spec"]["source"] = self._source

@property
def pvc(self):
warn("pvc will be deprecated in v4.16, Use source instead", DeprecationWarning, stacklevel=2)
data_source_pvc = self.instance.spec.source.pvc
pvc_name = data_source_pvc.name
pvc_namespace = data_source_pvc.namespace
Expand All @@ -57,3 +54,15 @@ def pvc(self):
f"dataSource {self.name} is pointing to a non-existing PVC, name:"
f" {pvc_name}, namespace: {pvc_namespace}"
)

@property
def source(self):
_instance_source = self.instance.spec.source
_source = [*_instance_source][0][0]
_source_mapping = {"pvc": PersistentVolumeClaim, "snapshot": VolumeSnapshot}

return _source_mapping[_source](
client=self.client,
name=_instance_source[_source].name,
namespace=_instance_source[_source].namespace,
)