diff --git a/lib/ansible/inventory_parser.py b/lib/ansible/inventory_parser.py index fa4b3767b20..f7387050f9f 100644 --- a/lib/ansible/inventory_parser.py +++ b/lib/ansible/inventory_parser.py @@ -54,12 +54,12 @@ class InventoryParser(object): def _parse_base_groups(self): - undefined = Group(name='undefined') + ungrouped = Group(name='ungrouped') all = Group(name='all') - all.add_child_group(undefined) + all.add_child_group(ungrouped) - self.groups = dict(all=all, undefined=undefined) - active_group_name = 'undefined' + self.groups = dict(all=all, ungrouped=ungrouped) + active_group_name = 'ungrouped' for line in self.lines: if line.startswith("["): diff --git a/lib/ansible/inventory_parser_yaml.py b/lib/ansible/inventory_parser_yaml.py index 0a8c282b018..bdf69b17c37 100644 --- a/lib/ansible/inventory_parser_yaml.py +++ b/lib/ansible/inventory_parser_yaml.py @@ -63,7 +63,12 @@ class InventoryParserYaml(object): elif type(item) == dict and 'host' in item: host = self._make_host(item['host']) - for (k,v) in item.get('vars',{}).items(): + vars = item.get('vars', {}) + if type(vars)==list: + varlist, vars = vars, {} + for subitem in varlist: + vars.update(subitem) + for (k,v) in vars.items(): host.set_variable(k,v) elif type(item) == dict and 'group' in item: diff --git a/test/TestInventory.py b/test/TestInventory.py index 2a8930277c7..6d8d3bb2a4d 100644 --- a/test/TestInventory.py +++ b/test/TestInventory.py @@ -221,11 +221,11 @@ class TestInventory(unittest.TestCase): expected_hosts=['thor', 'odin', 'loki'] self.compare(hosts, expected_hosts) - def test_simple_ungrouped(self): + def test_yaml_ungrouped(self): inventory = self.yaml_inventory() hosts = inventory.list_hosts("ungrouped") - expected_hosts=['jupiter','zeus'] + expected_hosts=['jupiter'] self.compare(hosts, expected_hosts) def test_yaml_combined(self): @@ -258,6 +258,14 @@ class TestInventory(unittest.TestCase): 'hammer':True, 'inventory_hostname': 'thor'} + def test_yaml_list_vars(self): + inventory = self.yaml_inventory() + vars = inventory.get_variables('zeus') + assert vars == {'ansible_ssh_port': 3001, + 'group_names': ['greek', 'ruler'], + 'inventory_hostname': 'zeus', + 'ntp_server': 'olympus.example.com'} + def test_yaml_change_vars(self): inventory = self.yaml_inventory() vars = inventory.get_variables('thor') diff --git a/test/yaml_hosts b/test/yaml_hosts index 8d98d5133e4..6f9af623620 100644 --- a/test/yaml_hosts +++ b/test/yaml_hosts @@ -6,7 +6,9 @@ moon: titan moon2: enceladus -- zeus +- host: zeus + vars: + - ansible_ssh_port: 3001 - group: greek hosts: