@ -26,7 +26,7 @@ import copy
import importlib
import inspect
from distutils. version import Loose Version
from packaging. version import Version
from os . path import expanduser
from ansible . module_utils . basic import AnsibleModule
@ -73,9 +73,18 @@ AZURE_FAILED_STATE = "Failed"
HAS_AZURE = True
HAS_AZURE_EXC = None
HAS_MSRESTAZURE = True
HAS_MSRESTAZURE_EXC = None
# NB: packaging issue sometimes cause msrestazure not to be installed, check it separately
try :
from enum import Enum
from msrest . serialization import Serializer
except ImportError as exc :
HAS_MSRESTAZURE_EXC = exc
HAS_MSRESTAZURE = False
try :
from enum import Enum
from msrestazure . azure_exceptions import CloudError
from azure . mgmt . network . models import PublicIPAddress , NetworkSecurityGroup , SecurityRule , NetworkInterface , \
NetworkInterfaceIPConfiguration , Subnet
@ -93,7 +102,6 @@ except ImportError as exc:
HAS_AZURE_EXC = exc
HAS_AZURE = False
def azure_id_to_dict ( id ) :
pieces = re . sub ( r ' ^ \ / ' , ' ' , id ) . split ( ' / ' )
result = { }
@ -143,8 +151,12 @@ class AzureRMModuleBase(object):
supports_check_mode = supports_check_mode ,
required_if = merged_required_if )
if not HAS_MSRESTAZURE :
self . fail ( " Do you have msrestazure installed? Try `pip install msrestazure` "
" - {0} " . format ( HAS_MSRESTAZURE_EXC ) )
if not HAS_AZURE :
self . fail ( " Do you have azure== {1} installed? Try `pip install azure== {1} ` "
self . fail ( " Do you have azure >={1} installed? Try `pip install ' azure>= {1} ' --upgrade `"
" - {0} " . format ( HAS_AZURE_EXC , AZURE_MIN_RELEASE ) )
self . _network_client = None
@ -186,10 +198,10 @@ class AzureRMModuleBase(object):
self . module . exit_json ( * * res )
def check_client_version ( self , client_name , client_version , expected_version ) :
# Pinning Azure modules to 2.0.0rc5.
if Loose Version( client_version ) < Loose Version( expected_version ) :
# Ensure Azure modules are at least 2.0.0rc5.
if Version( client_version ) < Version( expected_version ) :
self . fail ( " Installed {0} client version is {1} . The supported version is {2} . Try "
" `pip install azure>= {3} `" . format ( client_name , client_version , expected_version ,
" `pip install azure>= {3} --upgrade `" . format ( client_name , client_version , expected_version ,
AZURE_MIN_RELEASE ) )
def exec_module ( self , * * kwargs ) :