RDSServicee.py 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import uuid
  2. from typing import Dict, List, Tuple
  3. from alibabacloud_rds20140815.client import Client as RDSClient
  4. from alibabacloud_rds20140815.models import DescribeDBInstancesResponseBodyItemsDBInstance, DescribeDBInstancesRequest, DescribeDBInstanceAttributeRequest, \
  5. DescribeDBInstanceAttributeResponseBodyItemsDBInstanceAttribute
  6. from alibabacloud_tea_openapi import models
  7. from resource.enums.region import Region
  8. class RDSService(object):
  9. def __init__(self):
  10. self.access_key_id = "LTAI5tRwjztCCwQNBB6nW1dY"
  11. self.access_key_secret = "NaTnMxrGEJh64tLly7Kb5tr166Xpos"
  12. self.region_client_map: Dict[Region, RDSClient] = {}
  13. def create_client(self, region: Region) -> RDSClient:
  14. config = models.Config(
  15. access_key_id=self.access_key_id,
  16. access_key_secret=self.access_key_secret,
  17. endpoint=region.rds_endpoint
  18. )
  19. return RDSClient(config)
  20. def get_rds_client(self, region: Region) -> RDSClient:
  21. if region in self.region_client_map:
  22. return self.region_client_map[region]
  23. client = self.create_client(region)
  24. self.region_client_map[region] = client
  25. return client
  26. def get_all_instance(self, region: Region) -> List[DescribeDBInstancesResponseBodyItemsDBInstance]:
  27. page_number = 0
  28. all_instances: List[DescribeDBInstancesResponseBodyItemsDBInstance] = []
  29. while True:
  30. next_token, instances = self.get_instances(region=region, page_number=page_number)
  31. if not instances:
  32. break
  33. all_instances.extend(instances)
  34. page_number += 1
  35. return all_instances
  36. def get_instances(self, region: Region, page_size: int = 100, page_number: int = 0, next_token: str = "") -> Tuple[str, List[DescribeDBInstancesResponseBodyItemsDBInstance]]:
  37. client = self.get_rds_client(region)
  38. request = DescribeDBInstancesRequest(
  39. client_token=self.gen_request_id(),
  40. page_size=page_size,
  41. page_number=page_number,
  42. region_id=region.region,
  43. instance_level=1,
  44. )
  45. response = client.describe_dbinstances(request)
  46. body = response.body
  47. return body.next_token, body.items.dbinstance
  48. def get_instance_detail(self, region: Region, instance_id: str) -> List[DescribeDBInstanceAttributeResponseBodyItemsDBInstanceAttribute]:
  49. client = self.get_rds_client(region)
  50. request = DescribeDBInstanceAttributeRequest(
  51. dbinstance_id=instance_id
  52. )
  53. response = client.describe_dbinstance_attribute(request)
  54. return response.body.items.dbinstance_attribute
  55. @staticmethod
  56. def gen_request_id():
  57. return str(uuid.uuid4()).replace("-", "")