ini plugin should recursively instantiate pending

solves inconsistent behaviour on ini host format depending on definition order
fixes #32196

(cherry picked from commit 9d28973b5e)
This commit is contained in:
Brian Coca 2017-11-01 17:48:50 -04:00
parent dd930344b6
commit 07674f5062
2 changed files with 10 additions and 3 deletions

View file

@ -126,6 +126,8 @@ Ansible Changes By Release
(https://github.com/ansible/ansible/pull/32190)
* Fix failure during upgrade due to NON_RESPONSIVE state for ovirt_hosts module
(https://github.com/ansible/ansible/pull/32192)
* ini inventory format now correclty handles group creation w/o need for specific orders
https://github.com/ansible/ansible/pull/32471
<a id="2.4.1"></a>

View file

@ -193,9 +193,7 @@ class InventoryModule(BaseFileInventoryPlugin):
if groupname in pending_declarations and state != 'vars':
if pending_declarations[groupname]['state'] == 'children':
for parent in pending_declarations[groupname]['parents']:
self.inventory.add_child(parent, groupname)
del pending_declarations[groupname]
self._add_pending_children(groupname, pending_declarations)
continue
elif line.startswith('[') and line.endswith(']'):
@ -248,6 +246,13 @@ class InventoryModule(BaseFileInventoryPlugin):
elif decl['state'] == 'children':
raise AnsibleError("%s:%d: Section [%s:children] includes undefined group: %s" % (path, decl['line'], decl['parents'].pop(), decl['name']))
def _add_pending_children(self, group, pending):
for parent in pending[group]['parents']:
self.inventory.add_child(parent, group)
if parent in pending and pending[parent]['state'] == 'children':
self._add_pending_children(parent, pending)
del pending[group]
def _parse_group_name(self, line):
'''
Takes a single line and tries to parse it as a group name. Returns the