subservices.py 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. import logging
  2. from cloudbridge.interfaces.subservices import BucketObjectSubService
  3. from cloudbridge.interfaces.subservices import DnsRecordSubService
  4. from cloudbridge.interfaces.subservices import FloatingIPSubService
  5. from cloudbridge.interfaces.subservices import GatewaySubService
  6. from cloudbridge.interfaces.subservices import SubnetSubService
  7. from cloudbridge.interfaces.subservices import VMFirewallRuleSubService
  8. from .resources import BasePageableObjectMixin
  9. log = logging.getLogger(__name__)
  10. class BaseBucketObjectSubService(BasePageableObjectMixin,
  11. BucketObjectSubService):
  12. def __init__(self, provider, bucket):
  13. self.__provider = provider
  14. self.bucket = bucket
  15. @property
  16. def _provider(self):
  17. return self.__provider
  18. def get(self, name):
  19. return self._provider.storage._bucket_objects.get(self.bucket, name)
  20. def list(self, limit=None, marker=None, prefix=None):
  21. return self._provider.storage._bucket_objects.list(self.bucket, limit,
  22. marker, prefix)
  23. def find(self, **kwargs):
  24. return self._provider.storage._bucket_objects.find(self.bucket,
  25. **kwargs)
  26. def create(self, name):
  27. return self._provider.storage._bucket_objects.create(self.bucket, name)
  28. class BaseGatewaySubService(GatewaySubService, BasePageableObjectMixin):
  29. def __init__(self, provider, network):
  30. self._network = network
  31. self.__provider = provider
  32. @property
  33. def _provider(self):
  34. return self.__provider
  35. def get_or_create(self):
  36. return (self._provider.networking
  37. ._gateways
  38. .get_or_create(self._network))
  39. def delete(self, gateway):
  40. return (self._provider.networking
  41. ._gateways
  42. .delete(self._network, gateway))
  43. def list(self, limit=None, marker=None):
  44. return (self._provider.networking
  45. ._gateways
  46. .list(self._network, limit, marker))
  47. class BaseVMFirewallRuleSubService(BasePageableObjectMixin,
  48. VMFirewallRuleSubService):
  49. def __init__(self, provider, firewall):
  50. self.__provider = provider
  51. self._firewall = firewall
  52. @property
  53. def _provider(self):
  54. return self.__provider
  55. def get(self, rule_id):
  56. return self._provider.security._vm_firewall_rules.get(self._firewall,
  57. rule_id)
  58. def list(self, limit=None, marker=None):
  59. return self._provider.security._vm_firewall_rules.list(self._firewall,
  60. limit, marker)
  61. def create(self, direction, protocol=None, from_port=None,
  62. to_port=None, cidr=None, src_dest_fw=None):
  63. return (self._provider
  64. .security
  65. ._vm_firewall_rules
  66. .create(self._firewall, direction, protocol, from_port,
  67. to_port, cidr, src_dest_fw))
  68. def find(self, **kwargs):
  69. return self._provider.security._vm_firewall_rules.find(self._firewall,
  70. **kwargs)
  71. def delete(self, rule_id):
  72. return (self._provider
  73. .security
  74. ._vm_firewall_rules
  75. .delete(self._firewall, rule_id))
  76. class BaseFloatingIPSubService(FloatingIPSubService, BasePageableObjectMixin):
  77. def __init__(self, provider, gateway):
  78. self.__provider = provider
  79. self.gateway = gateway
  80. @property
  81. def _provider(self):
  82. return self.__provider
  83. def get(self, fip_id):
  84. return self._provider.networking._floating_ips.get(self.gateway,
  85. fip_id)
  86. def list(self, limit=None, marker=None):
  87. return self._provider.networking._floating_ips.list(self.gateway,
  88. limit, marker)
  89. def find(self, **kwargs):
  90. return self._provider.networking._floating_ips.find(self.gateway,
  91. **kwargs)
  92. def create(self):
  93. return self._provider.networking._floating_ips.create(self.gateway)
  94. def delete(self, fip):
  95. return self._provider.networking._floating_ips.delete(self.gateway,
  96. fip)
  97. class BaseSubnetSubService(SubnetSubService, BasePageableObjectMixin):
  98. def __init__(self, provider, network):
  99. self.__provider = provider
  100. self.network = network
  101. @property
  102. def _provider(self):
  103. return self.__provider
  104. def get(self, subnet_id):
  105. sn = self._provider.networking.subnets.get(subnet_id)
  106. if sn.network_id != self.network.id:
  107. log.warning("The SubnetSubService nested in the network '{}' "
  108. "returned subnet '{}' which is attached to another "
  109. "network '{}'".format(str(self.network), str(sn),
  110. str(sn.network)))
  111. return sn
  112. def list(self, limit=None, marker=None):
  113. return self._provider.networking.subnets.list(network=self.network,
  114. limit=limit,
  115. marker=marker)
  116. def find(self, **kwargs):
  117. return self._provider.networking.subnets.find(network=self.network,
  118. **kwargs)
  119. def create(self, label, cidr_block):
  120. return self._provider.networking.subnets.create(label,
  121. self.network,
  122. cidr_block)
  123. def delete(self, subnet):
  124. return self._provider.networking.subnets.delete(subnet)
  125. class BaseDnsRecordSubService(DnsRecordSubService, BasePageableObjectMixin):
  126. def __init__(self, provider, dns_zone):
  127. self.__provider = provider
  128. self.dns_zone = dns_zone
  129. @property
  130. def _provider(self):
  131. return self.__provider
  132. def get(self, rec_id):
  133. # pylint:disable=protected-access
  134. return self._provider.dns._records.get(self.dns_zone, rec_id)
  135. def list(self, limit=None, marker=None):
  136. # pylint:disable=protected-access
  137. return self._provider.dns._records.list(
  138. dns_zone=self.dns_zone, limit=limit, marker=marker)
  139. def find(self, **kwargs):
  140. # pylint:disable=protected-access
  141. return self._provider.dns._records.find(
  142. dns_zone=self.dns_zone, **kwargs)
  143. def create(self, name, type, data, ttl=None):
  144. # pylint:disable=protected-access
  145. return self._provider.dns._records.create(
  146. self.dns_zone, name, type, data, ttl)
  147. def delete(self, rec):
  148. return self._provider.dns._records.delete(self.dns_zone, rec)