services.py 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. """
  2. Base implementation for services available through a provider
  3. """
  4. from cloudbridge.cloud.interfaces.services import BlockStoreService
  5. from cloudbridge.cloud.interfaces.services import CloudService
  6. from cloudbridge.cloud.interfaces.services import ComputeService
  7. from cloudbridge.cloud.interfaces.services import ImageService
  8. from cloudbridge.cloud.interfaces.services import InstanceService
  9. from cloudbridge.cloud.interfaces.services import InstanceTypesService
  10. from cloudbridge.cloud.interfaces.services import KeyPairService
  11. from cloudbridge.cloud.interfaces.services import NetworkService
  12. from cloudbridge.cloud.interfaces.services import NetworkingService
  13. from cloudbridge.cloud.interfaces.services import ObjectStoreService
  14. from cloudbridge.cloud.interfaces.services import RegionService
  15. from cloudbridge.cloud.interfaces.services import RouterService
  16. from cloudbridge.cloud.interfaces.services import SecurityGroupService
  17. from cloudbridge.cloud.interfaces.services import SecurityService
  18. from cloudbridge.cloud.interfaces.services import SnapshotService
  19. from cloudbridge.cloud.interfaces.services import SubnetService
  20. from cloudbridge.cloud.interfaces.services import VolumeService
  21. from .resources import BasePageableObjectMixin
  22. class BaseCloudService(CloudService):
  23. def __init__(self, provider):
  24. self._provider = provider
  25. @property
  26. def provider(self):
  27. return self._provider
  28. class BaseComputeService(ComputeService, BaseCloudService):
  29. def __init__(self, provider):
  30. super(BaseComputeService, self).__init__(provider)
  31. class BaseVolumeService(
  32. BasePageableObjectMixin, VolumeService, BaseCloudService):
  33. def __init__(self, provider):
  34. super(BaseVolumeService, self).__init__(provider)
  35. class BaseSnapshotService(
  36. BasePageableObjectMixin, SnapshotService, BaseCloudService):
  37. def __init__(self, provider):
  38. super(BaseSnapshotService, self).__init__(provider)
  39. class BaseBlockStoreService(BlockStoreService, BaseCloudService):
  40. def __init__(self, provider):
  41. super(BaseBlockStoreService, self).__init__(provider)
  42. class BaseImageService(
  43. BasePageableObjectMixin, ImageService, BaseCloudService):
  44. def __init__(self, provider):
  45. super(BaseImageService, self).__init__(provider)
  46. class BaseObjectStoreService(
  47. BasePageableObjectMixin, ObjectStoreService, BaseCloudService):
  48. def __init__(self, provider):
  49. super(BaseObjectStoreService, self).__init__(provider)
  50. class BaseSecurityService(SecurityService, BaseCloudService):
  51. def __init__(self, provider):
  52. super(BaseSecurityService, self).__init__(provider)
  53. class BaseKeyPairService(
  54. BasePageableObjectMixin, KeyPairService, BaseCloudService):
  55. def __init__(self, provider):
  56. super(BaseKeyPairService, self).__init__(provider)
  57. def delete(self, key_pair_id):
  58. """
  59. Delete an existing key pair.
  60. :type key_pair_id: str
  61. :param key_pair_id: The id of the key pair to be deleted.
  62. :rtype: ``bool``
  63. :return: ``True`` if the key does not exist. Note that this implies
  64. that the key may not have been deleted by this method but
  65. instead has not existed in the first place.
  66. """
  67. kp = self.get(key_pair_id)
  68. if kp:
  69. kp.delete()
  70. return True
  71. class BaseSecurityGroupService(
  72. BasePageableObjectMixin, SecurityGroupService, BaseCloudService):
  73. def __init__(self, provider):
  74. super(BaseSecurityGroupService, self).__init__(provider)
  75. class BaseInstanceTypesService(
  76. BasePageableObjectMixin, InstanceTypesService, BaseCloudService):
  77. def __init__(self, provider):
  78. super(BaseInstanceTypesService, self).__init__(provider)
  79. def get(self, instance_type_id):
  80. itype = (t for t in self if t.id == instance_type_id)
  81. return next(itype, None)
  82. def find(self, **kwargs):
  83. name = kwargs.get('name')
  84. if name:
  85. return [itype for itype in self if itype.name == name]
  86. else:
  87. raise TypeError(
  88. "Invalid parameters for search. Supported attributes: {name}")
  89. class BaseInstanceService(
  90. BasePageableObjectMixin, InstanceService, BaseCloudService):
  91. def __init__(self, provider):
  92. super(BaseInstanceService, self).__init__(provider)
  93. class BaseRegionService(
  94. BasePageableObjectMixin, RegionService, BaseCloudService):
  95. def __init__(self, provider):
  96. super(BaseRegionService, self).__init__(provider)
  97. def find(self, name):
  98. return [region for region in self if region.name == name]
  99. class BaseNetworkingService(NetworkingService, BaseCloudService):
  100. def __init__(self, provider):
  101. super(BaseNetworkingService, self).__init__(provider)
  102. class BaseNetworkService(
  103. BasePageableObjectMixin, NetworkService, BaseCloudService):
  104. def __init__(self, provider):
  105. super(BaseNetworkService, self).__init__(provider)
  106. def delete(self, network_id):
  107. network = self.get(network_id)
  108. if network:
  109. network.delete()
  110. return True
  111. class BaseSubnetService(
  112. BasePageableObjectMixin, SubnetService, BaseCloudService):
  113. def __init__(self, provider):
  114. super(BaseSubnetService, self).__init__(provider)
  115. def find(self, **kwargs):
  116. name = kwargs.get('name')
  117. if name:
  118. return [subnet for subnet in self if subnet.name == name]
  119. else:
  120. raise TypeError(
  121. "Invalid parameters for search. Supported attributes: {name}")
  122. class BaseRouterService(
  123. BasePageableObjectMixin, RouterService, BaseCloudService):
  124. def __init__(self, provider):
  125. super(BaseRouterService, self).__init__(provider)