corrected lib imports to work with python 2.x (#60017)
This commit is contained in:
parent
1268993506
commit
ee0c19e519
1 changed files with 72 additions and 20 deletions
|
@ -85,6 +85,9 @@ options:
|
||||||
RAM.
|
RAM.
|
||||||
- When C(internal) is C(no), at least one record must be specified in either C(records)
|
- When C(internal) is C(no), at least one record must be specified in either C(records)
|
||||||
or C(records_content).
|
or C(records_content).
|
||||||
|
- "When C(type) is: C(ip), C(address), C(addr) if the addresses use non default route domain,
|
||||||
|
they must be explicit about it that is they must contain a route domain notation C(%) eg. 10.10.1.1%11.
|
||||||
|
This is true regardless if the data group resides in a partition or not."
|
||||||
type: list
|
type: list
|
||||||
suboptions:
|
suboptions:
|
||||||
key:
|
key:
|
||||||
|
@ -153,6 +156,7 @@ extends_documentation_fragment: f5
|
||||||
author:
|
author:
|
||||||
- Tim Rupp (@caphrim007)
|
- Tim Rupp (@caphrim007)
|
||||||
- Wojciech Wypior (@wojtek0806)
|
- Wojciech Wypior (@wojtek0806)
|
||||||
|
- Greg Crosby (@crosbygw)
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = r'''
|
EXAMPLES = r'''
|
||||||
|
@ -278,6 +282,9 @@ import re
|
||||||
from ansible.module_utils._text import to_text
|
from ansible.module_utils._text import to_text
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.basic import env_fallback
|
from ansible.module_utils.basic import env_fallback
|
||||||
|
try:
|
||||||
|
from StringIO import StringIO
|
||||||
|
except ImportError:
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -344,6 +351,8 @@ class RecordsEncoder(object):
|
||||||
self._separator = separator
|
self._separator = separator
|
||||||
self._network_pattern = re.compile(r'^network\s+(?P<addr>[^ ]+)\s+prefixlen\s+(?P<prefix>\d+)\s+.*')
|
self._network_pattern = re.compile(r'^network\s+(?P<addr>[^ ]+)\s+prefixlen\s+(?P<prefix>\d+)\s+.*')
|
||||||
self._host_pattern = re.compile(r'^host\s+(?P<addr>[^ ]+)\s+.*')
|
self._host_pattern = re.compile(r'^host\s+(?P<addr>[^ ]+)\s+.*')
|
||||||
|
self._rd_net_pattern = re.compile(r'(?P<addr>[^%]+)%(?P<rd>[0-9]+)/(?P<prefix>[0-9]+)')
|
||||||
|
self._rd_host_pattern = re.compile(r'(?P<addr>[^%]+)%(?P<rd>[0-9]+)')
|
||||||
|
|
||||||
def encode(self, record):
|
def encode(self, record):
|
||||||
if isinstance(record, dict):
|
if isinstance(record, dict):
|
||||||
|
@ -359,7 +368,42 @@ class RecordsEncoder(object):
|
||||||
else:
|
else:
|
||||||
return self.encode_string_from_dict(record)
|
return self.encode_string_from_dict(record)
|
||||||
|
|
||||||
|
def encode_rd_address(self, record, match, host=False):
|
||||||
|
if host:
|
||||||
|
if is_valid_ip_interface(match.group('addr')):
|
||||||
|
key = ip_interface(u"{0}".format(match.group('addr')))
|
||||||
|
else:
|
||||||
|
raise F5ModuleError(
|
||||||
|
"When specifying an 'address' type, the value to the left of the separator must be an IP."
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
if is_valid_ip_interface(match.group('addr')):
|
||||||
|
key = ip_interface(u"{0}/{1}".format(match.group('addr'), match.group('prefix')))
|
||||||
|
else:
|
||||||
|
raise F5ModuleError(
|
||||||
|
"When specifying an 'address' type, the value to the left of the separator must be an IP."
|
||||||
|
)
|
||||||
|
if key and 'value' in record:
|
||||||
|
if key.network.prefixlen in [32, 128]:
|
||||||
|
return self.encode_host(str(key.ip) + '%' + match.group('rd'), record['value'])
|
||||||
|
return self.encode_network(
|
||||||
|
str(key.network.network_address) + '%' + match.group('rd'), key.network.prefixlen, record['value']
|
||||||
|
)
|
||||||
|
elif key:
|
||||||
|
if key.network.prefixlen in [32, 128]:
|
||||||
|
return self.encode_host(str(key.ip) + '%' + match.group('rd'), str(key.ip) + '%' + match.group('rd'))
|
||||||
|
return self.encode_network(
|
||||||
|
str(key.network.network_address) + '%' + match.group('rd'), key.network.prefixlen,
|
||||||
|
str(key.network.network_address) + '%' + match.group('rd')
|
||||||
|
)
|
||||||
|
|
||||||
def encode_address_from_dict(self, record):
|
def encode_address_from_dict(self, record):
|
||||||
|
rd_match = re.match(self._rd_net_pattern, record['key'])
|
||||||
|
if rd_match:
|
||||||
|
return self.encode_rd_address(record, rd_match)
|
||||||
|
rd_match = re.match(self._rd_host_pattern, record['key'])
|
||||||
|
if rd_match:
|
||||||
|
return self.encode_rd_address(record, rd_match, host=True)
|
||||||
if is_valid_ip_interface(record['key']):
|
if is_valid_ip_interface(record['key']):
|
||||||
key = ip_interface(u"{0}".format(str(record['key'])))
|
key = ip_interface(u"{0}".format(str(record['key'])))
|
||||||
else:
|
else:
|
||||||
|
@ -415,6 +459,12 @@ class RecordsEncoder(object):
|
||||||
# host 172.16.1.1/32 := "Host3"
|
# host 172.16.1.1/32 := "Host3"
|
||||||
# host 2001:0db8:85a3:0000:0000:8a2e:0370:7334 := "Host4"
|
# host 2001:0db8:85a3:0000:0000:8a2e:0370:7334 := "Host4"
|
||||||
return record
|
return record
|
||||||
|
elif self._rd_net_pattern.match(record) or self._rd_host_pattern.match(record):
|
||||||
|
# 192.168.0.0%11/16 := "Network3",
|
||||||
|
# 2402:9400:1000:0::%11/64 := "Network4",
|
||||||
|
# 192.168.1.1%11/32 := "Host3",
|
||||||
|
# 2001:0db8:85a3:0000:0000:8a2e:0370:7334%11 := "Host4"
|
||||||
|
return record
|
||||||
else:
|
else:
|
||||||
# 192.168.0.0/16 := "Network3",
|
# 192.168.0.0/16 := "Network3",
|
||||||
# 2402:9400:1000:0::/64 := "Network4",
|
# 2402:9400:1000:0::/64 := "Network4",
|
||||||
|
@ -477,6 +527,8 @@ class RecordsDecoder(object):
|
||||||
self._separator = separator
|
self._separator = separator
|
||||||
self._network_pattern = re.compile(r'^network\s+(?P<addr>[^ ]+)\s+prefixlen\s+(?P<prefix>\d+)\s+.*')
|
self._network_pattern = re.compile(r'^network\s+(?P<addr>[^ ]+)\s+prefixlen\s+(?P<prefix>\d+)\s+.*')
|
||||||
self._host_pattern = re.compile(r'^host\s+(?P<addr>[^ ]+)\s+.*')
|
self._host_pattern = re.compile(r'^host\s+(?P<addr>[^ ]+)\s+.*')
|
||||||
|
self._rd_net_ptrn = re.compile(r'^network\s+(?P<addr>[^%]+)%(?P<rd>[0-9]+)\s+prefixlen\s+(?P<prefix>\d+)\s+.*')
|
||||||
|
self._rd_host_ptrn = re.compile(r'^host\s+(?P<addr>[^%]+)%(?P<rd>[0-9]+)\s+.*')
|
||||||
|
|
||||||
def decode(self, record):
|
def decode(self, record):
|
||||||
record = record.strip().strip(',')
|
record = record.strip().strip(',')
|
||||||
|
@ -486,6 +538,14 @@ class RecordsDecoder(object):
|
||||||
return self.decode_from_string(record)
|
return self.decode_from_string(record)
|
||||||
|
|
||||||
def decode_address_from_string(self, record):
|
def decode_address_from_string(self, record):
|
||||||
|
matches = self._rd_net_ptrn.match(record)
|
||||||
|
if matches:
|
||||||
|
# network 192.168.0.0%11 prefixlen 16 := "Network3",
|
||||||
|
# network 2402:9400:1000:0::%11 prefixlen 64 := "Network4",
|
||||||
|
value = record.split(self._separator)[1].strip().strip('"')
|
||||||
|
addr = "{0}%{1}/{2}".format(matches.group('addr'), matches.group('rd'), matches.group('prefix'))
|
||||||
|
result = dict(name=addr, data=value)
|
||||||
|
return result
|
||||||
matches = self._network_pattern.match(record)
|
matches = self._network_pattern.match(record)
|
||||||
if matches:
|
if matches:
|
||||||
# network 192.168.0.0 prefixlen 16 := "Network3",
|
# network 192.168.0.0 prefixlen 16 := "Network3",
|
||||||
|
@ -495,6 +555,15 @@ class RecordsDecoder(object):
|
||||||
value = record.split(self._separator)[1].strip().strip('"')
|
value = record.split(self._separator)[1].strip().strip('"')
|
||||||
result = dict(name=str(addr), data=value)
|
result = dict(name=str(addr), data=value)
|
||||||
return result
|
return result
|
||||||
|
matches = self._rd_host_ptrn.match(record)
|
||||||
|
if matches:
|
||||||
|
# host 172.16.1.1%11/32 := "Host3"
|
||||||
|
# host 2001:0db8:85a3:0000:0000:8a2e:0370:7334%11 := "Host4"
|
||||||
|
host = ip_interface(u"{0}".format(matches.group('addr')))
|
||||||
|
addr = "{0}%{1}/{2}".format(matches.group('addr'), matches.group('rd'), str(host.network.prefixlen))
|
||||||
|
value = record.split(self._separator)[1].strip().strip('"')
|
||||||
|
result = dict(name=addr, data=value)
|
||||||
|
return result
|
||||||
matches = self._host_pattern.match(record)
|
matches = self._host_pattern.match(record)
|
||||||
if matches:
|
if matches:
|
||||||
# host 172.16.1.1/32 := "Host3"
|
# host 172.16.1.1/32 := "Host3"
|
||||||
|
@ -504,6 +573,7 @@ class RecordsDecoder(object):
|
||||||
value = record.split(self._separator)[1].strip().strip('"')
|
value = record.split(self._separator)[1].strip().strip('"')
|
||||||
result = dict(name=str(addr), data=value)
|
result = dict(name=str(addr), data=value)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
raise F5ModuleError(
|
raise F5ModuleError(
|
||||||
'The value "{0}" is not an address'.format(record)
|
'The value "{0}" is not an address'.format(record)
|
||||||
)
|
)
|
||||||
|
@ -590,17 +660,6 @@ class Parameters(AnsibleF5Parameters):
|
||||||
|
|
||||||
|
|
||||||
class ApiParameters(Parameters):
|
class ApiParameters(Parameters):
|
||||||
|
|
||||||
def _strip_route_domain(self, item):
|
|
||||||
result = dict()
|
|
||||||
pattern = r'(?P<ip>[^%]+)%(?P<route_domain>[0-9]+)/(?P<mask>[0-9]+)'
|
|
||||||
matches = re.search(pattern, item['name'])
|
|
||||||
if matches:
|
|
||||||
result['data'] = item['data']
|
|
||||||
result['name'] = '{0}/{1}'.format(matches.group('ip'), matches.group('mask'))
|
|
||||||
return result
|
|
||||||
return item
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def checksum(self):
|
def checksum(self):
|
||||||
if self._values['checksum'] is None:
|
if self._values['checksum'] is None:
|
||||||
|
@ -608,16 +667,9 @@ class ApiParameters(Parameters):
|
||||||
result = self._values['checksum'].split(':')[2]
|
result = self._values['checksum'].split(':')[2]
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@property
|
|
||||||
def records(self):
|
|
||||||
if self._values['records'] is None:
|
|
||||||
return None
|
|
||||||
result = [self._strip_route_domain(item) for item in self._values['records']]
|
|
||||||
return result
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def records_list(self):
|
def records_list(self):
|
||||||
return self.records
|
return self._values['records']
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def description(self):
|
def description(self):
|
||||||
|
|
Loading…
Reference in a new issue