From f718fc99b78ff4ce2d494b0fa3b458166e0ab74d Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Sun, 6 May 2012 18:02:53 -0400 Subject: [PATCH] Add missing file --- lib/ansible/inventory_script.py | 59 +++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 lib/ansible/inventory_script.py diff --git a/lib/ansible/inventory_script.py b/lib/ansible/inventory_script.py new file mode 100644 index 00000000000..8c4a78b1251 --- /dev/null +++ b/lib/ansible/inventory_script.py @@ -0,0 +1,59 @@ +# (c) 2012, Michael DeHaan +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . + +############################################# + +import os +import subprocess +import constants as C +import os +from ansible.host import Host +from ansible.group import Group +from ansible import errors +from ansible import utils + +class InventoryScript(object): + """ + Host inventory parser for ansible using external inventory scripts. + """ + + def __init__(self, filename=C.DEFAULT_HOST_LIST): + + cmd = [ filename, "--list" ] + sp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + (stdout, stderr) = sp.communicate() + self.data = stdout + self.groups = self._parse() + + def _parse(self): + groups = {} + self.raw = utils.parse_json(self.data) + all=Group('all') + self.groups = dict(all=all) + group = None + for (group_name, hosts) in self.raw.items(): + group = groups[group_name] = Group(group_name) + host = None + for hostname in hosts: + host = Host(hostname) + group.add_host(host) + # FIXME: hack shouldn't be needed + all.add_host(host) + all.add_child_group(group) + return groups + +