pai/api/service.py (121 lines of code) (raw):

# Copyright 2023 Alibaba, Inc. or its affiliates. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # https://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. import json import typing from typing import Any, Dict, Union from ..common.logging import get_logger from ..libs.alibabacloud_eas20210701.models import ( CreateServiceRequest, CreateServiceResponseBody, DescribeMachineSpecRequest, DescribeMachineSpecResponseBody, ListServicesRequest, ListServicesResponseBody, ReleaseServiceRequest, UpdateServiceRequest, UpdateServiceVersionRequest, ) from .base import PaginatedResult, ResourceAPI, ServiceName logger = get_logger(__name__) class ServiceAPI(ResourceAPI): BACKEND_SERVICE_NAME = ServiceName.PAI_EAS _create_method = "create_service_with_options" _update_method = "update_service_with_options" _update_version_method = "update_service_version_with_options" _list_method = "list_services_with_options" _get_method = "describe_service_with_options" _start_method = "start_service_with_options" _stop_method = "stop_service_with_options" _delete_method = "delete_service_with_options" _release_method = "release_service_with_options" _get_group_method = "describe_group_with_options" _list_groups_method = "list_group_with_options" _describe_machine_method = "describe_machine_spec_with_options" def __init__(self, region_id, acs_client, **kwargs): super(ServiceAPI, self).__init__(acs_client=acs_client, **kwargs) self.region_id = region_id def list( self, filter=None, order=None, page_number=None, page_size=None, sort=None ) -> PaginatedResult: """ Returns: """ request = ListServicesRequest( filter=filter, order=order, page_number=page_number, page_size=page_size, sort=sort, ) resp: ListServicesResponseBody = self._do_request(self._list_method, request) return self.make_paginated_result(resp) def get_api_object_by_resource_id(self, resource_id): resp = self._do_request( self._get_method, cluster_id=self.region_id, service_name=resource_id, ) return resp.to_map() def get(self, name: str) -> Dict[str, Any]: return self.get_api_object_by_resource_id(resource_id=name) def create( self, config: Union[str, typing.Dict], labels: Dict[str, str] = None ) -> str: """Create a PAI EAS Service resource, returns the service name.""" if isinstance(config, str): config_obj = json.loads(config) else: config_obj = config request = CreateServiceRequest(body=config_obj, labels=labels) resp: CreateServiceResponseBody = self._do_request(self._create_method, request) return resp.service_name def release(self, name, weight): request = ReleaseServiceRequest(weight=weight) self._do_request( self._release_method, cluster_id=self.region_id, service_name=name, request=request, ) def start(self, name): self._do_request( self._start_method, cluster_id=self.region_id, service_name=name ) def stop(self, name): self._do_request( self._stop_method, cluster_id=self.region_id, service_name=name ) def delete(self, name): self._do_request( self._delete_method, cluster_id=self.region_id, service_name=name ) def update(self, name, config: Union[str, typing.Dict]): if isinstance(config, str): config_obj = json.loads(config) else: config_obj = config request: UpdateServiceRequest = UpdateServiceRequest( body=config_obj, ) self._do_request( self._update_method, cluster_id=self.region_id, service_name=name, request=request, ) def update_version(self, name, version): request = UpdateServiceVersionRequest(version=version) self._do_request( self._update_version_method, cluster_id=self.region_id, service_name=name, request=request, ) def get_group(self, group_name) -> Dict[str, Any]: resp = self._do_request( self._get_group_method, cluster_id=self.region_id, group_name=group_name, ) return resp.to_map() def describe_machine(self) -> Dict[str, Any]: """List the machine spec supported by PAI-EAS.""" # DescribeMachineSpec API always returns all supported machine specs. request = DescribeMachineSpecRequest() resp: DescribeMachineSpecResponseBody = self._do_request( self._describe_machine_method, request, ) return resp.to_map()