mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
fixes issue with getting value with . (dot) in key in netcfg
This commit addresses a problem when attempting to retrieve a value from the result that includes a dict key using . (dot).
This commit is contained in:
parent
ffc52a2767
commit
5bb876b0e2
1 changed files with 14 additions and 8 deletions
|
@ -85,9 +85,8 @@ def parse(lines, indent):
|
|||
|
||||
|
||||
class Conditional(object):
|
||||
'''
|
||||
Used in command modules to evaluate waitfor conditions
|
||||
'''
|
||||
"""Used in command modules to evaluate waitfor conditions
|
||||
"""
|
||||
|
||||
OPERATORS = {
|
||||
'eq': ['eq', '=='],
|
||||
|
@ -133,13 +132,20 @@ class Conditional(object):
|
|||
raise AttributeError('unknown operator: %s' % oper)
|
||||
|
||||
def get_value(self, result):
|
||||
for key in self.key.split('.'):
|
||||
match = re.match(r'^(.+)\[(\d+)\]', key)
|
||||
parts = re.split(r'\.(?=[^\]]*(?:\[|$))', self.key)
|
||||
for part in parts:
|
||||
match = re.findall(r'\[(\S+?)\]', part)
|
||||
if match:
|
||||
key, index = match.groups()
|
||||
result = result[key][int(index)]
|
||||
key = part[:part.find('[')]
|
||||
result = result[key]
|
||||
for m in match:
|
||||
try:
|
||||
m = int(m)
|
||||
except ValueError:
|
||||
m = str(m)
|
||||
result = result[m]
|
||||
else:
|
||||
result = result.get(key)
|
||||
result = result.get(part)
|
||||
return result
|
||||
|
||||
def number(self, value):
|
||||
|
|
Loading…
Reference in a new issue