mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-02 14:40:19 -07:00
Add support for Azure 2.0.0 (#27920)
* Adapt azure_rm_resource_group to azure 2.0.0 + azure Cli support * Fix exceptions in Azure ARM plugins * update azure_rm_networkinterface documention to reflect required params * change state param to not required for docs in azure_rm_subnet * fix import to reflect azure==2.0.0 changes * add aliases and fix docs for azure_rm_storageblob * add resource_group_name alias to azure_rm_storageaccount_facts * fix import bug due to change in azure==2.0.0 * fix args bug and enum modules issue * update docs to reflect azure==2.0.0 * pin management clients to a specific api_version * update docs to reflect the new azure-ansible-base python package * add fallback for older api resource group listing * rework azure dependencies installation * refactor path joining to a cross-plat solution
This commit is contained in:
parent
1b9d9376e2
commit
e4cd899363
17 changed files with 151 additions and 51 deletions
|
@ -371,6 +371,13 @@ import time
|
|||
|
||||
try:
|
||||
from azure.common.credentials import ServicePrincipalCredentials
|
||||
import time
|
||||
import yaml
|
||||
except ImportError as exc:
|
||||
IMPORT_ERROR = "Error importing module prerequisites: %s" % exc
|
||||
|
||||
try:
|
||||
from itertools import chain
|
||||
from azure.common.exceptions import CloudError
|
||||
from azure.mgmt.resource.resources.models import (DeploymentProperties,
|
||||
ParametersLink,
|
||||
|
|
|
@ -57,7 +57,7 @@ options:
|
|||
when creating a network interface.
|
||||
aliases:
|
||||
- virtual_network
|
||||
required: false
|
||||
required: true
|
||||
default: null
|
||||
subnet_name:
|
||||
description:
|
||||
|
@ -65,7 +65,7 @@ options:
|
|||
interface
|
||||
aliases:
|
||||
- subnet
|
||||
required: false
|
||||
required: true
|
||||
default: null
|
||||
os_type:
|
||||
description:
|
||||
|
|
|
@ -233,9 +233,12 @@ class AzureRMResourceGroup(AzureRMModuleBase):
|
|||
def resources_exist(self):
|
||||
found = False
|
||||
try:
|
||||
response = self.rm_client.resources.list_by_resource_group(self.name)
|
||||
except AttributeError:
|
||||
response = self.rm_client.resource_groups.list_resources(self.name)
|
||||
except Exception as exc:
|
||||
self.fail("Error checking for resource existence in {0} - {1}".format(self.name, str(exc)))
|
||||
|
||||
for item in response:
|
||||
found = True
|
||||
break
|
||||
|
|
|
@ -81,7 +81,6 @@ azure_resourcegroups:
|
|||
|
||||
try:
|
||||
from msrestazure.azure_exceptions import CloudError
|
||||
from azure.common import AzureMissingResourceHttpError, AzureHttpError
|
||||
except:
|
||||
# This is handled in azure_rm_common
|
||||
pass
|
||||
|
@ -144,7 +143,7 @@ class AzureRMResourceGroupFacts(AzureRMModuleBase):
|
|||
self.log('List all items')
|
||||
try:
|
||||
response = self.rm_client.resource_groups.list()
|
||||
except AzureHttpError as exc:
|
||||
except CloudError as exc:
|
||||
self.fail("Failed to list all items - {1}".format(str(exc)))
|
||||
|
||||
results = []
|
||||
|
|
|
@ -328,11 +328,12 @@ state:
|
|||
|
||||
try:
|
||||
from msrestazure.azure_exceptions import CloudError
|
||||
from azure.common import AzureHttpError
|
||||
from azure.mgmt.network.models import NetworkSecurityGroup, SecurityRule
|
||||
from azure.mgmt.network.models.network_management_client_enums import (SecurityRuleAccess,
|
||||
SecurityRuleDirection,
|
||||
SecurityRuleProtocol)
|
||||
from azure.mgmt.network.models import (
|
||||
SecurityRuleAccess,
|
||||
SecurityRuleDirection,
|
||||
SecurityRuleProtocol
|
||||
)
|
||||
except ImportError:
|
||||
# This is handled in azure_rm_common
|
||||
pass
|
||||
|
@ -694,7 +695,7 @@ class AzureRMSecurityGroup(AzureRMModuleBase):
|
|||
self.name,
|
||||
parameters)
|
||||
result = self.get_poller_result(poller)
|
||||
except AzureHttpError as exc:
|
||||
except CloudError as exc:
|
||||
self.fail("Error creating/updating security group {0} - {1}".format(self.name, str(exc)))
|
||||
return create_network_security_group_dict(result)
|
||||
|
||||
|
@ -702,7 +703,7 @@ class AzureRMSecurityGroup(AzureRMModuleBase):
|
|||
try:
|
||||
poller = self.network_client.network_security_groups.delete(self.resource_group, self.name)
|
||||
result = self.get_poller_result(poller)
|
||||
except AzureHttpError as exc:
|
||||
except CloudError as exc:
|
||||
raise Exception("Error deleting security group {0} - {1}".format(self.name, str(exc)))
|
||||
return result
|
||||
|
||||
|
|
|
@ -194,7 +194,6 @@ azure_securitygroups:
|
|||
|
||||
try:
|
||||
from msrestazure.azure_exceptions import CloudError
|
||||
from azure.common import AzureMissingResourceHttpError, AzureHttpError
|
||||
except:
|
||||
# This is handled in azure_rm_common
|
||||
pass
|
||||
|
|
|
@ -26,6 +26,8 @@ options:
|
|||
description:
|
||||
- Name of the resource group to use.
|
||||
required: true
|
||||
aliases:
|
||||
- resource_group_name
|
||||
name:
|
||||
description:
|
||||
- Name of the storage account to update or create.
|
||||
|
@ -141,8 +143,8 @@ state:
|
|||
try:
|
||||
from msrestazure.azure_exceptions import CloudError
|
||||
from azure.storage.cloudstorageaccount import CloudStorageAccount
|
||||
from azure.common import AzureMissingResourceHttpError, AzureHttpError
|
||||
from azure.mgmt.storage.models.storage_management_client_enums import ProvisioningState, SkuName, SkuTier, Kind
|
||||
from azure.common import AzureMissingResourceHttpError
|
||||
from azure.mgmt.storage.models import ProvisioningState, SkuName, SkuTier, Kind
|
||||
from azure.mgmt.storage.models import StorageAccountUpdateParameters, CustomDomain, \
|
||||
StorageAccountCreateParameters, Sku
|
||||
except ImportError:
|
||||
|
@ -161,7 +163,7 @@ class AzureRMStorageAccount(AzureRMModuleBase):
|
|||
custom_domain=dict(type='dict'),
|
||||
location=dict(type='str'),
|
||||
name=dict(type='str', required=True),
|
||||
resource_group=dict(required=True, type='str'),
|
||||
resource_group=dict(required=True, type='str', aliases=['resource_group_name']),
|
||||
state=dict(default='present', choices=['present', 'absent']),
|
||||
force=dict(type='bool', default=False),
|
||||
tags=dict(type='dict'),
|
||||
|
@ -237,7 +239,7 @@ class AzureRMStorageAccount(AzureRMModuleBase):
|
|||
self.log('Checking name availability for {0}'.format(self.name))
|
||||
try:
|
||||
response = self.storage_client.storage_accounts.check_name_availability(self.name)
|
||||
except AzureHttpError as e:
|
||||
except CloudError as e:
|
||||
self.log('Error attempting to validate name.')
|
||||
self.fail("Error checking name availability: {0}".format(str(e)))
|
||||
if not response.name_available:
|
||||
|
@ -386,7 +388,7 @@ class AzureRMStorageAccount(AzureRMModuleBase):
|
|||
try:
|
||||
poller = self.storage_client.storage_accounts.create(self.resource_group, self.name, parameters)
|
||||
self.get_poller_result(poller)
|
||||
except AzureHttpError as e:
|
||||
except CloudError as e:
|
||||
self.log('Error creating storage account.')
|
||||
self.fail("Failed to create account: {0}".format(str(e)))
|
||||
# the poller doesn't actually return anything
|
||||
|
@ -404,7 +406,7 @@ class AzureRMStorageAccount(AzureRMModuleBase):
|
|||
status = self.storage_client.storage_accounts.delete(self.resource_group, self.name)
|
||||
self.log("delete status: ")
|
||||
self.log(str(status))
|
||||
except AzureHttpError as e:
|
||||
except CloudError as e:
|
||||
self.fail("Failed to delete the account: {0}".format(str(e)))
|
||||
return True
|
||||
|
||||
|
|
|
@ -36,6 +36,8 @@ options:
|
|||
- Limit results to a resource group. Required when filtering by name.
|
||||
required: false
|
||||
default: null
|
||||
aliases:
|
||||
- resource_group_name
|
||||
tags:
|
||||
description:
|
||||
- Limit results by providing a list of tags. Format tags as 'key' or 'key:value'.
|
||||
|
@ -97,7 +99,6 @@ azure_storageaccounts:
|
|||
|
||||
try:
|
||||
from msrestazure.azure_exceptions import CloudError
|
||||
from azure.common import AzureMissingResourceHttpError, AzureHttpError
|
||||
except:
|
||||
# This is handled in azure_rm_common
|
||||
pass
|
||||
|
@ -113,7 +114,7 @@ class AzureRMStorageAccountFacts(AzureRMModuleBase):
|
|||
|
||||
self.module_arg_spec = dict(
|
||||
name=dict(type='str'),
|
||||
resource_group=dict(type='str'),
|
||||
resource_group=dict(type='str', aliases=['resource_group_name']),
|
||||
tags=dict(type='list'),
|
||||
)
|
||||
|
||||
|
|
|
@ -29,6 +29,7 @@ options:
|
|||
required: true
|
||||
aliases:
|
||||
- account_name
|
||||
- storage_account
|
||||
blob:
|
||||
description:
|
||||
- Name of a blob object within the container.
|
||||
|
@ -89,6 +90,8 @@ options:
|
|||
description:
|
||||
- Name of the resource group to use.
|
||||
required: true
|
||||
aliases:
|
||||
- resource_group_name
|
||||
src:
|
||||
description:
|
||||
- Source file path. Use with state 'present' to upload a blob.
|
||||
|
@ -207,12 +210,12 @@ class AzureRMStorageBlob(AzureRMModuleBase):
|
|||
def __init__(self):
|
||||
|
||||
self.module_arg_spec = dict(
|
||||
storage_account_name=dict(required=True, type='str', aliases=['account_name']),
|
||||
storage_account_name=dict(required=True, type='str', aliases=['account_name', 'storage_account']),
|
||||
blob=dict(type='str', aliases=['blob_name']),
|
||||
container=dict(required=True, type='str', aliases=['container_name']),
|
||||
dest=dict(type='str'),
|
||||
force=dict(type='bool', default=False),
|
||||
resource_group=dict(required=True, type='str'),
|
||||
resource_group=dict(required=True, type='str', aliases=['resource_group_name']),
|
||||
src=dict(type='str'),
|
||||
state=dict(type='str', default='present', choices=['absent', 'present']),
|
||||
public_access=dict(type='str', choices=['container', 'blob']),
|
||||
|
|
|
@ -50,7 +50,7 @@ options:
|
|||
description:
|
||||
- Assert the state of the subnet. Use 'present' to create or update a subnet and
|
||||
'absent' to delete a subnet.
|
||||
required: true
|
||||
required: false
|
||||
default: present
|
||||
choices:
|
||||
- absent
|
||||
|
|
|
@ -416,8 +416,8 @@ try:
|
|||
from azure.mgmt.network.models import PublicIPAddress, NetworkSecurityGroup, NetworkInterface, \
|
||||
NetworkInterfaceIPConfiguration, Subnet
|
||||
from azure.mgmt.storage.models import StorageAccountCreateParameters, Sku
|
||||
from azure.mgmt.storage.models.storage_management_client_enums import Kind, SkuTier, SkuName
|
||||
from azure.mgmt.compute.models.compute_management_client_enums import VirtualMachineSizeTypes, DiskCreateOptionTypes
|
||||
from azure.mgmt.storage.models import Kind, SkuTier, SkuName
|
||||
from azure.mgmt.compute.models import VirtualMachineSizeTypes, DiskCreateOptionTypes
|
||||
except ImportError:
|
||||
# This is handled in azure_rm_common
|
||||
pass
|
||||
|
@ -427,7 +427,7 @@ from ansible.module_utils.azure_rm_common import AzureRMModuleBase, azure_id_to_
|
|||
|
||||
AZURE_OBJECT_CLASS = 'VirtualMachine'
|
||||
|
||||
AZURE_ENUM_MODULES = ['azure.mgmt.compute.models.compute_management_client_enums']
|
||||
AZURE_ENUM_MODULES = ['azure.mgmt.compute.models']
|
||||
|
||||
|
||||
def extract_names_from_blob_uri(blob_uri):
|
||||
|
@ -711,9 +711,9 @@ class AzureRMVirtualMachine(AzureRMModuleBase):
|
|||
),
|
||||
storage_profile=StorageProfile(
|
||||
os_disk=OSDisk(
|
||||
self.storage_blob_name,
|
||||
vhd,
|
||||
DiskCreateOptionTypes.from_image,
|
||||
name=self.storage_blob_name,
|
||||
vhd=vhd,
|
||||
create_option=DiskCreateOptionTypes.from_image,
|
||||
caching=self.os_disk_caching,
|
||||
),
|
||||
image_reference=ImageReference(
|
||||
|
|
|
@ -103,7 +103,6 @@ azure_vmimages:
|
|||
|
||||
try:
|
||||
from msrestazure.azure_exceptions import CloudError
|
||||
from azure.common import AzureMissingResourceHttpError, AzureHttpError
|
||||
except:
|
||||
# This is handled in azure_rm_common
|
||||
pass
|
||||
|
|
|
@ -92,7 +92,6 @@ azure_virtualnetworks:
|
|||
|
||||
try:
|
||||
from msrestazure.azure_exceptions import CloudError
|
||||
from azure.common import AzureMissingResourceHttpError, AzureHttpError
|
||||
except:
|
||||
# This is handled in azure_rm_common
|
||||
pass
|
||||
|
@ -157,7 +156,7 @@ class AzureRMNetworkInterfaceFacts(AzureRMModuleBase):
|
|||
self.log('List items for resource group')
|
||||
try:
|
||||
response = self.network_client.virtual_networks.list(self.resource_group)
|
||||
except AzureHttpError as exc:
|
||||
except CloudError as exc:
|
||||
self.fail("Failed to list for resource group {0} - {1}".format(self.resource_group, str(exc)))
|
||||
|
||||
results = []
|
||||
|
@ -170,7 +169,7 @@ class AzureRMNetworkInterfaceFacts(AzureRMModuleBase):
|
|||
self.log('List all for items')
|
||||
try:
|
||||
response = self.network_client.virtual_networks.list_all()
|
||||
except AzureHttpError as exc:
|
||||
except CloudError as exc:
|
||||
self.fail("Failed to list all items - {0}".format(str(exc)))
|
||||
|
||||
results = []
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue