async def create_or_update_custom_object(self, name, group, version, plural, body, reraise=False): try: create = await self.create_custom_object(name=name, group=group, version=version, plural=plural, body=body) return create, True except ApiException as e_create: try: update = await self.update_custom_object(name=name, group=group, version=version, plural=plural, body=body) return update, False except ApiException as e: if reraise: raise PolyaxonK8SError( "Connection error: creation %s - update %s" % (e_create, e)) from e else: logger.error("K8S error: {}".format(e))
def get_volume(self, name, reraise=False): try: return self.k8s_api.read_persistent_volume(name=name) except ApiException as e: if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e return None
def get_version(self, reraise=False): try: return self.k8s_version_api.get_code().to_dict() except ApiException as e: logger.error("K8S error: {}".format(e)) if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e
async def get_pod(self, name, reraise=False): try: return await self.k8s_api.read_namespaced_pod( name=name, namespace=self.namespace) except ApiException as e: if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e return None
def get_ingress(self, name, reraise=False): try: return self.networking_v1_beta1_api.read_namespaced_ingress( name=name, namespace=self.namespace) except ApiException as e: if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e return None
def get_deployment(self, name, reraise=False): try: return self.k8s_apps_api.read_namespaced_deployment( name=name, namespace=self.namespace) except ApiException as e: if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e return None
def update_node_labels(self, node, labels, reraise=False): body = {"metadata": {"labels": labels}, "namespace": self.namespace} try: return self.k8s_api.patch_node(name=node, body=body) except ApiException as e: logger.error("K8S error: {}".format(e)) if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e
def list_nodes(self, reraise=False): try: res = self.k8s_api.list_node() return [p for p in res.items] except ApiException as e: logger.error("K8S error: {}".format(e)) if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e return []
async def _list_namespace_resource(self, resource_api, reraise=False, **kwargs): try: res = await resource_api(namespace=self.namespace, **kwargs) return [p for p in res.items] except ApiException as e: logger.error("K8S error: {}".format(e)) if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e return []
def create_or_update_ingress(self, name, body, reraise=False): try: return self.create_ingress(name=name, body=body), True except ApiException: try: return self.update_ingress(name=name, body=body), False except ApiException as e: if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e else: logger.error("K8S error: {}".format(e))
def delete_volume(self, name, reraise=False): try: self.k8s_api.delete_persistent_volume( name=name, body=client.V1DeleteOptions( api_version=constants.K8S_API_VERSION_V1), ) logger.debug("Volume `{}` Deleted".format(name)) except ApiException as e: if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e else: logger.debug("Volume `{}` was not found".format(name))
async def get_custom_object(self, name, group, version, plural, reraise=False): try: return await self.k8s_custom_object_api.get_namespaced_custom_object( name=name, group=group, version=version, plural=plural, namespace=self.namespace, ) except ApiException as e: if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e return None
def _list_namespace_resource(self, resource_api, reraise=False, **kwargs): try: res = resource_api(namespace=self.namespace, **kwargs) if isinstance(res, dict): items = res["items"] else: items = res.items return [p for p in items] except ApiException as e: logger.error("K8S error: {}".format(e)) if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e return []
def delete_job(self, name, reraise=False): try: self.k8s_batch_api.delete_namespaced_job( name=name, namespace=self.namespace, body=client.V1DeleteOptions( api_version=constants.K8S_API_VERSION_V1), ) logger.debug("Pod `{}` deleted".format(name)) except ApiException as e: if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e else: logger.debug("Pod `{}` was not found".format(name))
def delete_ingress(self, name, reraise=False): try: self.networking_v1_beta1_api.delete_namespaced_ingress( name=name, namespace=self.namespace, body=client.V1DeleteOptions( api_version=constants.K8S_API_VERSION_NETWORKING_V1_BETA1, propagation_policy="Foreground", ), ) logger.debug("Ingress `{}` deleted".format(name)) except ApiException as e: if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e else: logger.debug("Ingress `{}` was not found".format(name))
def delete_deployment(self, name, reraise=False): try: self.k8s_apps_api.delete_namespaced_deployment( name=name, namespace=self.namespace, body=client.V1DeleteOptions( api_version=constants.K8S_API_VERSION_APPS_V1, propagation_policy="Foreground", ), ) logger.debug("Deployment `{}` deleted".format(name)) except ApiException as e: if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e else: logger.debug("Deployment `{}` was not found".format(name))
async def delete_custom_object(self, name, group, version, plural, reraise=False): try: await self.k8s_custom_object_api.delete_namespaced_custom_object( name=name, group=group, version=version, plural=plural, namespace=self.namespace, body=client.V1DeleteOptions(), ) logger.debug("Custom object `{}` deleted".format(name)) except ApiException as e: if reraise: raise PolyaxonK8SError("Connection error: %s" % e) from e else: logger.debug("Custom object `{}` was not found".format(name))