def test_roletemplate_finalizer_cleanup(admin_mc, remove_resource): """ This ensures that roletemplates cleanup for clusters < v2.2.8 is performed correctly""" client = admin_mc.client rt = client.create_roleTemplate(name="rt-" + random_str()) remove_resource(rt) assert rt.annotations["field.cattle.io/rtUpgrade"] == "true" # create rt without rancher api with a bad finalizer api = CustomObjectsApi(admin_mc.k8s_client) json = { "apiVersion": "management.cattle.io/v3", "kind": "RoleTemplate", "metadata": { "finalizers": [ "clusterscoped.controller.cattle.io/" + "cluster-roletemplate-sync_fake", "fake-finalizer" ], "name": "test-" + random_str(), } } rt_k8s = api.create_cluster_custom_object( group="management.cattle.io", version="v3", plural="roletemplates", body=json, ) rt_name = rt_k8s["metadata"]["name"] rt_k8s = client.by_id_roleTemplate(id=rt_name) remove_resource(rt_k8s) def check_annotation(): rt1 = client.by_id_roleTemplate(rt_k8s.id) try: if rt1.annotations["field.cattle.io/rtUpgrade"] == "true": return True else: return False except (AttributeError, KeyError): return False wait_for(check_annotation, fail_handler=lambda: "annotation was not added") rt1 = api.get_cluster_custom_object( group="management.cattle.io", version="v3", plural="roletemplates", name=rt_k8s.id, ) if "finalizers" in rt1["metadata"]: assert "clusterscoped.controller.cattle.io/grb-sync_fake" \ not in rt1["metadata"]["finalizers"]
def test_globalrolebinding_finalizer_cleanup(admin_mc, remove_resource): """This ensures that globalrolebinding cleanup of clusters < v2.2.8 is performed correctly""" client = admin_mc.client grb = client.create_globalRoleBinding(globalRoleId="admin", userId="u-" + random_str()) remove_resource(grb) assert grb.annotations["field.cattle.io/grbUpgrade"] == "true" # create a grb without the rancher api with a bad finalizer api = CustomObjectsApi(admin_mc.k8s_client) json = { "apiVersion": "management.cattle.io/v3", "globalRoleName": "admin", "kind": "GlobalRoleBinding", "metadata": { "finalizers": ["clusterscoped.controller.cattle.io/grb-sync_fake"], "generation": 1, "name": "grb-" + random_str(), }, "userName": "******" + random_str(), } grb_k8s = api.create_cluster_custom_object( group="management.cattle.io", version="v3", plural="globalrolebindings", body=json, ) grb_name = grb_k8s["metadata"]["name"] grb_k8s = client.by_id_globalRoleBinding(id=grb_name) remove_resource(grb_k8s) def check_annotation(): grb1 = client.by_id_globalRoleBinding(grb_k8s.id) try: if grb1.annotations["field.cattle.io/grbUpgrade"] == "true": return True else: return False except (AttributeError, KeyError): return False wait_for(check_annotation, fail_handler=lambda: "annotation was not added") grb1 = api.get_cluster_custom_object( group="management.cattle.io", version="v3", plural="globalrolebindings", name=grb_k8s.id, ) assert ("clusterscoped.controller.cattle.io/grb-sync_fake" not in grb1["metadata"]["finalizers"])
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)