mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Use a self._raise_error helper and avoid passing the lineno around
Based on a patch by @Richard2ndQuadrant.
This commit is contained in:
parent
9133cd409c
commit
74aab6f726
1 changed files with 19 additions and 16 deletions
|
@ -65,6 +65,9 @@ class InventoryParser(object):
|
||||||
|
|
||||||
# Note: we could discard self.hosts after this point.
|
# Note: we could discard self.hosts after this point.
|
||||||
|
|
||||||
|
def _raise_error(self, message):
|
||||||
|
raise AnsibleError("%s:%d: " % (self.filename, self.lineno) + message)
|
||||||
|
|
||||||
def _parse(self, lines):
|
def _parse(self, lines):
|
||||||
'''
|
'''
|
||||||
Populates self.groups from the given array of lines. Raises an error on
|
Populates self.groups from the given array of lines. Raises an error on
|
||||||
|
@ -82,9 +85,9 @@ class InventoryParser(object):
|
||||||
groupname = 'ungrouped'
|
groupname = 'ungrouped'
|
||||||
state = 'hosts'
|
state = 'hosts'
|
||||||
|
|
||||||
i = 0
|
self.lineno = 0
|
||||||
for line in lines:
|
for line in lines:
|
||||||
i += 1
|
self.lineno += 1
|
||||||
|
|
||||||
line = line.strip()
|
line = line.strip()
|
||||||
|
|
||||||
|
@ -102,7 +105,7 @@ class InventoryParser(object):
|
||||||
state = state or 'hosts'
|
state = state or 'hosts'
|
||||||
if state not in ['hosts', 'children', 'vars']:
|
if state not in ['hosts', 'children', 'vars']:
|
||||||
title = ":".join(m.groups())
|
title = ":".join(m.groups())
|
||||||
raise AnsibleError("%s:%d: Section [%s] has unknown type: %s" % (self.filename, i, title, state))
|
self._raise_error("Section [%s] has unknown type: %s" % (title, state))
|
||||||
|
|
||||||
# If we haven't seen this group before, we add a new Group.
|
# If we haven't seen this group before, we add a new Group.
|
||||||
#
|
#
|
||||||
|
@ -116,7 +119,7 @@ class InventoryParser(object):
|
||||||
self.groups[groupname] = Group(name=groupname)
|
self.groups[groupname] = Group(name=groupname)
|
||||||
|
|
||||||
if state == 'vars':
|
if state == 'vars':
|
||||||
pending_declarations[groupname] = dict(line=i, state=state, name=groupname)
|
pending_declarations[groupname] = dict(line=self.lineno, state=state, name=groupname)
|
||||||
|
|
||||||
# When we see a declaration that we've been waiting for, we can
|
# When we see a declaration that we've been waiting for, we can
|
||||||
# delete the note.
|
# delete the note.
|
||||||
|
@ -133,14 +136,14 @@ class InventoryParser(object):
|
||||||
# [groupname] contains host definitions that must be added to
|
# [groupname] contains host definitions that must be added to
|
||||||
# the current group.
|
# the current group.
|
||||||
if state == 'hosts':
|
if state == 'hosts':
|
||||||
hosts = self._parse_host_definition(line, i)
|
hosts = self._parse_host_definition(line)
|
||||||
for h in hosts:
|
for h in hosts:
|
||||||
self.groups[groupname].add_host(h)
|
self.groups[groupname].add_host(h)
|
||||||
|
|
||||||
# [groupname:vars] contains variable definitions that must be
|
# [groupname:vars] contains variable definitions that must be
|
||||||
# applied to the current group.
|
# applied to the current group.
|
||||||
elif state == 'vars':
|
elif state == 'vars':
|
||||||
(k, v) = self._parse_variable_definition(line, i)
|
(k, v) = self._parse_variable_definition(line)
|
||||||
self.groups[groupname].set_variable(k, v)
|
self.groups[groupname].set_variable(k, v)
|
||||||
|
|
||||||
# [groupname:children] contains subgroup names that must be
|
# [groupname:children] contains subgroup names that must be
|
||||||
|
@ -148,11 +151,11 @@ class InventoryParser(object):
|
||||||
# must themselves be declared as groups, but as before, they
|
# must themselves be declared as groups, but as before, they
|
||||||
# may only be declared later.
|
# may only be declared later.
|
||||||
elif state == 'children':
|
elif state == 'children':
|
||||||
child = self._parse_group_name(line, i)
|
child = self._parse_group_name(line)
|
||||||
|
|
||||||
if child not in self.groups:
|
if child not in self.groups:
|
||||||
self.groups[child] = Group(name=child)
|
self.groups[child] = Group(name=child)
|
||||||
pending_declarations[child] = dict(line=i, state=state, name=child, parent=groupname)
|
pending_declarations[child] = dict(line=self.lineno, state=state, name=child, parent=groupname)
|
||||||
|
|
||||||
self.groups[groupname].add_child_group(self.groups[child])
|
self.groups[groupname].add_child_group(self.groups[child])
|
||||||
|
|
||||||
|
@ -162,7 +165,7 @@ class InventoryParser(object):
|
||||||
# This is a fencepost. It can happen only if the state checker
|
# This is a fencepost. It can happen only if the state checker
|
||||||
# accepts a state that isn't handled above.
|
# accepts a state that isn't handled above.
|
||||||
else:
|
else:
|
||||||
raise AnsibleError("%s:%d: Entered unhandled state: %s" % (self.filename, i, state))
|
self._raise_error("Entered unhandled state: %s" % (state))
|
||||||
|
|
||||||
# Any entries in pending_declarations not removed by a group declaration
|
# Any entries in pending_declarations not removed by a group declaration
|
||||||
# above mean that there was an unresolved forward reference. We report
|
# above mean that there was an unresolved forward reference. We report
|
||||||
|
@ -175,7 +178,7 @@ class InventoryParser(object):
|
||||||
elif decl['state'] == 'children':
|
elif decl['state'] == 'children':
|
||||||
raise AnsibleError("%s:%d: Section [%s:children] includes undefined group: %s" % (self.filename, decl['line'], decl['parent'], decl['name']))
|
raise AnsibleError("%s:%d: Section [%s:children] includes undefined group: %s" % (self.filename, decl['line'], decl['parent'], decl['name']))
|
||||||
|
|
||||||
def _parse_group_name(self, line, i):
|
def _parse_group_name(self, line):
|
||||||
'''
|
'''
|
||||||
Takes a single line and tries to parse it as a group name. Returns the
|
Takes a single line and tries to parse it as a group name. Returns the
|
||||||
group name if successful, or raises an error.
|
group name if successful, or raises an error.
|
||||||
|
@ -185,9 +188,9 @@ class InventoryParser(object):
|
||||||
if m:
|
if m:
|
||||||
return m.group(1)
|
return m.group(1)
|
||||||
|
|
||||||
raise AnsibleError("%s:%d: Expected group name, got: %s" % (self.filename, i, line))
|
self._raise_error("Expected group name, got: %s" % (line))
|
||||||
|
|
||||||
def _parse_variable_definition(self, line, i):
|
def _parse_variable_definition(self, line):
|
||||||
'''
|
'''
|
||||||
Takes a string and tries to parse it as a variable definition. Returns
|
Takes a string and tries to parse it as a variable definition. Returns
|
||||||
the key and value if successful, or raises an error.
|
the key and value if successful, or raises an error.
|
||||||
|
@ -202,9 +205,9 @@ class InventoryParser(object):
|
||||||
(k, v) = [e.strip() for e in line.split("=", 1)]
|
(k, v) = [e.strip() for e in line.split("=", 1)]
|
||||||
return (k, self._parse_value(v))
|
return (k, self._parse_value(v))
|
||||||
|
|
||||||
raise AnsibleError("%s:%d: Expected key=value, got: %s" % (self.filename, i, line))
|
self._raise_error("Expected key=value, got: %s" % (line))
|
||||||
|
|
||||||
def _parse_host_definition(self, line, i):
|
def _parse_host_definition(self, line):
|
||||||
'''
|
'''
|
||||||
Takes a single line and tries to parse it as a host definition. Returns
|
Takes a single line and tries to parse it as a host definition. Returns
|
||||||
a list of Hosts if successful, or raises an error.
|
a list of Hosts if successful, or raises an error.
|
||||||
|
@ -223,7 +226,7 @@ class InventoryParser(object):
|
||||||
try:
|
try:
|
||||||
tokens = shlex.split(line, comments=True)
|
tokens = shlex.split(line, comments=True)
|
||||||
except ValueError as e:
|
except ValueError as e:
|
||||||
raise AnsibleError("%s:%d: Error parsing host definition '%s': %s" % (self.filename, i, varstring, e))
|
self._raise_error("Error parsing host definition '%s': %s" % (varstring, e))
|
||||||
|
|
||||||
(hostnames, port) = self._expand_hostpattern(tokens[0])
|
(hostnames, port) = self._expand_hostpattern(tokens[0])
|
||||||
hosts = self._Hosts(hostnames, port)
|
hosts = self._Hosts(hostnames, port)
|
||||||
|
@ -233,7 +236,7 @@ class InventoryParser(object):
|
||||||
variables = {}
|
variables = {}
|
||||||
for t in tokens[1:]:
|
for t in tokens[1:]:
|
||||||
if '=' not in t:
|
if '=' not in t:
|
||||||
raise AnsibleError("%s:%d: Expected key=value host variable assignment, got: %s" % (self.filename, i, t))
|
self._raise_error("Expected key=value host variable assignment, got: %s" % (t))
|
||||||
(k, v) = t.split('=', 1)
|
(k, v) = t.split('=', 1)
|
||||||
variables[k] = self._parse_value(v)
|
variables[k] = self._parse_value(v)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue