Commit a8947917 by Michael DeHaan

Slightly friendlier error on missing hosts file, slightly friendlier error on…

Slightly friendlier error on missing hosts file, slightly friendlier error on inventory script returning invalid syntax
(or if inventory is non-script and accidentally executable).
parent 1163c23c
...@@ -93,7 +93,7 @@ class Inventory(object): ...@@ -93,7 +93,7 @@ class Inventory(object):
else: else:
raise errors.AnsibleError("YAML inventory support is deprecated in 0.6 and removed in 0.7, see the migration script in examples/scripts in the git checkout") raise errors.AnsibleError("YAML inventory support is deprecated in 0.6 and removed in 0.7, see the migration script in examples/scripts in the git checkout")
else: else:
raise errors.AnsibleError("No valid hosts inventory file found") raise errors.AnsibleError("Unable to find an inventory file, specify one with -i ?")
def _match(self, str, pattern_str): def _match(self, str, pattern_str):
if pattern_str.startswith('~'): if pattern_str.startswith('~'):
......
...@@ -39,27 +39,37 @@ class InventoryScript(object): ...@@ -39,27 +39,37 @@ class InventoryScript(object):
self.groups = self._parse() self.groups = self._parse()
def _parse(self): def _parse(self):
all_hosts = {} all_hosts = {}
self.raw = utils.parse_json(self.data)
all = Group('all')
groups = dict(all=all)
group = None
if 'failed' in self.raw:
raise errors.AnsibleError("failed to parse executable inventory script results")
self.raw = utils.parse_json(self.data)
all=Group('all')
groups = dict(all=all)
group = None
for (group_name, data) in self.raw.items(): for (group_name, data) in self.raw.items():
group = groups[group_name] = Group(group_name) group = groups[group_name] = Group(group_name)
host = None host = None
if not isinstance(data, dict): if not isinstance(data, dict):
data = {'hosts': data} data = {'hosts': data}
if 'hosts' in data: if 'hosts' in data:
for hostname in data['hosts']: for hostname in data['hosts']:
if not hostname in all_hosts: if not hostname in all_hosts:
all_hosts[hostname] = Host(hostname) all_hosts[hostname] = Host(hostname)
host = all_hosts[hostname] host = all_hosts[hostname]
group.add_host(host) group.add_host(host)
if 'vars' in data: if 'vars' in data:
for k, v in data['vars'].iteritems(): for k, v in data['vars'].iteritems():
group.set_variable(k, v) group.set_variable(k, v)
all.add_child_group(group) all.add_child_group(group)
# Separate loop to ensure all groups are defined # Separate loop to ensure all groups are defined
for (group_name, data) in self.raw.items(): for (group_name, data) in self.raw.items():
if isinstance(data, dict) and 'children' in data: if isinstance(data, dict) and 'children' in data:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment