Example #1
0
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}'")
Example #2
0
    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)
Example #3
0
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...")
Example #4
0
 def __init__(self, controller: "KubernetesController") -> None:
     super().__init__(controller)
     self.api_ex = ApiextensionsV1Api(controller.client)
     self.api = CustomObjectsApi(controller.client)