* Restore behavior for detecting only localhost, and no limit match. Fixes #52152 * Add test for non-matching limit
This commit is contained in:
parent
847d089d6b
commit
cdb53ff1a4
5 changed files with 27 additions and 4 deletions
|
@ -477,9 +477,6 @@ class CLI(with_metaclass(ABCMeta, object)):
|
||||||
|
|
||||||
# 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 = InventoryManager(loader=loader, sources=options['inventory'])
|
inventory = InventoryManager(loader=loader, sources=options['inventory'])
|
||||||
subset = options.get('subset', False)
|
|
||||||
if subset:
|
|
||||||
inventory.subset(subset)
|
|
||||||
|
|
||||||
# create the variable manager, which will be shared throughout
|
# create the variable manager, which will be shared throughout
|
||||||
# the code, ensuring a consistent view of global variables
|
# the code, ensuring a consistent view of global variables
|
||||||
|
@ -497,8 +494,10 @@ class CLI(with_metaclass(ABCMeta, object)):
|
||||||
display.warning("provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'")
|
display.warning("provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'")
|
||||||
no_hosts = True
|
no_hosts = True
|
||||||
|
|
||||||
|
inventory.subset(subset)
|
||||||
|
|
||||||
hosts = inventory.list_hosts(pattern)
|
hosts = inventory.list_hosts(pattern)
|
||||||
if len(hosts) == 0 and no_hosts is False:
|
if not hosts and no_hosts is False:
|
||||||
raise AnsibleError("Specified hosts and/or --limit does not match any hosts")
|
raise AnsibleError("Specified hosts and/or --limit does not match any hosts")
|
||||||
|
|
||||||
return hosts
|
return hosts
|
||||||
|
|
|
@ -99,6 +99,14 @@ class PlaybookCLI(CLI):
|
||||||
# create base objects
|
# create base objects
|
||||||
loader, inventory, variable_manager = self._play_prereqs()
|
loader, inventory, variable_manager = self._play_prereqs()
|
||||||
|
|
||||||
|
# (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())
|
||||||
|
CLI.get_host_list(inventory, context.CLIARGS['subset'])
|
||||||
|
|
||||||
# flush fact cache if requested
|
# flush fact cache if requested
|
||||||
if context.CLIARGS['flush_cache']:
|
if context.CLIARGS['flush_cache']:
|
||||||
self._flush_cache(inventory, variable_manager)
|
self._flush_cache(inventory, variable_manager)
|
||||||
|
|
1
test/integration/targets/inventory/aliases
Normal file
1
test/integration/targets/inventory/aliases
Normal file
|
@ -0,0 +1 @@
|
||||||
|
shippable/posix/group3
|
4
test/integration/targets/inventory/playbook.yml
Normal file
4
test/integration/targets/inventory/playbook.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
- hosts: all
|
||||||
|
gather_facts: false
|
||||||
|
tasks:
|
||||||
|
- ping:
|
11
test/integration/targets/inventory/runme.sh
Executable file
11
test/integration/targets/inventory/runme.sh
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# https://github.com/ansible/ansible/issues/52152
|
||||||
|
# Ensure that non-matching limit causes failure with rc 1
|
||||||
|
ansible-playbook -i ../../inventory --limit foo playbook.yml
|
||||||
|
if [ "$?" != "1" ]; then
|
||||||
|
echo "Non-matching limit should cause failure"
|
||||||
|
exit 1
|
||||||
|
fi
|
Loading…
Reference in a new issue