def delete_crd(api_extensions_v1: ApiextensionsV1Api, name) -> None: """ Delete a CRD. :param api_extensions_v1: ApiextensionsV1Api :param name: :return: """ print(f"Delete a CRD: {name}") api_extensions_v1.delete_custom_resource_definition(name) ensure_item_removal(api_extensions_v1.read_custom_resource_definition, name) print(f"CRD was removed with name '{name}'")
def _cleanup(resource): k8s_v1_client = ApiextensionsV1Api(admin_mc.k8s_client) k8s_client = CustomObjectsApi(admin_mc.k8s_client) def clean(): kind = resource["kind"] metadata = resource["metadata"] api_version = resource["apiVersion"] api_version_parts = api_version.split("/") if len(api_version_parts) != 2: raise ValueError("Error parsing ApiVersion [" + api_version + "]." + "Expected form \"group/version\"") group = api_version_parts[0] version = api_version_parts[1] crd_list = k8s_v1_client.\ list_custom_resource_definition().items crd = list( filter( lambda x: x.spec.names.kind == kind and x.spec.group == group and x.spec.versions[0].name == version, crd_list))[0] try: k8s_client.delete_namespaced_custom_object( group, version, metadata["namespace"], crd.spec.names.plural, metadata["name"]) except ApiException as e: body = json.loads(e.body) if body["code"] not in WAIT_HTTP_ERROR_CODES: raise e request.addfinalizer(clean)
def create_crd(api_extensions_v1: ApiextensionsV1Api, body) -> None: """ Create a CRD based on a dict :param api_extensions_v1: ApiextensionsV1Api :param body: a dict """ try: api_extensions_v1.create_custom_resource_definition(body) except ApiException as api_ex: raise api_ex except Exception as ex: # https://github.com/kubernetes-client/python/issues/376 if ex.args[0] == "Invalid value for `conditions`, must not be `None`": print("There was an insignificant exception during the CRD creation. Continue...") else: pytest.fail(f"An unexpected exception {ex} occurred. Exiting...")
def __init__(self, controller: "KubernetesController") -> None: super().__init__(controller) self.api_ex = ApiextensionsV1Api(controller.client) self.api = CustomObjectsApi(controller.client)