provider.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. import logging
  2. import os
  3. from cloudbridge.cloud.base import BaseCloudProvider
  4. from cloudbridge.cloud.interfaces import TestMockHelperMixin
  5. from cloudbridge.cloud.providers.azure.azure_client import AzureClient
  6. from cloudbridge.cloud.providers.azure.mock_azure_client import MockAzureClient
  7. from cloudbridge.cloud.providers.azure.services \
  8. import AzureBlockStoreService, AzureObjectStoreService, \
  9. AzureSecurityService
  10. from msrestazure.azure_exceptions import CloudError
  11. log = logging.getLogger(__name__)
  12. class AzureCloudProvider(BaseCloudProvider):
  13. PROVIDER_ID = 'azure'
  14. def __init__(self, config, azureclient=None):
  15. super(AzureCloudProvider, self).__init__(config)
  16. self.cloud_type = 'azure'
  17. # mandatory config values
  18. self.subscription_id = self. \
  19. _get_config_value('azure_subscription_id',
  20. os.environ.get('AZURE_SUBSCRIPTION_ID', None))
  21. self.client_Id = self._get_config_value(
  22. 'azure_client_Id', os.environ.get('AZURE_CLIENT_ID', None))
  23. self.secret = self._get_config_value(
  24. 'azure_secret', os.environ.get('AZURE_SECRET', None))
  25. self.tenant = self._get_config_value(
  26. 'azure_tenant', os.environ.get('AZURE_TENANT', None))
  27. # optional config values
  28. self.region_name = self._get_config_value(
  29. 'azure_region_name', os.environ.get('AZURE_REGION_NAME',
  30. 'eastus'))
  31. self.resource_group = self._get_config_value(
  32. 'azure_resource_group', os.environ.get('AZURE_RESOURCE_GROUP',
  33. 'cloudbridge-azure'))
  34. self.storage_account_name = self._get_config_value(
  35. 'azure_storage_account_name', os.environ.get
  36. ('AZURE_STORAGE_ACCOUNT_NAME', 'cloudbridgeazure'))
  37. # create a dict with both optional and mandatory configuration values
  38. # to pass to the azureclient class, rather
  39. # than passing the provider object and taking a dependency.
  40. self.allconfig = {'azure_subscription_id': self.subscription_id,
  41. 'azure_client_Id': self.client_Id,
  42. 'azure_secret': self.secret,
  43. 'azure_tenant': self.tenant,
  44. 'azure_region_name': self.region_name,
  45. 'azure_resource_group': self.resource_group,
  46. 'azure_storage_account_name':
  47. self.storage_account_name}
  48. self._azure_client = azureclient or AzureClient(self.allconfig)
  49. try:
  50. self._azure_client.get_resource_group(self.resource_group)
  51. except CloudError:
  52. resource_group_params = {'location': self.region_name}
  53. self._azure_client.create_resource_group(self.resource_group,
  54. resource_group_params)
  55. try:
  56. self._azure_client.get_storage_account(self.storage_account_name)
  57. except CloudError:
  58. storage_account_params = {
  59. 'sku': {
  60. 'name': 'Standard_LRS'
  61. },
  62. 'kind': 'storage',
  63. 'location': self.region_name,
  64. }
  65. self._azure_client. \
  66. create_storage_account(self.storage_account_name,
  67. storage_account_params)
  68. self._security = AzureSecurityService(self)
  69. self._object_store = AzureObjectStoreService(self)
  70. self._block_store = AzureBlockStoreService(self)
  71. @property
  72. def compute(self):
  73. raise NotImplementedError(
  74. "AzureCloudProvider does not implement this service")
  75. @property
  76. def network(self):
  77. raise NotImplementedError(
  78. "AzureCloudProvider does not implement this service")
  79. @property
  80. def security(self):
  81. return self._security
  82. @property
  83. def block_store(self):
  84. return self._block_store
  85. @property
  86. def object_store(self):
  87. return self._object_store
  88. @property
  89. def azure_client(self):
  90. return self._azure_client
  91. class MockAzureCloudProvider(AzureCloudProvider, TestMockHelperMixin):
  92. def __init__(self, config):
  93. super(MockAzureCloudProvider, self).__init__(config,
  94. MockAzureClient(self))
  95. def setUpMock(self):
  96. pass
  97. def tearDownMock(self):
  98. pass