class ClusterImageSet(BaseResource):
    """
    A CRD that represents a ClusterImageSet resource that contains the release image URI.
    Upon creating a cluster deployment, the release image is fetched by the assisted-service
    from the image set.
    """

    _api_group = "hive.openshift.io"
    _api_version = "v1"
    _plural = "clusterimagesets"

    def __init__(
        self,
        kube_api_client: ApiClient,
        name: str,
        namespace: str = consts.DEFAULT_NAMESPACE,
    ):
        super().__init__(name, namespace)
        self.crd_api = CustomObjectsApi(kube_api_client)

    def create_from_yaml(self, yaml_data: dict) -> None:
        self.crd_api.create_cluster_custom_object(
            group=self._api_group,
            version=self._api_version,
            plural=self._plural,
            body=yaml_data,
        )

        log.info("created cluster imageset %s: %s", self.ref, pformat(yaml_data))

    def create(self, releaseImage: str):
        body = {
            "apiVersion": f"{self._api_group}/{self._api_version}",
            "kind": "ClusterImageSet",
            "metadata": self.ref.as_dict(),
            "spec": {
                "releaseImage": releaseImage,
            },
        }
        self.crd_api.create_cluster_custom_object(
            group=self._api_group,
            version=self._api_version,
            plural=self._plural,
            body=body,
        )

        log.info("created cluster imageset %s: %s", self.ref, pformat(body))

    def get(self) -> dict:
        return self.crd_api.get_cluster_custom_object(
            group=self._api_group,
            version=self._api_version,
            plural=self._plural,
            name=self.ref.name,
        )

    def delete(self) -> None:
        self.crd_api.delete_cluster_custom_object(
            group=self._api_group,
            version=self._api_version,
            plural=self._plural,
            name=self.ref.name,
        )

        log.info("deleted cluster imageset %s", self.ref)
class ClusterImageSet(BaseResource):
    """
    A CRD that represents a ClusterImageSet resource that contains the release image URI.
    Upon creating a cluster deployment, the release image is fetched by the assisted-service
    from the image set.
    """

    _api_group = 'hive.openshift.io'
    _api_version = 'v1'
    _plural = 'clusterimagesets'

    def __init__(
        self,
        kube_api_client: ApiClient,
        name: str,
        namespace: str = env_variables['namespace'],
    ):
        super().__init__(name, namespace)
        self.crd_api = CustomObjectsApi(kube_api_client)

    def create_from_yaml(self, yaml_data: dict) -> None:
        self.crd_api.create_cluster_custom_object(
            group=self._api_group,
            version=self._api_version,
            plural=self._plural,
            body=yaml_data,
        )

        logger.info('created cluster imageset %s: %s', self.ref,
                    pformat(yaml_data))

    def create(self, releaseImage: str):
        body = {
            'apiVersion': f'{self._api_group}/{self._api_version}',
            'kind': 'ClusterImageSet',
            'metadata': self.ref.as_dict(),
            'spec': {
                'releaseImage': releaseImage,
            }
        }
        self.crd_api.create_cluster_custom_object(
            group=self._api_group,
            version=self._api_version,
            plural=self._plural,
            body=body,
        )

        logger.info('created cluster imageset %s: %s', self.ref, pformat(body))

    def get(self) -> dict:
        return self.crd_api.get_cluster_custom_object(
            group=self._api_group,
            version=self._api_version,
            plural=self._plural,
            name=self.ref.name,
        )

    def delete(self) -> None:
        self.crd_api.delete_cluster_custom_object(
            group=self._api_group,
            version=self._api_version,
            plural=self._plural,
            name=self.ref.name,
        )

        logger.info('deleted cluster imageset %s', self.ref)