diff --git a/lib/ansible/inventory.py b/lib/ansible/inventory.py index 3295f3f2dd..18d64d6029 100644 --- a/lib/ansible/inventory.py +++ b/lib/ansible/inventory.py @@ -216,11 +216,16 @@ class Inventory(object): def _parse_yaml_host(self, item, variables=[]): def set_variables(host, variables): - for variable in variables: - if len(variable) != 1: - raise errors.AnsibleError("Only one item expected in %s"%(variable)) - k, v = variable.items()[0] - self._set_variable(host, k, v) + if type(variables) == list: + for variable in variables: + if len(variable) != 1: + raise errors.AnsibleError("Only one item expected in %s"%(variable)) + k, v = variable.items()[0] + self._set_variable(host, k, v) + elif type(variables) == dict: + for k, v in variables.iteritems(): + self._set_variable(host, k, v) + if type(item) in [str, unicode]: set_variables(item, variables) diff --git a/test/TestInventory.py b/test/TestInventory.py index 750cbf189a..96991d77d0 100644 --- a/test/TestInventory.py +++ b/test/TestInventory.py @@ -220,13 +220,13 @@ class TestInventory(unittest.TestCase): inventory = self.yaml_inventory() vars = inventory.get_variables('saturn') - assert vars == {"moon":"titan"} + assert vars == {"moon":"titan", "moon2":"enceladus"} def test_yaml_port(self): inventory = self.yaml_inventory() vars = inventory.get_variables('hera') - assert vars == {'ansible_ssh_port': 3000} + assert vars == {'ansible_ssh_port': 3000, 'ntp_server': 'olympus.example.com'} ### Test Runner class method diff --git a/test/yaml_hosts b/test/yaml_hosts index 7568ff4bda..628c284350 100644 --- a/test/yaml_hosts +++ b/test/yaml_hosts @@ -3,7 +3,8 @@ - jupiter - host: saturn vars: - - moon: titan + moon: titan + moon2: enceladus - zeus @@ -14,6 +15,7 @@ - poseidon vars: - ansible_ssh_port: 3000 + - ntp_server: olympus.example.com - group: norse hosts: