diff --git a/ocp_resources/data_source.py b/ocp_resources/data_source.py index 3465331d23..7645b89e67 100644 --- a/ocp_resources/data_source.py +++ b/ocp_resources/data_source.py @@ -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() @@ -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 @@ -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, + )