|
@@ -2,26 +2,26 @@ import datetime
|
|
|
import logging
|
|
import logging
|
|
|
from io import BytesIO
|
|
from io import BytesIO
|
|
|
|
|
|
|
|
|
|
+import tenacity
|
|
|
|
|
+from cloudbridge.interfaces.exceptions import (DuplicateResourceException,
|
|
|
|
|
+ InvalidLabelException,
|
|
|
|
|
+ ProviderConnectionException,
|
|
|
|
|
+ WaitStateException)
|
|
|
|
|
+from msrestazure.azure_exceptions import CloudError
|
|
|
|
|
+
|
|
|
from azure.common import AzureConflictHttpError
|
|
from azure.common import AzureConflictHttpError
|
|
|
-from azure.identity import ClientSecretCredential
|
|
|
|
|
|
|
+from azure.core.exceptions import (ClientAuthenticationError,
|
|
|
|
|
+ HttpResponseError, ResourceExistsError,
|
|
|
|
|
+ ResourceNotFoundError)
|
|
|
from azure.cosmosdb.table.tableservice import TableService
|
|
from azure.cosmosdb.table.tableservice import TableService
|
|
|
|
|
+from azure.identity import ClientSecretCredential
|
|
|
from azure.mgmt.compute import ComputeManagementClient
|
|
from azure.mgmt.compute import ComputeManagementClient
|
|
|
from azure.mgmt.devtestlabs.models import GalleryImageReference
|
|
from azure.mgmt.devtestlabs.models import GalleryImageReference
|
|
|
from azure.mgmt.network import NetworkManagementClient
|
|
from azure.mgmt.network import NetworkManagementClient
|
|
|
from azure.mgmt.resource import ResourceManagementClient
|
|
from azure.mgmt.resource import ResourceManagementClient
|
|
|
from azure.mgmt.resource.subscriptions import SubscriptionClient
|
|
from azure.mgmt.resource.subscriptions import SubscriptionClient
|
|
|
from azure.mgmt.storage import StorageManagementClient
|
|
from azure.mgmt.storage import StorageManagementClient
|
|
|
-from azure.storage.blob import BlobSasPermissions
|
|
|
|
|
-from azure.storage.blob import BlobServiceClient
|
|
|
|
|
-
|
|
|
|
|
-from msrestazure.azure_exceptions import CloudError
|
|
|
|
|
-
|
|
|
|
|
-import tenacity
|
|
|
|
|
-
|
|
|
|
|
-from cloudbridge.interfaces.exceptions import DuplicateResourceException
|
|
|
|
|
-from cloudbridge.interfaces.exceptions import InvalidLabelException
|
|
|
|
|
-from cloudbridge.interfaces.exceptions import ProviderConnectionException
|
|
|
|
|
-from cloudbridge.interfaces.exceptions import WaitStateException
|
|
|
|
|
|
|
+from azure.storage.blob import BlobSasPermissions, BlobServiceClient
|
|
|
|
|
|
|
|
from . import helpers as azure_helpers
|
|
from . import helpers as azure_helpers
|
|
|
|
|
|
|
@@ -180,7 +180,7 @@ class AzureClient(object):
|
|
|
log.debug("azure subscription : %s", self.subscription_id)
|
|
log.debug("azure subscription : %s", self.subscription_id)
|
|
|
|
|
|
|
|
@property
|
|
@property
|
|
|
- @tenacity.retry(stop=tenacity.stop_after_attempt(5), reraise=True)
|
|
|
|
|
|
|
+ @tenacity.retry(stop=tenacity.stop.stop_after_attempt(5), reraise=True)
|
|
|
def access_key_result(self):
|
|
def access_key_result(self):
|
|
|
if not self._access_key_result:
|
|
if not self._access_key_result:
|
|
|
storage_account = self.storage_account
|
|
storage_account = self.storage_account
|
|
@@ -294,12 +294,12 @@ class AzureClient(object):
|
|
|
|
|
|
|
|
def create_storage_account(self, name, params):
|
|
def create_storage_account(self, name, params):
|
|
|
return self.storage_client.storage_accounts. \
|
|
return self.storage_client.storage_accounts. \
|
|
|
- create(self.resource_group, name.lower(), params).result()
|
|
|
|
|
|
|
+ begin_create(self.resource_group, name.lower(), params).result()
|
|
|
|
|
|
|
|
# Create a storage account. To prevent a race condition, try
|
|
# Create a storage account. To prevent a race condition, try
|
|
|
# to get or create at least twice
|
|
# to get or create at least twice
|
|
|
- @tenacity.retry(stop=tenacity.stop_after_attempt(2),
|
|
|
|
|
- retry=tenacity.retry_if_exception_type(CloudError),
|
|
|
|
|
|
|
+ @tenacity.retry(stop=tenacity.stop.stop_after_attempt(2),
|
|
|
|
|
+ retry=tenacity.retry.retry_if_exception_type(HttpResponseError),
|
|
|
reraise=True)
|
|
reraise=True)
|
|
|
def _get_or_create_storage_account(self):
|
|
def _get_or_create_storage_account(self):
|
|
|
if self._storage_account:
|
|
if self._storage_account:
|
|
@@ -308,8 +308,9 @@ class AzureClient(object):
|
|
|
try:
|
|
try:
|
|
|
self._storage_account = \
|
|
self._storage_account = \
|
|
|
self.get_storage_account(self.storage_account)
|
|
self.get_storage_account(self.storage_account)
|
|
|
- except CloudError as cloud_error:
|
|
|
|
|
- if cloud_error.error.error == "ResourceNotFound":
|
|
|
|
|
|
|
+ except HttpResponseError as cloud_error:
|
|
|
|
|
+
|
|
|
|
|
+ if isinstance(cloud_error, ResourceNotFoundError):
|
|
|
storage_account_params = {
|
|
storage_account_params = {
|
|
|
'sku': {
|
|
'sku': {
|
|
|
'name': 'Standard_LRS'
|
|
'name': 'Standard_LRS'
|
|
@@ -322,7 +323,7 @@ class AzureClient(object):
|
|
|
self.create_storage_account(self.storage_account,
|
|
self.create_storage_account(self.storage_account,
|
|
|
storage_account_params)
|
|
storage_account_params)
|
|
|
except CloudError as cloud_error2: # pragma: no cover
|
|
except CloudError as cloud_error2: # pragma: no cover
|
|
|
- if cloud_error2.error.error == "AuthorizationFailed":
|
|
|
|
|
|
|
+ if isinstance(cloud_error2, ClientAuthenticationError):
|
|
|
mess = 'The following error was returned by ' \
|
|
mess = 'The following error was returned by ' \
|
|
|
'Azure:\n%s\n\nThis is likely because the' \
|
|
'Azure:\n%s\n\nThis is likely because the' \
|
|
|
' Role associated with the provided ' \
|
|
' Role associated with the provided ' \
|
|
@@ -338,8 +339,7 @@ class AzureClient(object):
|
|
|
'access-control/overview\n' % cloud_error2
|
|
'access-control/overview\n' % cloud_error2
|
|
|
raise ProviderConnectionException(mess)
|
|
raise ProviderConnectionException(mess)
|
|
|
|
|
|
|
|
- elif cloud_error2.error.error == \
|
|
|
|
|
- "StorageAccountAlreadyTaken":
|
|
|
|
|
|
|
+ elif isinstance(cloud_error2, ResourceExistsError):
|
|
|
mess = 'The following error was ' \
|
|
mess = 'The following error was ' \
|
|
|
'returned by Azure:\n%s\n\n' \
|
|
'returned by Azure:\n%s\n\n' \
|
|
|
'Note that Storage Account names must be ' \
|
|
'Note that Storage Account names must be ' \
|
|
@@ -371,7 +371,7 @@ class AzureClient(object):
|
|
|
def update_vm_firewall_tags(self, fw_id, tags):
|
|
def update_vm_firewall_tags(self, fw_id, tags):
|
|
|
url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
|
|
|
fw_id)
|
|
fw_id)
|
|
|
- name = url_params.get(VM_FIREWALL_NAME)
|
|
|
|
|
|
|
+ name = url_params.get(VM_FIREWALL_NAME, "")
|
|
|
return self.network_management_client.network_security_groups. \
|
|
return self.network_management_client.network_security_groups. \
|
|
|
begin_create_or_update(self.resource_group, name,
|
|
begin_create_or_update(self.resource_group, name,
|
|
|
{'tags': tags,
|
|
{'tags': tags,
|
|
@@ -380,14 +380,14 @@ class AzureClient(object):
|
|
|
def get_vm_firewall(self, fw_id):
|
|
def get_vm_firewall(self, fw_id):
|
|
|
url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
|
|
|
fw_id)
|
|
fw_id)
|
|
|
- fw_name = url_params.get(VM_FIREWALL_NAME)
|
|
|
|
|
|
|
+ fw_name = url_params.get(VM_FIREWALL_NAME, "")
|
|
|
return self.network_management_client.network_security_groups. \
|
|
return self.network_management_client.network_security_groups. \
|
|
|
get(self.resource_group, fw_name)
|
|
get(self.resource_group, fw_name)
|
|
|
|
|
|
|
|
def delete_vm_firewall(self, fw_id):
|
|
def delete_vm_firewall(self, fw_id):
|
|
|
url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
|
|
|
fw_id)
|
|
fw_id)
|
|
|
- name = url_params.get(VM_FIREWALL_NAME)
|
|
|
|
|
|
|
+ name = url_params.get(VM_FIREWALL_NAME, "")
|
|
|
self.network_management_client \
|
|
self.network_management_client \
|
|
|
.network_security_groups.begin_delete(self.resource_group, name).wait()
|
|
.network_security_groups.begin_delete(self.resource_group, name).wait()
|
|
|
|
|
|
|
@@ -395,7 +395,7 @@ class AzureClient(object):
|
|
|
rule_name, parameters):
|
|
rule_name, parameters):
|
|
|
url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VM_FIREWALL_RESOURCE_ID,
|
|
|
fw_id)
|
|
fw_id)
|
|
|
- vm_firewall_name = url_params.get(VM_FIREWALL_NAME)
|
|
|
|
|
|
|
+ vm_firewall_name = url_params.get(VM_FIREWALL_NAME, "")
|
|
|
return self.network_management_client.security_rules. \
|
|
return self.network_management_client.security_rules. \
|
|
|
begin_create_or_update(self.resource_group, vm_firewall_name,
|
|
begin_create_or_update(self.resource_group, vm_firewall_name,
|
|
|
rule_name, parameters).result()
|
|
rule_name, parameters).result()
|
|
@@ -480,7 +480,7 @@ class AzureClient(object):
|
|
|
def get_disk(self, disk_id):
|
|
def get_disk(self, disk_id):
|
|
|
url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
|
|
|
disk_id)
|
|
disk_id)
|
|
|
- disk_name = url_params.get(VOLUME_NAME)
|
|
|
|
|
|
|
+ disk_name = url_params.get(VOLUME_NAME, "")
|
|
|
return self.compute_client.disks.get(self.resource_group, disk_name)
|
|
return self.compute_client.disks.get(self.resource_group, disk_name)
|
|
|
|
|
|
|
|
def list_disks(self):
|
|
def list_disks(self):
|
|
@@ -490,13 +490,13 @@ class AzureClient(object):
|
|
|
def delete_disk(self, disk_id):
|
|
def delete_disk(self, disk_id):
|
|
|
url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
|
|
|
disk_id)
|
|
disk_id)
|
|
|
- disk_name = url_params.get(VOLUME_NAME)
|
|
|
|
|
|
|
+ disk_name = url_params.get(VOLUME_NAME, "")
|
|
|
self.compute_client.disks.begin_delete(self.resource_group, disk_name).wait()
|
|
self.compute_client.disks.begin_delete(self.resource_group, disk_name).wait()
|
|
|
|
|
|
|
|
def update_disk_tags(self, disk_id, tags):
|
|
def update_disk_tags(self, disk_id, tags):
|
|
|
url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VOLUME_RESOURCE_ID,
|
|
|
disk_id)
|
|
disk_id)
|
|
|
- disk_name = url_params.get(VOLUME_NAME)
|
|
|
|
|
|
|
+ disk_name = url_params.get(VOLUME_NAME, "")
|
|
|
return self.compute_client.disks.begin_update(
|
|
return self.compute_client.disks.begin_update(
|
|
|
self.resource_group,
|
|
self.resource_group,
|
|
|
disk_name,
|
|
disk_name,
|
|
@@ -510,7 +510,7 @@ class AzureClient(object):
|
|
|
def get_snapshot(self, snapshot_id):
|
|
def get_snapshot(self, snapshot_id):
|
|
|
url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
|
|
|
snapshot_id)
|
|
snapshot_id)
|
|
|
- snapshot_name = url_params.get(SNAPSHOT_NAME)
|
|
|
|
|
|
|
+ snapshot_name = url_params.get(SNAPSHOT_NAME, "")
|
|
|
return self.compute_client.snapshots.get(self.resource_group,
|
|
return self.compute_client.snapshots.get(self.resource_group,
|
|
|
snapshot_name)
|
|
snapshot_name)
|
|
|
|
|
|
|
@@ -524,14 +524,14 @@ class AzureClient(object):
|
|
|
def delete_snapshot(self, snapshot_id):
|
|
def delete_snapshot(self, snapshot_id):
|
|
|
url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
|
|
|
snapshot_id)
|
|
snapshot_id)
|
|
|
- snapshot_name = url_params.get(SNAPSHOT_NAME)
|
|
|
|
|
|
|
+ snapshot_name = url_params.get(SNAPSHOT_NAME, "")
|
|
|
self.compute_client.snapshots.begin_delete(self.resource_group,
|
|
self.compute_client.snapshots.begin_delete(self.resource_group,
|
|
|
snapshot_name).wait()
|
|
snapshot_name).wait()
|
|
|
|
|
|
|
|
def update_snapshot_tags(self, snapshot_id, tags):
|
|
def update_snapshot_tags(self, snapshot_id, tags):
|
|
|
url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(SNAPSHOT_RESOURCE_ID,
|
|
|
snapshot_id)
|
|
snapshot_id)
|
|
|
- snapshot_name = url_params.get(SNAPSHOT_NAME)
|
|
|
|
|
|
|
+ snapshot_name = url_params.get(SNAPSHOT_NAME, "")
|
|
|
return self.compute_client.snapshots.begin_update(
|
|
return self.compute_client.snapshots.begin_update(
|
|
|
self.resource_group,
|
|
self.resource_group,
|
|
|
snapshot_name,
|
|
snapshot_name,
|
|
@@ -552,7 +552,7 @@ class AzureClient(object):
|
|
|
url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(IMAGE_RESOURCE_ID,
|
|
|
image_id)
|
|
image_id)
|
|
|
if not self.is_gallery_image(image_id):
|
|
if not self.is_gallery_image(image_id):
|
|
|
- name = url_params.get(IMAGE_NAME)
|
|
|
|
|
|
|
+ name = url_params.get(IMAGE_NAME, "")
|
|
|
self.compute_client.images.begin_delete(self.resource_group, name).wait()
|
|
self.compute_client.images.begin_delete(self.resource_group, name).wait()
|
|
|
|
|
|
|
|
def list_images(self):
|
|
def list_images(self):
|
|
@@ -572,7 +572,7 @@ class AzureClient(object):
|
|
|
sku=url_params['sku'],
|
|
sku=url_params['sku'],
|
|
|
version=url_params['version'])
|
|
version=url_params['version'])
|
|
|
else:
|
|
else:
|
|
|
- name = url_params.get(IMAGE_NAME)
|
|
|
|
|
|
|
+ name = url_params.get(IMAGE_NAME, "")
|
|
|
return self.compute_client.images.get(self.resource_group, name)
|
|
return self.compute_client.images.get(self.resource_group, name)
|
|
|
|
|
|
|
|
def update_image_tags(self, image_id, tags):
|
|
def update_image_tags(self, image_id, tags):
|
|
@@ -581,7 +581,7 @@ class AzureClient(object):
|
|
|
if self.is_gallery_image(image_id):
|
|
if self.is_gallery_image(image_id):
|
|
|
return True
|
|
return True
|
|
|
else:
|
|
else:
|
|
|
- name = url_params.get(IMAGE_NAME)
|
|
|
|
|
|
|
+ name = url_params.get(IMAGE_NAME, "")
|
|
|
return self.compute_client.images. \
|
|
return self.compute_client.images. \
|
|
|
begin_create_or_update(self.resource_group, name,
|
|
begin_create_or_update(self.resource_group, name,
|
|
|
{
|
|
{
|
|
@@ -600,7 +600,7 @@ class AzureClient(object):
|
|
|
def get_network(self, network_id):
|
|
def get_network(self, network_id):
|
|
|
url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID,
|
|
|
network_id)
|
|
network_id)
|
|
|
- network_name = url_params.get(NETWORK_NAME)
|
|
|
|
|
|
|
+ network_name = url_params.get(NETWORK_NAME, "")
|
|
|
return self.network_management_client.virtual_networks.get(
|
|
return self.network_management_client.virtual_networks.get(
|
|
|
self.resource_group, network_name)
|
|
self.resource_group, network_name)
|
|
|
|
|
|
|
@@ -610,13 +610,13 @@ class AzureClient(object):
|
|
|
|
|
|
|
|
def delete_network(self, network_id):
|
|
def delete_network(self, network_id):
|
|
|
url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
|
|
url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
|
|
|
- network_name = url_params.get(NETWORK_NAME)
|
|
|
|
|
|
|
+ network_name = url_params.get(NETWORK_NAME, "")
|
|
|
return self.network_management_client.virtual_networks. \
|
|
return self.network_management_client.virtual_networks. \
|
|
|
begin_delete(self.resource_group, network_name).wait()
|
|
begin_delete(self.resource_group, network_name).wait()
|
|
|
|
|
|
|
|
def update_network_tags(self, network_id, tags):
|
|
def update_network_tags(self, network_id, tags):
|
|
|
url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
|
|
url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
|
|
|
- network_name = url_params.get(NETWORK_NAME)
|
|
|
|
|
|
|
+ network_name = url_params.get(NETWORK_NAME, "")
|
|
|
return self.network_management_client.virtual_networks. \
|
|
return self.network_management_client.virtual_networks. \
|
|
|
begin_create_or_update(self.resource_group, network_name, tags).result()
|
|
begin_create_or_update(self.resource_group, network_name, tags).result()
|
|
|
|
|
|
|
@@ -629,21 +629,21 @@ class AzureClient(object):
|
|
|
|
|
|
|
|
def list_subnets(self, network_id):
|
|
def list_subnets(self, network_id):
|
|
|
url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
|
|
url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
|
|
|
- network_name = url_params.get(NETWORK_NAME)
|
|
|
|
|
|
|
+ network_name = url_params.get(NETWORK_NAME, "")
|
|
|
return self.network_management_client.subnets. \
|
|
return self.network_management_client.subnets. \
|
|
|
list(self.resource_group, network_name)
|
|
list(self.resource_group, network_name)
|
|
|
|
|
|
|
|
def get_subnet(self, subnet_id):
|
|
def get_subnet(self, subnet_id):
|
|
|
url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
|
|
|
subnet_id)
|
|
subnet_id)
|
|
|
- network_name = url_params.get(NETWORK_NAME)
|
|
|
|
|
- subnet_name = url_params.get(SUBNET_NAME)
|
|
|
|
|
|
|
+ network_name = url_params.get(NETWORK_NAME, "")
|
|
|
|
|
+ subnet_name = url_params.get(SUBNET_NAME, "")
|
|
|
return self.network_management_client.subnets. \
|
|
return self.network_management_client.subnets. \
|
|
|
get(self.resource_group, network_name, subnet_name)
|
|
get(self.resource_group, network_name, subnet_name)
|
|
|
|
|
|
|
|
def create_subnet(self, network_id, subnet_name, params):
|
|
def create_subnet(self, network_id, subnet_name, params):
|
|
|
url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
|
|
url_params = azure_helpers.parse_url(NETWORK_RESOURCE_ID, network_id)
|
|
|
- network_name = url_params.get(NETWORK_NAME)
|
|
|
|
|
|
|
+ network_name = url_params.get(NETWORK_NAME, "")
|
|
|
result_create = self.network_management_client \
|
|
result_create = self.network_management_client \
|
|
|
.subnets.begin_create_or_update(
|
|
.subnets.begin_create_or_update(
|
|
|
self.resource_group,
|
|
self.resource_group,
|
|
@@ -662,15 +662,15 @@ class AzureClient(object):
|
|
|
return True
|
|
return True
|
|
|
return False
|
|
return False
|
|
|
|
|
|
|
|
- @tenacity.retry(stop=tenacity.stop_after_attempt(5),
|
|
|
|
|
- retry=tenacity.retry_if_exception(__if_subnet_in_use),
|
|
|
|
|
- wait=tenacity.wait_fixed(5),
|
|
|
|
|
|
|
+ @tenacity.retry(stop=tenacity.stop.stop_after_attempt(5),
|
|
|
|
|
+ retry=tenacity.retry.retry_if_exception(__if_subnet_in_use),
|
|
|
|
|
+ wait=tenacity.wait.wait_fixed(5),
|
|
|
reraise=True)
|
|
reraise=True)
|
|
|
def delete_subnet(self, subnet_id):
|
|
def delete_subnet(self, subnet_id):
|
|
|
url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
|
|
|
subnet_id)
|
|
subnet_id)
|
|
|
- network_name = url_params.get(NETWORK_NAME)
|
|
|
|
|
- subnet_name = url_params.get(SUBNET_NAME)
|
|
|
|
|
|
|
+ network_name = url_params.get(NETWORK_NAME, "")
|
|
|
|
|
+ subnet_name = url_params.get(SUBNET_NAME, "")
|
|
|
|
|
|
|
|
try:
|
|
try:
|
|
|
result_delete = self.network_management_client \
|
|
result_delete = self.network_management_client \
|
|
@@ -692,14 +692,14 @@ class AzureClient(object):
|
|
|
def get_floating_ip(self, public_ip_id):
|
|
def get_floating_ip(self, public_ip_id):
|
|
|
url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
|
|
|
public_ip_id)
|
|
public_ip_id)
|
|
|
- public_ip_name = url_params.get(PUBLIC_IP_NAME)
|
|
|
|
|
|
|
+ public_ip_name = url_params.get(PUBLIC_IP_NAME, "")
|
|
|
return self.network_management_client. \
|
|
return self.network_management_client. \
|
|
|
public_ip_addresses.get(self.resource_group, public_ip_name)
|
|
public_ip_addresses.get(self.resource_group, public_ip_name)
|
|
|
|
|
|
|
|
def delete_floating_ip(self, public_ip_id):
|
|
def delete_floating_ip(self, public_ip_id):
|
|
|
url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
|
|
|
public_ip_id)
|
|
public_ip_id)
|
|
|
- public_ip_name = url_params.get(PUBLIC_IP_NAME)
|
|
|
|
|
|
|
+ public_ip_name = url_params.get(PUBLIC_IP_NAME, "")
|
|
|
self.network_management_client. \
|
|
self.network_management_client. \
|
|
|
public_ip_addresses.begin_delete(self.resource_group,
|
|
public_ip_addresses.begin_delete(self.resource_group,
|
|
|
public_ip_name).wait()
|
|
public_ip_name).wait()
|
|
@@ -707,7 +707,7 @@ class AzureClient(object):
|
|
|
def update_fip_tags(self, fip_id, tags):
|
|
def update_fip_tags(self, fip_id, tags):
|
|
|
url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
|
|
|
fip_id)
|
|
fip_id)
|
|
|
- fip_name = url_params.get(PUBLIC_IP_NAME)
|
|
|
|
|
|
|
+ fip_name = url_params.get(PUBLIC_IP_NAME, "")
|
|
|
self.network_management_client.public_ip_addresses. \
|
|
self.network_management_client.public_ip_addresses. \
|
|
|
begin_create_or_update(self.resource_group, fip_name, tags).result()
|
|
begin_create_or_update(self.resource_group, fip_name, tags).result()
|
|
|
|
|
|
|
@@ -723,21 +723,21 @@ class AzureClient(object):
|
|
|
def restart_vm(self, vm_id):
|
|
def restart_vm(self, vm_id):
|
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
|
vm_id)
|
|
vm_id)
|
|
|
- vm_name = url_params.get(VM_NAME)
|
|
|
|
|
|
|
+ vm_name = url_params.get(VM_NAME, "")
|
|
|
return self.compute_client.virtual_machines.begin_restart(
|
|
return self.compute_client.virtual_machines.begin_restart(
|
|
|
self.resource_group, vm_name).wait()
|
|
self.resource_group, vm_name).wait()
|
|
|
|
|
|
|
|
def delete_vm(self, vm_id):
|
|
def delete_vm(self, vm_id):
|
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
|
vm_id)
|
|
vm_id)
|
|
|
- vm_name = url_params.get(VM_NAME)
|
|
|
|
|
|
|
+ vm_name = url_params.get(VM_NAME, "")
|
|
|
return self.compute_client.virtual_machines.begin_delete(
|
|
return self.compute_client.virtual_machines.begin_delete(
|
|
|
self.resource_group, vm_name).wait()
|
|
self.resource_group, vm_name).wait()
|
|
|
|
|
|
|
|
def get_vm(self, vm_id):
|
|
def get_vm(self, vm_id):
|
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
|
vm_id)
|
|
vm_id)
|
|
|
- vm_name = url_params.get(VM_NAME)
|
|
|
|
|
|
|
+ vm_name = url_params.get(VM_NAME, "")
|
|
|
return self.compute_client.virtual_machines.get(
|
|
return self.compute_client.virtual_machines.get(
|
|
|
self.resource_group,
|
|
self.resource_group,
|
|
|
vm_name,
|
|
vm_name,
|
|
@@ -751,56 +751,56 @@ class AzureClient(object):
|
|
|
def update_vm(self, vm_id, params):
|
|
def update_vm(self, vm_id, params):
|
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
|
vm_id)
|
|
vm_id)
|
|
|
- vm_name = url_params.get(VM_NAME)
|
|
|
|
|
|
|
+ vm_name = url_params.get(VM_NAME, "")
|
|
|
return self.compute_client.virtual_machines. \
|
|
return self.compute_client.virtual_machines. \
|
|
|
begin_create_or_update(self.resource_group, vm_name, params).wait()
|
|
begin_create_or_update(self.resource_group, vm_name, params).wait()
|
|
|
|
|
|
|
|
def deallocate_vm(self, vm_id):
|
|
def deallocate_vm(self, vm_id):
|
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
|
vm_id)
|
|
vm_id)
|
|
|
- vm_name = url_params.get(VM_NAME)
|
|
|
|
|
|
|
+ vm_name = url_params.get(VM_NAME, "")
|
|
|
self.compute_client. \
|
|
self.compute_client. \
|
|
|
virtual_machines.begin_deallocate(self.resource_group, vm_name).wait()
|
|
virtual_machines.begin_deallocate(self.resource_group, vm_name).wait()
|
|
|
|
|
|
|
|
def generalize_vm(self, vm_id):
|
|
def generalize_vm(self, vm_id):
|
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
|
vm_id)
|
|
vm_id)
|
|
|
- vm_name = url_params.get(VM_NAME)
|
|
|
|
|
|
|
+ vm_name = url_params.get(VM_NAME, "")
|
|
|
self.compute_client.virtual_machines. \
|
|
self.compute_client.virtual_machines. \
|
|
|
generalize(self.resource_group, vm_name)
|
|
generalize(self.resource_group, vm_name)
|
|
|
|
|
|
|
|
def start_vm(self, vm_id):
|
|
def start_vm(self, vm_id):
|
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
|
vm_id)
|
|
vm_id)
|
|
|
- vm_name = url_params.get(VM_NAME)
|
|
|
|
|
|
|
+ vm_name = url_params.get(VM_NAME, "")
|
|
|
self.compute_client.virtual_machines. \
|
|
self.compute_client.virtual_machines. \
|
|
|
begin_start(self.resource_group, vm_name).wait()
|
|
begin_start(self.resource_group, vm_name).wait()
|
|
|
|
|
|
|
|
def update_vm_tags(self, vm_id, tags):
|
|
def update_vm_tags(self, vm_id, tags):
|
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(VM_RESOURCE_ID,
|
|
|
vm_id)
|
|
vm_id)
|
|
|
- vm_name = url_params.get(VM_NAME)
|
|
|
|
|
|
|
+ vm_name = url_params.get(VM_NAME, "")
|
|
|
self.compute_client.virtual_machines. \
|
|
self.compute_client.virtual_machines. \
|
|
|
begin_create_or_update(self.resource_group, vm_name, tags).result()
|
|
begin_create_or_update(self.resource_group, vm_name, tags).result()
|
|
|
|
|
|
|
|
def delete_nic(self, nic_id):
|
|
def delete_nic(self, nic_id):
|
|
|
nic_params = azure_helpers.\
|
|
nic_params = azure_helpers.\
|
|
|
parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
|
|
parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
|
|
|
- nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
|
|
|
|
|
|
|
+ nic_name = nic_params.get(NETWORK_INTERFACE_NAME, "")
|
|
|
self.network_management_client. \
|
|
self.network_management_client. \
|
|
|
network_interfaces.begin_delete(self.resource_group, nic_name).wait()
|
|
network_interfaces.begin_delete(self.resource_group, nic_name).wait()
|
|
|
|
|
|
|
|
def get_nic(self, nic_id):
|
|
def get_nic(self, nic_id):
|
|
|
nic_params = azure_helpers.\
|
|
nic_params = azure_helpers.\
|
|
|
parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
|
|
parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
|
|
|
- nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
|
|
|
|
|
|
|
+ nic_name = nic_params.get(NETWORK_INTERFACE_NAME, "")
|
|
|
return self.network_management_client. \
|
|
return self.network_management_client. \
|
|
|
network_interfaces.get(self.resource_group, nic_name)
|
|
network_interfaces.get(self.resource_group, nic_name)
|
|
|
|
|
|
|
|
def update_nic(self, nic_id, params):
|
|
def update_nic(self, nic_id, params):
|
|
|
nic_params = azure_helpers.\
|
|
nic_params = azure_helpers.\
|
|
|
parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
|
|
parse_url(NETWORK_INTERFACE_RESOURCE_ID, nic_id)
|
|
|
- nic_name = nic_params.get(NETWORK_INTERFACE_NAME)
|
|
|
|
|
|
|
+ nic_name = nic_params.get(NETWORK_INTERFACE_NAME, "")
|
|
|
async_nic_creation = self.network_management_client. \
|
|
async_nic_creation = self.network_management_client. \
|
|
|
network_interfaces.begin_create_or_update(
|
|
network_interfaces.begin_create_or_update(
|
|
|
self.resource_group,
|
|
self.resource_group,
|
|
@@ -849,8 +849,8 @@ class AzureClient(object):
|
|
|
def attach_subnet_to_route_table(self, subnet_id, route_table_id):
|
|
def attach_subnet_to_route_table(self, subnet_id, route_table_id):
|
|
|
url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
|
|
|
subnet_id)
|
|
subnet_id)
|
|
|
- network_name = url_params.get(NETWORK_NAME)
|
|
|
|
|
- subnet_name = url_params.get(SUBNET_NAME)
|
|
|
|
|
|
|
+ network_name = url_params.get(NETWORK_NAME, "")
|
|
|
|
|
+ subnet_name = url_params.get(SUBNET_NAME, "")
|
|
|
|
|
|
|
|
subnet_info = self.network_management_client.subnets.get(
|
|
subnet_info = self.network_management_client.subnets.get(
|
|
|
self.resource_group,
|
|
self.resource_group,
|
|
@@ -867,7 +867,7 @@ class AzureClient(object):
|
|
|
self.resource_group,
|
|
self.resource_group,
|
|
|
network_name,
|
|
network_name,
|
|
|
subnet_name,
|
|
subnet_name,
|
|
|
- subnet_info)
|
|
|
|
|
|
|
+ subnet_info) #type: ignore
|
|
|
subnet_info = result_create.result()
|
|
subnet_info = result_create.result()
|
|
|
|
|
|
|
|
return subnet_info
|
|
return subnet_info
|
|
@@ -875,8 +875,8 @@ class AzureClient(object):
|
|
|
def detach_subnet_to_route_table(self, subnet_id, route_table_id):
|
|
def detach_subnet_to_route_table(self, subnet_id, route_table_id):
|
|
|
url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(SUBNET_RESOURCE_ID,
|
|
|
subnet_id)
|
|
subnet_id)
|
|
|
- network_name = url_params.get(NETWORK_NAME)
|
|
|
|
|
- subnet_name = url_params.get(SUBNET_NAME)
|
|
|
|
|
|
|
+ network_name = url_params.get(NETWORK_NAME, "")
|
|
|
|
|
+ subnet_name = url_params.get(SUBNET_NAME, "")
|
|
|
|
|
|
|
|
subnet_info = self.network_management_client.subnets.get(
|
|
subnet_info = self.network_management_client.subnets.get(
|
|
|
self.resource_group,
|
|
self.resource_group,
|
|
@@ -892,7 +892,7 @@ class AzureClient(object):
|
|
|
self.resource_group,
|
|
self.resource_group,
|
|
|
network_name,
|
|
network_name,
|
|
|
subnet_name,
|
|
subnet_name,
|
|
|
- subnet_info)
|
|
|
|
|
|
|
+ subnet_info) #type: ignore
|
|
|
subnet_info = result_create.result()
|
|
subnet_info = result_create.result()
|
|
|
|
|
|
|
|
return subnet_info
|
|
return subnet_info
|
|
@@ -904,7 +904,7 @@ class AzureClient(object):
|
|
|
def get_route_table(self, router_id):
|
|
def get_route_table(self, router_id):
|
|
|
url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
|
|
url_params = azure_helpers.parse_url(ROUTER_RESOURCE_ID,
|
|
|
router_id)
|
|
router_id)
|
|
|
- router_name = url_params.get(ROUTER_NAME)
|
|
|
|
|
|
|
+ router_name = url_params.get(ROUTER_NAME, "")
|
|
|
return self.network_management_client. \
|
|
return self.network_management_client. \
|
|
|
route_tables.get(self.resource_group, router_name)
|
|
route_tables.get(self.resource_group, router_name)
|
|
|
|
|
|