Commit 0abca689 by Michael DeHaan

Since host variables are becoming important, it did not make sense to sustain…

Since host variables are becoming important, it did not make sense to sustain --override-hosts, with the ability
to create hosts that didn't have inventory information, but also existed, in various groups.
parent c7c38e9a
...@@ -33,8 +33,6 @@ def main(args): ...@@ -33,8 +33,6 @@ def main(args):
# create parser for CLI options # create parser for CLI options
usage = "%prog playbook.yml" usage = "%prog playbook.yml"
parser = utils.base_parser(constants=C, usage=usage, connect_opts=True, runas_opts=True) parser = utils.base_parser(constants=C, usage=usage, connect_opts=True, runas_opts=True)
parser.add_option('-O', '--override-hosts', dest="override_hosts", default=None,
help="run playbook against these hosts regardless of inventory settings")
parser.add_option('-e', '--extra-vars', dest="extra_vars", default=None, parser.add_option('-e', '--extra-vars', dest="extra_vars", default=None,
help="set additional key=value variables from the CLI") help="set additional key=value variables from the CLI")
...@@ -54,9 +52,6 @@ def main(args): ...@@ -54,9 +52,6 @@ def main(args):
if options.sudo_user: if options.sudo_user:
options.sudo = True options.sudo = True
options.sudo_user = options.sudo_user or C.DEFAULT_SUDO_USER options.sudo_user = options.sudo_user or C.DEFAULT_SUDO_USER
override_hosts = None
if options.override_hosts:
override_hosts = options.override_hosts.split(",")
extra_vars = utils.parse_kv(options.extra_vars) extra_vars = utils.parse_kv(options.extra_vars)
# run all playbooks specified on the command line # run all playbooks specified on the command line
...@@ -70,7 +65,6 @@ def main(args): ...@@ -70,7 +65,6 @@ def main(args):
playbook=playbook, playbook=playbook,
module_path=options.module_path, module_path=options.module_path,
host_list=options.inventory, host_list=options.inventory,
override_hosts=override_hosts,
forks=options.forks, forks=options.forks,
debug=options.debug, debug=options.debug,
remote_user=options.remote_user, remote_user=options.remote_user,
......
...@@ -73,3 +73,4 @@ class Group(object): ...@@ -73,3 +73,4 @@ class Group(object):
...@@ -37,34 +37,33 @@ class Inventory(object): ...@@ -37,34 +37,33 @@ class Inventory(object):
def __init__(self, host_list=C.DEFAULT_HOST_LIST): def __init__(self, host_list=C.DEFAULT_HOST_LIST):
# the host file file or script path
if type(host_list) not in [ str, unicode ]:
raise Exception("host list must be a path")
self.host_list = host_list self.host_list = host_list
# the inventory object holds a list of groups
self.groups = [] self.groups = []
# a list of host(names) to contain current inquiries to
self._restriction = None self._restriction = None
# whether the inventory file is a script
self._is_script = False self._is_script = False
if host_list: if os.access(host_list, os.X_OK):
if type(host_list) == list: self._is_script = True
self.groups = self._groups_from_override_hosts(host_list) self.parser = InventoryScript(filename=host_list)
elif os.access(host_list, os.X_OK): self.groups = self.parser.groups.values()
self._is_script = True else:
self.parser = InventoryScript(filename=host_list) data = file(host_list).read()
if not data.startswith("---"):
self.parser = InventoryParser(filename=host_list)
self.groups = self.parser.groups.values() self.groups = self.parser.groups.values()
else: else:
data = file(host_list).read() self.parser = InventoryParserYaml(filename=host_list)
if not data.startswith("---"): self.groups = self.parser.groups.values()
self.parser = InventoryParser(filename=host_list)
self.groups = self.parser.groups.values()
else:
self.parser = InventoryParserYaml(filename=host_list)
self.groups = self.parser.groups.values()
def _groups_from_override_hosts(self, list):
# support for playbook's --override-hosts only
all = Group(name='all')
for h in list:
all.add_host(Host(name=h))
return dict(all=all)
def _match(self, str, pattern_str): def _match(self, str, pattern_str):
return fnmatch.fnmatch(str, pattern_str) return fnmatch.fnmatch(str, pattern_str)
...@@ -73,7 +72,8 @@ class Inventory(object): ...@@ -73,7 +72,8 @@ class Inventory(object):
hosts = {} hosts = {}
patterns = pattern.replace(";",":").split(":") patterns = pattern.replace(";",":").split(":")
for group in self.get_groups(): groups = self.get_groups()
for group in groups:
for host in group.get_hosts(): for host in group.get_hosts():
for pat in patterns: for pat in patterns:
if group.name == pat or pat == 'all' or self._match(host.name, pat): if group.name == pat or pat == 'all' or self._match(host.name, pat):
...@@ -131,19 +131,22 @@ class Inventory(object): ...@@ -131,19 +131,22 @@ class Inventory(object):
self.groups.append(group) self.groups.append(group)
def list_hosts(self, pattern="all"): def list_hosts(self, pattern="all"):
""" DEPRECATED: Get all host names matching the pattern """
return [ h.name for h in self.get_hosts(pattern) ] return [ h.name for h in self.get_hosts(pattern) ]
def list_groups(self): def list_groups(self):
return [ g.name for g in self.groups ] return [ g.name for g in self.groups ]
def restrict_to(self, restriction): def get_restriction(self):
return self._restriction
def restrict_to(self, restriction, append_missing=False):
""" Restrict list operations to the hosts given in restriction """ """ Restrict list operations to the hosts given in restriction """
if type(restriction) != list:
restriction = [ restriction ] if type(restriction) != list:
self._restriction = restriction restriction = [ restriction ]
self._restriction = restriction
def lift_restriction(self): def lift_restriction(self):
""" Do not restrict list operations """ """ Do not restrict list operations """
self._restriction = None
self._restriction = None
...@@ -56,7 +56,6 @@ class PlayBook(object): ...@@ -56,7 +56,6 @@ class PlayBook(object):
sudo_pass = C.DEFAULT_SUDO_PASS, sudo_pass = C.DEFAULT_SUDO_PASS,
remote_port = C.DEFAULT_REMOTE_PORT, remote_port = C.DEFAULT_REMOTE_PORT,
transport = C.DEFAULT_TRANSPORT, transport = C.DEFAULT_TRANSPORT,
override_hosts = None,
debug = False, debug = False,
callbacks = None, callbacks = None,
runner_callbacks = None, runner_callbacks = None,
...@@ -76,7 +75,6 @@ class PlayBook(object): ...@@ -76,7 +75,6 @@ class PlayBook(object):
sudo_pass: if sudo==True, and a password is required, this is the sudo password sudo_pass: if sudo==True, and a password is required, this is the sudo password
remote_port: default remote port to use if not specified with the host or play remote_port: default remote port to use if not specified with the host or play
transport: how to connect to hosts that don't specify a transport (local, paramiko, etc) transport: how to connect to hosts that don't specify a transport (local, paramiko, etc)
override_hosts: skip the inventory file, just talk to these hosts
callbacks output callbacks for the playbook callbacks output callbacks for the playbook
runner_callbacks: more callbacks, this time for the runner API runner_callbacks: more callbacks, this time for the runner API
stats: holds aggregrate data about events occuring to each host stats: holds aggregrate data about events occuring to each host
...@@ -99,7 +97,6 @@ class PlayBook(object): ...@@ -99,7 +97,6 @@ class PlayBook(object):
self.debug = debug self.debug = debug
self.callbacks = callbacks self.callbacks = callbacks
self.runner_callbacks = runner_callbacks self.runner_callbacks = runner_callbacks
self.override_hosts = override_hosts
self.stats = stats self.stats = stats
self.sudo = sudo self.sudo = sudo
self.sudo_pass = sudo_pass self.sudo_pass = sudo_pass
...@@ -107,16 +104,11 @@ class PlayBook(object): ...@@ -107,16 +104,11 @@ class PlayBook(object):
self.extra_vars = extra_vars self.extra_vars = extra_vars
self.global_vars = {} self.global_vars = {}
if override_hosts is not None: self.inventory = ansible.inventory.Inventory(host_list)
if type(override_hosts) != list:
raise errors.AnsibleError("override hosts must be a list")
if not self.inventory._is_script:
self.global_vars.update(ansible.inventory.Inventory(host_list).get_group_variables('all'))
else: if not self.inventory._is_script:
self.inventory = ansible.inventory.Inventory(host_list) self.global_vars.update(self.inventory.get_group_variables('all'))
if not self.inventory._is_script:
self.global_vars.update(ansible.inventory.Inventory(host_list).get_group_variables('all'))
self.basedir = os.path.dirname(playbook) self.basedir = os.path.dirname(playbook)
self.playbook = self._parse_playbook(playbook) self.playbook = self._parse_playbook(playbook)
...@@ -504,8 +496,6 @@ class PlayBook(object): ...@@ -504,8 +496,6 @@ class PlayBook(object):
name = pg.get('name', pattern) name = pg.get('name', pattern)
if isinstance(pattern, list): if isinstance(pattern, list):
pattern = ';'.join(pattern) pattern = ';'.join(pattern)
if self.override_hosts:
pattern = 'all'
if pattern is None: if pattern is None:
raise errors.AnsibleError('hosts declaration is required') raise errors.AnsibleError('hosts declaration is required')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment