mirror of https://github.com/ansible/ansible.git
whitespace + remove deprecated YAML parser (migration script lives in examples/scripts and warning was added
in 0.6 release)pull/781/merge
parent
0810f26095
commit
faed4b5a33
@ -1,142 +0,0 @@
|
|||||||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
|
||||||
#
|
|
||||||
# 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 <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
import ansible.constants as C
|
|
||||||
from ansible.inventory.host import Host
|
|
||||||
from ansible.inventory.group import Group
|
|
||||||
from ansible import errors
|
|
||||||
from ansible import utils
|
|
||||||
import sys
|
|
||||||
|
|
||||||
class InventoryParserYaml(object):
|
|
||||||
''' Host inventory parser for ansible '''
|
|
||||||
|
|
||||||
__slots__ = [ '_hosts', 'groups' ]
|
|
||||||
|
|
||||||
def __init__(self, filename=C.DEFAULT_HOST_LIST):
|
|
||||||
|
|
||||||
sys.stderr.write("WARNING: YAML inventory files are deprecated in 0.6 and will be removed in 0.7, to migrate" +
|
|
||||||
" download and run https://github.com/ansible/ansible/blob/devel/examples/scripts/yaml_to_ini.py\n")
|
|
||||||
|
|
||||||
fh = open(filename)
|
|
||||||
data = fh.read()
|
|
||||||
fh.close()
|
|
||||||
self._hosts = {}
|
|
||||||
self._parse(data)
|
|
||||||
|
|
||||||
def _make_host(self, hostname):
|
|
||||||
|
|
||||||
if hostname in self._hosts:
|
|
||||||
return self._hosts[hostname]
|
|
||||||
else:
|
|
||||||
host = Host(hostname)
|
|
||||||
self._hosts[hostname] = host
|
|
||||||
return host
|
|
||||||
|
|
||||||
# see file 'test/yaml_hosts' for syntax
|
|
||||||
|
|
||||||
def _parse(self, data):
|
|
||||||
# FIXME: refactor into subfunctions
|
|
||||||
|
|
||||||
all = Group('all')
|
|
||||||
ungrouped = Group('ungrouped')
|
|
||||||
all.add_child_group(ungrouped)
|
|
||||||
|
|
||||||
self.groups = dict(all=all, ungrouped=ungrouped)
|
|
||||||
grouped_hosts = []
|
|
||||||
|
|
||||||
yaml = utils.parse_yaml(data)
|
|
||||||
|
|
||||||
# first add all groups
|
|
||||||
for item in yaml:
|
|
||||||
if type(item) == dict and 'group' in item:
|
|
||||||
group = Group(item['group'])
|
|
||||||
|
|
||||||
for subresult in item.get('hosts',[]):
|
|
||||||
|
|
||||||
if type(subresult) in [ str, unicode ]:
|
|
||||||
host = self._make_host(subresult)
|
|
||||||
group.add_host(host)
|
|
||||||
grouped_hosts.append(host)
|
|
||||||
elif type(subresult) == dict:
|
|
||||||
host = self._make_host(subresult['host'])
|
|
||||||
vars = subresult.get('vars',{})
|
|
||||||
if type(vars) == list:
|
|
||||||
for subitem in vars:
|
|
||||||
for (k,v) in subitem.items():
|
|
||||||
host.set_variable(k,v)
|
|
||||||
elif type(vars) == dict:
|
|
||||||
for (k,v) in subresult.get('vars',{}).items():
|
|
||||||
host.set_variable(k,v)
|
|
||||||
else:
|
|
||||||
raise errors.AnsibleError("unexpected type for variable")
|
|
||||||
group.add_host(host)
|
|
||||||
grouped_hosts.append(host)
|
|
||||||
|
|
||||||
vars = item.get('vars',{})
|
|
||||||
if type(vars) == dict:
|
|
||||||
for (k,v) in item.get('vars',{}).items():
|
|
||||||
group.set_variable(k,v)
|
|
||||||
elif type(vars) == list:
|
|
||||||
for subitem in vars:
|
|
||||||
if type(subitem) != dict:
|
|
||||||
raise errors.AnsibleError("expected a dictionary")
|
|
||||||
for (k,v) in subitem.items():
|
|
||||||
group.set_variable(k,v)
|
|
||||||
|
|
||||||
self.groups[group.name] = group
|
|
||||||
all.add_child_group(group)
|
|
||||||
|
|
||||||
# add host definitions
|
|
||||||
for item in yaml:
|
|
||||||
if type(item) in [ str, unicode ]:
|
|
||||||
host = self._make_host(item)
|
|
||||||
if host not in grouped_hosts:
|
|
||||||
ungrouped.add_host(host)
|
|
||||||
|
|
||||||
elif type(item) == dict and 'host' in item:
|
|
||||||
host = self._make_host(item['host'])
|
|
||||||
|
|
||||||
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)
|
|
||||||
|
|
||||||
groups = item.get('groups', {})
|
|
||||||
if type(groups) in [ str, unicode ]:
|
|
||||||
groups = [ groups ]
|
|
||||||
if type(groups)==list:
|
|
||||||
for subitem in groups:
|
|
||||||
if subitem in self.groups:
|
|
||||||
group = self.groups[subitem]
|
|
||||||
else:
|
|
||||||
group = Group(subitem)
|
|
||||||
self.groups[group.name] = group
|
|
||||||
all.add_child_group(group)
|
|
||||||
group.add_host(host)
|
|
||||||
grouped_hosts.append(host)
|
|
||||||
|
|
||||||
if host not in grouped_hosts:
|
|
||||||
ungrouped.add_host(host)
|
|
||||||
|
|
||||||
# make sure ungrouped.hosts is the complement of grouped_hosts
|
|
||||||
ungrouped_hosts = [host for host in ungrouped.hosts if host not in grouped_hosts]
|
|
||||||
|
|
||||||
|
|
@ -1,3 +1,3 @@
|
|||||||
# There is actually no actual shell module source, when you use 'shell' in ansible,
|
# There is actually no actual shell module source, when you use 'shell' in ansible,
|
||||||
# it runs the 'command' module with special arguments and it behaves differently.
|
# it runs the 'command' module with special arguments and it behaves differently.
|
||||||
# See the command source and the comment "#USE_SHELL".
|
# See the command source and the comment "#USE_SHELL".
|
||||||
|
Loading…
Reference in New Issue