| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import uuid
- from typing import Dict, List, Tuple
- from alibabacloud_rds20140815.client import Client as RDSClient
- from alibabacloud_rds20140815.models import DescribeDBInstancesResponseBodyItemsDBInstance, DescribeDBInstancesRequest, DescribeDBInstanceAttributeRequest, \
- DescribeDBInstanceAttributeResponseBodyItemsDBInstanceAttribute
- from alibabacloud_tea_openapi import models
- from resource.enums.region import Region
- class RDSService(object):
- def __init__(self):
- self.access_key_id = "LTAI5tRwjztCCwQNBB6nW1dY"
- self.access_key_secret = "NaTnMxrGEJh64tLly7Kb5tr166Xpos"
- self.region_client_map: Dict[Region, RDSClient] = {}
- def create_client(self, region: Region) -> RDSClient:
- config = models.Config(
- access_key_id=self.access_key_id,
- access_key_secret=self.access_key_secret,
- endpoint=region.rds_endpoint
- )
- return RDSClient(config)
- def get_rds_client(self, region: Region) -> RDSClient:
- if region in self.region_client_map:
- return self.region_client_map[region]
- client = self.create_client(region)
- self.region_client_map[region] = client
- return client
- def get_all_instance(self, region: Region) -> List[DescribeDBInstancesResponseBodyItemsDBInstance]:
- page_number = 0
- all_instances: List[DescribeDBInstancesResponseBodyItemsDBInstance] = []
- while True:
- next_token, instances = self.get_instances(region=region, page_number=page_number)
- if not instances:
- break
- all_instances.extend(instances)
- page_number += 1
- return all_instances
- def get_instances(self, region: Region, page_size: int = 100, page_number: int = 0, next_token: str = "") -> Tuple[str, List[DescribeDBInstancesResponseBodyItemsDBInstance]]:
- client = self.get_rds_client(region)
- request = DescribeDBInstancesRequest(
- client_token=self.gen_request_id(),
- page_size=page_size,
- page_number=page_number,
- region_id=region.region,
- instance_level=1,
- )
- response = client.describe_dbinstances(request)
- body = response.body
- return body.next_token, body.items.dbinstance
- def get_instance_detail(self, region: Region, instance_id: str) -> List[DescribeDBInstanceAttributeResponseBodyItemsDBInstanceAttribute]:
- client = self.get_rds_client(region)
- request = DescribeDBInstanceAttributeRequest(
- dbinstance_id=instance_id
- )
- response = client.describe_dbinstance_attribute(request)
- return response.body.items.dbinstance_attribute
- @staticmethod
- def gen_request_id():
- return str(uuid.uuid4()).replace("-", "")
|