Allow ansible-playbook to determine if an invalid limit is specified

This commit is contained in:
Toshio Kuratomi 2015-01-19 13:39:45 -08:00
parent cf6f05e71d
commit 2e0472e03b
2 changed files with 34 additions and 4 deletions

View file

@ -166,9 +166,23 @@ def main(args):
raise errors.AnsibleError("the playbook: %s does not appear to be a file" % playbook) raise errors.AnsibleError("the playbook: %s does not appear to be a file" % playbook)
inventory = ansible.inventory.Inventory(options.inventory, vault_password=vault_pass) inventory = ansible.inventory.Inventory(options.inventory, vault_password=vault_pass)
inventory.subset(options.subset)
# Note: slightly wrong, this is written so that implicit localhost
# (which is not returned in list_hosts()) is taken into account for
# warning if inventory is empty. But it can't be taken into account for
# checking if limit doesn't match any hosts. Instead we don't worry about
# limit if only implicit localhost was in inventory to start with.
#
# Fix this in v2
no_hosts = False
if len(inventory.list_hosts()) == 0: if len(inventory.list_hosts()) == 0:
utils.warning("provided hosts list is empty") # Empty inventory
utils.warning("provided hosts list is empty, only localhost is available")
no_hosts = True
inventory.subset(options.subset)
if len(inventory.list_hosts()) == 0 and no_hosts is False:
# Invalid limit
raise errors.AnsibleError("Specified --limit does not match any hosts")
# run all playbooks specified on the command line # run all playbooks specified on the command line
for playbook in args: for playbook in args:

View file

@ -15,7 +15,9 @@ from ansible.playbook.task import Task
from ansible.utils.cli import base_parser from ansible.utils.cli import base_parser
from ansible.utils.vars import combine_vars from ansible.utils.vars import combine_vars
from ansible.vars import VariableManager from ansible.vars import VariableManager
from ansible.utils import warning
# Implement an ansible.utils.warning() function later
warning = print
#--------------------------------------------------------------------------------------------------- #---------------------------------------------------------------------------------------------------
@ -137,9 +139,23 @@ def main(args):
# create the inventory, and filter it based on the subset specified (if any) # create the inventory, and filter it based on the subset specified (if any)
inventory = Inventory(loader=loader, variable_manager=variable_manager, host_list=options.inventory) inventory = Inventory(loader=loader, variable_manager=variable_manager, host_list=options.inventory)
inventory.subset(options.subset)
# Note: slightly wrong, this is written so that implicit localhost
# (which is not returned in list_hosts()) is taken into account for
# warning if inventory is empty. But it can't be taken into account for
# checking if limit doesn't match any hosts. Instead we don't worry about
# limit if only implicit localhost was in inventory to start with.
#
# Fix this when we rewrite inventory by making localhost a real host (and thus show up in list_hosts())
no_hosts = False
if len(inventory.list_hosts()) == 0: if len(inventory.list_hosts()) == 0:
# Empty inventory
warning("provided hosts list is empty, only localhost is available") warning("provided hosts list is empty, only localhost is available")
no_hosts = True
inventory.subset(options.subset)
if len(inventory.list_hosts()) == 0 and no_hosts is False:
# Invalid limit
raise errors.AnsibleError("Specified --limit does not match any hosts")
# create the playbook executor, which manages running the plays # create the playbook executor, which manages running the plays
# via a task queue manager # via a task queue manager