Return multiple groups from inventory API.

This commit is contained in:
Jeroen Hoekx 2012-10-10 18:35:45 +02:00
parent 30c019447b
commit 23a62f5a78
3 changed files with 18 additions and 3 deletions

View file

@ -35,6 +35,7 @@ class InventoryScript(object):
self.groups = self._parse()
def _parse(self):
all_hosts = {}
groups = {}
self.raw = utils.parse_json(self.data)
@ -45,7 +46,9 @@ class InventoryScript(object):
group = groups[group_name] = Group(group_name)
host = None
for hostname in hosts:
host = Host(hostname)
if not hostname in all_hosts:
all_hosts[hostname] = Host(hostname)
host = all_hosts[hostname]
group.add_host(host)
# FIXME: hack shouldn't be needed
all.add_host(host)

View file

@ -246,3 +246,13 @@ class TestInventory(unittest.TestCase):
actual_hosts = inventory.get_hosts(host_names)
actual_host_names = [host.name for host in actual_hosts]
assert host_names == actual_host_names
def test_script_multiple_groups(self):
inventory = self.script_inventory()
vars = inventory.get_variables('zeus')
print "VARS=%s" % vars
assert vars == {'inventory_hostname': 'zeus',
'inventory_hostname_short': 'zeus',
'group_names': ['greek', 'major-god']}

View file

@ -15,13 +15,15 @@ options, args = parser.parse_args()
systems = {
"ungrouped": [ "jupiter", "saturn" ],
"greek": [ "zeus", "hera", "poseidon" ],
"norse": [ "thor", "odin", "loki" ]
"norse": [ "thor", "odin", "loki" ],
"major-god": [ "zeus", "odin" ],
}
variables = {
"thor": {
"hammer": True
}
},
"zeus": {},
}
if options.list_hosts == True: