Fix range issue in inventory and add additional error checking

Fixes #6331
This commit is contained in:
James Cammarata 2014-03-07 16:34:04 -06:00
parent ae1e9a3ec1
commit c920f78cc3

View file

@ -208,12 +208,14 @@ class Inventory(object):
""" """
# The regex used to match on the range, which can be [x] or [x-y]. # The regex used to match on the range, which can be [x] or [x-y].
pattern_re = re.compile("^(.*)\[([0-9]+)(?:(?:-)([0-9]+))?\](.*)$") pattern_re = re.compile("^(.*)\[([-]?[0-9]+)(?:(?:-)([0-9]+))?\](.*)$")
m = pattern_re.match(pattern) m = pattern_re.match(pattern)
if m: if m:
(target, first, last, rest) = m.groups() (target, first, last, rest) = m.groups()
first = int(first) first = int(first)
if last: if last:
if first < 0:
raise errors.AnsibleError("invalid range: negative indices cannot be used as the first item in a range")
last = int(last) last = int(last)
else: else:
last = first last = first
@ -245,10 +247,13 @@ class Inventory(object):
right = 0 right = 0
left=int(left) left=int(left)
right=int(right) right=int(right)
try:
if left != right: if left != right:
return hosts[left:right] return hosts[left:right]
else: else:
return [ hosts[left] ] return [ hosts[left] ]
except IndexError:
raise errors.AnsibleError("no hosts matching the pattern '%s' were found" % pat)
def _create_implicit_localhost(self, pattern): def _create_implicit_localhost(self, pattern):
new_host = Host(pattern) new_host = Host(pattern)