azure_client.py 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. import logging
  2. from io import BytesIO
  3. from azure.common.credentials import ServicePrincipalCredentials
  4. from azure.mgmt.compute import ComputeManagementClient
  5. from azure.mgmt.network import NetworkManagementClient
  6. from azure.mgmt.resource import ResourceManagementClient
  7. from azure.mgmt.resource.subscriptions import SubscriptionClient
  8. from azure.mgmt.storage import StorageManagementClient
  9. from azure.storage.blob import BlockBlobService
  10. log = logging.getLogger(__name__)
  11. class AzureClient(object):
  12. def __init__(self, config):
  13. self._config = config
  14. self.subscription_id = config.get('azure_subscription_id')
  15. credentials = ServicePrincipalCredentials(
  16. client_id=config.get('azure_client_Id'),
  17. secret=config.get('azure_secret'),
  18. tenant=config.get('azure_tenant')
  19. )
  20. self._resource_client = ResourceManagementClient(credentials,
  21. self.subscription_id)
  22. self._storage_client = StorageManagementClient(credentials,
  23. self.subscription_id)
  24. self._network_management_client = NetworkManagementClient(
  25. credentials, self.subscription_id)
  26. self._subscription_client = SubscriptionClient(credentials)
  27. self._compute_client = ComputeManagementClient(credentials,
  28. self.subscription_id)
  29. self._access_key_result = None
  30. self._block_blob_service = None
  31. log.debug("azure subscription : %s", self.subscription_id)
  32. @property
  33. def access_key_result(self):
  34. if not self._access_key_result:
  35. self._access_key_result = self.storage_client.storage_accounts. \
  36. list_keys(self.resource_group_name, self.storage_account_name)
  37. return self._access_key_result
  38. @property
  39. def resource_group_name(self):
  40. return self._config.get('azure_resource_group')
  41. @property
  42. def storage_account_name(self):
  43. return self._config.get('azure_storage_account_name')
  44. @property
  45. def region_name(self):
  46. return self._config.get('azure_region_name')
  47. @property
  48. def storage_client(self):
  49. return self._storage_client
  50. @property
  51. def subscription_client(self):
  52. return self._subscription_client
  53. @property
  54. def resource_client(self):
  55. return self._resource_client
  56. @property
  57. def compute_client(self):
  58. return self._compute_client
  59. @property
  60. def network_management_client(self):
  61. return self._network_management_client
  62. @property
  63. def blob_service(self):
  64. if not self._block_blob_service:
  65. self._block_blob_service = BlockBlobService(
  66. self.storage_account_name,
  67. self.access_key_result.keys[0].value)
  68. return self._block_blob_service
  69. def get_resource_group(self, name):
  70. return self.resource_client.resource_groups.get(name)
  71. def create_resource_group(self, name, parameters):
  72. return self.resource_client.resource_groups. \
  73. create_or_update(name, parameters)
  74. def get_storage_account(self, storage_account_name):
  75. return self.storage_client.storage_accounts. \
  76. get_properties(self.resource_group_name, storage_account_name)
  77. def create_storage_account(self, name, params):
  78. return self.storage_client.storage_accounts. \
  79. create(self.resource_group_name, name, params).result()
  80. def list_locations(self):
  81. return self.subscription_client.subscriptions. \
  82. list_locations(self.subscription_id)
  83. def list_security_group(self):
  84. return self.network_management_client.network_security_groups. \
  85. list(self.resource_group_name)
  86. def create_security_group(self, name, parameters):
  87. return self.network_management_client.network_security_groups. \
  88. create_or_update(self.resource_group_name, name,
  89. parameters).result()
  90. def update_security_group_tags(self, name, tags):
  91. return self.network_management_client.network_security_groups. \
  92. create_or_update(self.resource_group_name, name,
  93. {'tags': tags}).result()
  94. def create_security_group_rule(self, security_group,
  95. rule_name, parameters):
  96. return self.network_management_client.security_rules. \
  97. create_or_update(self.resource_group_name, security_group,
  98. rule_name, parameters).result()
  99. def delete_security_group_rule(self, name, security_group):
  100. return self.network_management_client.security_rules. \
  101. delete(self.resource_group_name, security_group, name).result()
  102. def get_security_group(self, name):
  103. return self.network_management_client.network_security_groups. \
  104. get(self.resource_group_name, name)
  105. def delete_security_group(self, name):
  106. delete_async = self.network_management_client \
  107. .network_security_groups. \
  108. delete(self.resource_group_name, name)
  109. delete_async.wait()
  110. def list_containers(self, prefix=None):
  111. return self.blob_service.list_containers(prefix=prefix)
  112. def create_container(self, container_name):
  113. self.blob_service.create_container(container_name)
  114. return self.blob_service.get_container_properties(container_name)
  115. def get_container(self, container_name):
  116. return self.blob_service.get_container_properties(container_name)
  117. def delete_container(self, container_name):
  118. self.blob_service.delete_container(container_name)
  119. def list_blobs(self, container_name, prefix=None):
  120. return self.blob_service.list_blobs(container_name, prefix=prefix)
  121. def get_blob(self, container_name, blob_name):
  122. return self.blob_service.get_blob_properties(container_name, blob_name)
  123. def create_blob_from_text(self, container_name, blob_name, text):
  124. self.blob_service.create_blob_from_text(container_name,
  125. blob_name, text)
  126. def create_blob_from_file(self, container_name, blob_name, file_path):
  127. self.blob_service.create_blob_from_path(container_name,
  128. blob_name, file_path)
  129. def delete_blob(self, container_name, blob_name):
  130. self.blob_service.delete_blob(container_name, blob_name)
  131. def get_blob_url(self, container_name, blob_name):
  132. return self.blob_service.make_blob_url(container_name, blob_name)
  133. def get_blob_content(self, container_name, blob_name):
  134. out_stream = BytesIO()
  135. self.blob_service.get_blob_to_stream(container_name,
  136. blob_name, out_stream)
  137. return out_stream
  138. def create_empty_disk(self, disk_name, params):
  139. return self.compute_client.disks.create_or_update(
  140. self.resource_group_name,
  141. disk_name,
  142. params,
  143. raw=True
  144. )
  145. def create_snapshot_disk(self, disk_name, params):
  146. return self.compute_client.disks.create_or_update(
  147. self.resource_group_name,
  148. disk_name,
  149. params,
  150. raw=True
  151. )
  152. def list_snapshots(self):
  153. return self.compute_client.snapshots. \
  154. list_by_resource_group(self.resource_group_name)
  155. def update_disk_tags(self, disk_name, tags):
  156. return self.compute_client.disks.update(
  157. self.resource_group_name,
  158. disk_name,
  159. {'tags': tags},
  160. raw=True
  161. )
  162. def get_disk(self, disk_name):
  163. return self.compute_client.disks. \
  164. get(self.resource_group_name, disk_name)
  165. def list_disks(self):
  166. return self.compute_client.disks. \
  167. list_by_resource_group(self.resource_group_name)
  168. def delete_disk(self, disk_name):
  169. async_deletion = self.compute_client.disks. \
  170. delete(self.resource_group_name, disk_name)
  171. async_deletion.wait()
  172. def get_snapshot(self, snapshot_name):
  173. return self.compute_client.snapshots.get(self.resource_group_name,
  174. snapshot_name)
  175. def create_snapshot(self, snapshot_name, params):
  176. return self.compute_client.snapshots.create_or_update(
  177. self.resource_group_name,
  178. snapshot_name,
  179. params,
  180. raw=True
  181. )
  182. def delete_snapshot(self, snapshot_name):
  183. async_delete = self.compute_client.snapshots. \
  184. delete(self.resource_group_name, snapshot_name)
  185. async_delete.wait()
  186. def update_snapshot_tags(self, snapshot_name, tags):
  187. return self.compute_client.snapshots.update(
  188. self.resource_group_name,
  189. snapshot_name,
  190. {'tags': tags},
  191. raw=True
  192. )
  193. def get_vm(self, vm_name):
  194. return self.compute_client.virtual_machines.get(
  195. self.resource_group_name,
  196. vm_name
  197. )
  198. def create_or_update_vm(self, vm_name, params):
  199. return self.compute_client\
  200. .virtual_machines.create_or_update(
  201. self.resource_group_name,
  202. vm_name,
  203. params,
  204. raw=True
  205. )
  206. def list_vm(self):
  207. return self.compute_client.\
  208. virtual_machines.list(self.resource_group_name)