Skip to content

Commit 738076b

Browse files
authored
Fix bug when using 'key' or 'value' variables (#346)
Enable any name for key/value in apply_for loop
1 parent e945904 commit 738076b

File tree

3 files changed

+19
-12
lines changed

3 files changed

+19
-12
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
minor_changes:
2+
- Allow for usage of loop variables from :code:`apply_for` within object - Thanks @lucagubler (#344)

plugins/action/icinga2_object.py

+5-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,11 @@ def run(self, tmp=None, task_vars=None):
109109
#
110110
# parser
111111
#
112-
object_content += Icinga2Parser().parse(obj['args'], list(task_vars['icinga2_combined_constants'].keys())+task_vars['icinga2_reserved']+varlist+list(obj['args'].keys()), 2) + '}\n'
112+
object_content += Icinga2Parser().parse(
113+
obj['args'],
114+
list(task_vars['icinga2_combined_constants'].keys()) + task_vars['icinga2_reserved'] + varlist + list(obj['args'].keys()),
115+
2
116+
) + '}\n'
113117
copy_action = self._task.copy()
114118
copy_action.args = dict()
115119
copy_action.args['dest'] = file_fragment

plugins/module_utils/parse.py

+12-11
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class Icinga2Parser(object):
66

77
def parse(self, attrs, constants, indent=0):
88
def attribute_types(attr):
9-
if re.search(r'^[a-zA-Z0-9_]+$', attr):
9+
if re.search(r'^[a-zA-Z_][a-zA-Z0-9_]*$', attr):
1010
result = attr
1111
else:
1212
result = '"' + attr + '"'
@@ -16,7 +16,8 @@ def value_types(value, indent=2):
1616
# Values without quotes
1717
if ((re.search(r'^-?\d+\.?\d*[dhms]?$', value)) or
1818
(re.search(r'^(true|false|null)$', value)) or
19-
(re.search(r'^!?(host|service|user)\.', value))):
19+
(re.search(r'^!?(host|service|user)\.', value)) or
20+
any(value.startswith(constant + '.') for constant in constants)):
2021
result = value
2122
elif (re.search(r'^(True|False)$', value)):
2223
result = value.lower()
@@ -90,9 +91,9 @@ def parser(row):
9091
def process_array(items, indent=2):
9192
result = ''
9293
for item in items:
93-
if type(item) is dict:
94+
if isinstance(item, dict):
9495
result += "\n%s{\n%s%s}, " % (' ' * indent, process_hash(attrs=item, indent=indent+2), ' ' * indent)
95-
elif type(item) is list:
96+
elif isinstance(item, list):
9697
result += "[ %s], " % (process_array(item.split(','), indent=indent+2))
9798
else:
9899
result += "%s, " % (parser(str(item)))
@@ -105,7 +106,7 @@ def process_hash(attrs, level=3, indent=2, prefix=' '):
105106
op = ''
106107

107108
for attr, value in attrs.items():
108-
if type(value) is dict:
109+
if isinstance(value, dict):
109110
if "+" in value:
110111
del value['+']
111112
op = "+"
@@ -133,7 +134,7 @@ def process_hash(attrs, level=3, indent=2, prefix=' '):
133134
else:
134135
result += "%s%s %s= {\n%s%s}\n" % (
135136
prefix, attribute_types(attr), op, process_hash(attrs=value, indent=indent+2), ' '*indent)
136-
elif type(value) is list and value:
137+
elif isinstance(value, list) and value:
137138
if value[0] == "+":
138139
op = "+"
139140
value.pop(0)
@@ -181,13 +182,13 @@ def divide_chunks(l, n):
181182
for x in value:
182183
config += "%s%s %s\n" % (' '*indent, attr+' where', parser(x))
183184
elif attr == 'vars':
184-
if type(value) is dict:
185+
if isinstance(value, dict):
185186
if "+" in value:
186187
del value['+']
187188
config += process_hash(attrs=value, indent=indent+2, level=1, prefix=("%s%s." % (' '*indent, attr)))
188-
elif type(value) is list:
189+
elif isinstance(value, list):
189190
for item in value:
190-
if type(item) is str:
191+
if isinstance(item, str):
191192
config += "%s%s += %s\n" % (indent*' ', attr, re.sub(r'^[\+,-]\s+/', '', item))
192193
else:
193194
if "+" in item:
@@ -202,15 +203,15 @@ def divide_chunks(l, n):
202203
value = re.sub(r'^\+\s+', '', str(value))
203204
config += "%s%s %s= %s\n" % (' ' * indent, attr, op, parser(value))
204205
else:
205-
if type(value) is dict:
206+
if isinstance(value, dict):
206207
if "+" in value:
207208
op = '+'
208209
del value['+']
209210
if bool(value):
210211
config += "%s%s %s= {\n%s%s}\n" % (' '*indent, attr, op, process_hash(attrs=value, indent=indent+2), ' '*indent)
211212
else:
212213
config += "%s%s %s= {}\n" % (' '*indent, op, attr)
213-
elif type(value) is list:
214+
elif isinstance(value, list):
214215
if value:
215216
if value[0] == "+":
216217
op = "+"

0 commit comments

Comments
 (0)