[docs]classClusterClient(ServiceClient):""" Methods for interacting with Beaker `Clusters <https://beaker-docs.apps.allenai.org/concept/clusters.html>`_. Accessed via the :data:`Beaker.cluster <beaker.Beaker.cluster>` property. .. warning:: Do not instantiate this class directly! The :class:`~beaker.Beaker` client will create one automatically which you can access through the corresponding property. """
[docs]defget(self,cluster:str,*,include_cluster_occupancy:bool=False)->pb2.Cluster:""" :examples: >>> with Beaker.from_env() as beaker: ... cluster = beaker.cluster.get(cluster_name) :returns: A :class:`~beaker.types.BeakerCluster`. :raises ~beaker.exceptions.BeakerClusterNotFound: If the cluster doesn't exist. """returnself.rpc_request(RpcMethod[pb2.GetClusterResponse](self.service.GetCluster),pb2.GetClusterRequest(cluster_id=self.resolve_cluster_id(cluster),include_cluster_occupancy=include_cluster_occupancy,),exceptions_for_status={grpc.StatusCode.NOT_FOUND:BeakerClusterNotFound(cluster)},).cluster
[docs]deflist(self,*,org:pb2.Organization|None=None,sort_order:BeakerSortOrder|None=None,sort_field:Literal["created","name","running_jobs","total_nodes","total_gpus","free_gpus"]="name",include_deleted:bool=False,include_cluster_occupancy:bool=False,limit:int|None=None,)->Iterable[pb2.Cluster]:""" List clusters. :returns: An iterator over :class:`~beaker.types.BeakerCluster` protobuf objects. """iflimitisnotNoneandlimit<=0:raiseValueError("'limit' must be a positive integer")count=0forresponseinself.rpc_paged_request(RpcMethod[pb2.ListClustersResponse](self.service.ListClusters),pb2.ListClustersRequest(options=pb2.ListClustersRequest.Opts(sort_clause=pb2.ListClustersRequest.Opts.SortClause(sort_order=Noneifsort_orderisNoneelsesort_order.as_pb2(),created={}ifsort_field=="created"elseNone,name={}ifsort_field=="name"elseNone,running_jobs={}ifsort_field=="running_jobs"elseNone,total_nodes={}ifsort_field=="total_nodes"elseNone,total_gpus={}ifsort_field=="total_gpus"elseNone,free_gpus={}ifsort_field=="free_gpus"elseNone,),organization_id=self.resolve_org_id(org),include_deleted=include_deleted,include_cluster_occupancy=include_cluster_occupancy,page_size=self.MAX_PAGE_SIZEiflimitisNoneelsemin(self.MAX_PAGE_SIZE,limit),)),):forclusterinresponse.clusters:count+=1yieldclusteriflimitisnotNoneandcount>=limit:return
[docs]defurl(self,cluster:pb2.Cluster)->str:""" Get the URL to the cluster on the Beaker dashboard. """returnf"{self.config.agent_address}/orgs/{self.beaker.org_name}/clusters/{cluster.name}"