diff --git a/lib/ansible/runner.py b/lib/ansible/runner.py index 50c4029a45d..0df79873474 100755 --- a/lib/ansible/runner.py +++ b/lib/ansible/runner.py @@ -123,6 +123,17 @@ class Runner(object): self._tmp_paths = {} random.seed() + # ***************************************************** + + @classmethod + def parse_hosts(cls, host_list, override_hosts=None, extra_vars=None): + ''' parse the host inventory file, returns (hosts, groups) ''' + if override_hosts is None: + inventory = ansible.inventory.Inventory(host_list, extra_vars) + else: + inventory = ansible.inventory.Inventory(override_hosts) + + return inventory.host_list, inventory.groups # ***************************************************** diff --git a/test/TestInventory.py b/test/TestInventory.py index b0e3c62ccf5..ba89bdc3a9c 100644 --- a/test/TestInventory.py +++ b/test/TestInventory.py @@ -2,6 +2,7 @@ import os import unittest from ansible.inventory import Inventory +from ansible.runner import Runner class TestInventory(unittest.TestCase): @@ -140,4 +141,27 @@ class TestInventory(unittest.TestCase): inventory = self.script_inventory() vars = inventory.get_variables('thor', 'simple=yes') - assert vars == {"hammer":True, "simple": "yes"} \ No newline at end of file + assert vars == {"hammer":True, "simple": "yes"} + + ### Test Runner class method + + def test_class_method(self): + hosts, groups = Runner.parse_hosts(self.inventory_file) + + expected_hosts = ['jupiter', 'saturn', 'zeus', 'hera', 'poseidon', 'thor', 'odin', 'loki'] + assert hosts == expected_hosts + + expected_groups= { + 'ungrouped': ['jupiter', 'saturn'], + 'greek': ['zeus', 'hera', 'poseidon'], + 'norse': ['thor', 'odin', 'loki'] + } + assert groups == expected_groups + + def test_class_override(self): + override_hosts = ['thor', 'odin'] + hosts, groups = Runner.parse_hosts(self.inventory_file, override_hosts) + + assert hosts == override_hosts + + assert groups == { 'ungrouped': override_hosts }