mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Add missing ansible-test --remote-terminate support. (#32918)
* Expand ansible-test --remote-terminate support: - windows-integration - network-integration These commands previously accepted the option, but did not support it. * Terminate windows and network instances when done.
This commit is contained in:
parent
e5b3f60a74
commit
6472723ba8
4 changed files with 41 additions and 6 deletions
|
@ -317,10 +317,10 @@ def command_network_integration(args):
|
||||||
|
|
||||||
all_targets = tuple(walk_network_integration_targets(include_hidden=True))
|
all_targets = tuple(walk_network_integration_targets(include_hidden=True))
|
||||||
internal_targets = command_integration_filter(args, all_targets, init_callback=network_init)
|
internal_targets = command_integration_filter(args, all_targets, init_callback=network_init)
|
||||||
|
instances = [] # type: list [lib.thread.WrappedThread]
|
||||||
|
|
||||||
if args.platform:
|
if args.platform:
|
||||||
configs = dict((config['platform_version'], config) for config in args.metadata.instance_config)
|
configs = dict((config['platform_version'], config) for config in args.metadata.instance_config)
|
||||||
instances = [] # type: list [lib.thread.WrappedThread]
|
|
||||||
|
|
||||||
for platform_version in args.platform:
|
for platform_version in args.platform:
|
||||||
platform, version = platform_version.split('/', 1)
|
platform, version = platform_version.split('/', 1)
|
||||||
|
@ -346,7 +346,15 @@ def command_network_integration(args):
|
||||||
with open(filename, 'w') as inventory_fd:
|
with open(filename, 'w') as inventory_fd:
|
||||||
inventory_fd.write(inventory)
|
inventory_fd.write(inventory)
|
||||||
|
|
||||||
|
success = False
|
||||||
|
|
||||||
|
try:
|
||||||
command_integration_filtered(args, internal_targets, all_targets)
|
command_integration_filtered(args, internal_targets, all_targets)
|
||||||
|
success = True
|
||||||
|
finally:
|
||||||
|
if args.remote_terminate == 'always' or (args.remote_terminate == 'success' and success):
|
||||||
|
for instance in instances:
|
||||||
|
instance.result.stop()
|
||||||
|
|
||||||
|
|
||||||
def network_init(args, internal_targets):
|
def network_init(args, internal_targets):
|
||||||
|
@ -467,10 +475,10 @@ def command_windows_integration(args):
|
||||||
|
|
||||||
all_targets = tuple(walk_windows_integration_targets(include_hidden=True))
|
all_targets = tuple(walk_windows_integration_targets(include_hidden=True))
|
||||||
internal_targets = command_integration_filter(args, all_targets, init_callback=windows_init)
|
internal_targets = command_integration_filter(args, all_targets, init_callback=windows_init)
|
||||||
|
instances = [] # type: list [lib.thread.WrappedThread]
|
||||||
|
|
||||||
if args.windows:
|
if args.windows:
|
||||||
configs = dict((config['platform_version'], config) for config in args.metadata.instance_config)
|
configs = dict((config['platform_version'], config) for config in args.metadata.instance_config)
|
||||||
instances = [] # type: list [lib.thread.WrappedThread]
|
|
||||||
|
|
||||||
for version in args.windows:
|
for version in args.windows:
|
||||||
config = configs['windows/%s' % version]
|
config = configs['windows/%s' % version]
|
||||||
|
@ -492,7 +500,15 @@ def command_windows_integration(args):
|
||||||
with open(filename, 'w') as inventory_fd:
|
with open(filename, 'w') as inventory_fd:
|
||||||
inventory_fd.write(inventory)
|
inventory_fd.write(inventory)
|
||||||
|
|
||||||
|
success = False
|
||||||
|
|
||||||
|
try:
|
||||||
command_integration_filtered(args, internal_targets, all_targets)
|
command_integration_filtered(args, internal_targets, all_targets)
|
||||||
|
success = True
|
||||||
|
finally:
|
||||||
|
if args.remote_terminate == 'always' or (args.remote_terminate == 'success' and success):
|
||||||
|
for instance in instances:
|
||||||
|
instance.result.stop()
|
||||||
|
|
||||||
|
|
||||||
def windows_init(args, internal_targets): # pylint: disable=locally-disabled, unused-argument
|
def windows_init(args, internal_targets): # pylint: disable=locally-disabled, unused-argument
|
||||||
|
|
|
@ -23,6 +23,7 @@ class WrappedThread(threading.Thread):
|
||||||
super(WrappedThread, self).__init__()
|
super(WrappedThread, self).__init__()
|
||||||
self._result = queue.Queue()
|
self._result = queue.Queue()
|
||||||
self.action = action
|
self.action = action
|
||||||
|
self.result = None
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
"""
|
"""
|
||||||
|
@ -41,9 +42,13 @@ class WrappedThread(threading.Thread):
|
||||||
:rtype: any
|
:rtype: any
|
||||||
"""
|
"""
|
||||||
result, exception = self._result.get()
|
result, exception = self._result.get()
|
||||||
|
|
||||||
if exception:
|
if exception:
|
||||||
if sys.version_info[0] > 2:
|
if sys.version_info[0] > 2:
|
||||||
raise exception[1].with_traceback(exception[2])
|
raise exception[1].with_traceback(exception[2])
|
||||||
# noinspection PyRedundantParentheses
|
# noinspection PyRedundantParentheses
|
||||||
exec('raise exception[0], exception[1], exception[2]') # pylint: disable=locally-disabled, exec-used
|
exec('raise exception[0], exception[1], exception[2]') # pylint: disable=locally-disabled, exec-used
|
||||||
|
|
||||||
|
self.result = result
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
|
@ -41,7 +41,14 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
for version in "${python_versions[@]}"; do
|
for version in "${python_versions[@]}"; do
|
||||||
|
# terminate remote instances on the final python version tested
|
||||||
|
if [ "${version}" = "${python_versions[-1]}" ]; then
|
||||||
|
terminate="always"
|
||||||
|
else
|
||||||
|
terminate="never"
|
||||||
|
fi
|
||||||
|
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
ansible-test network-integration --color -v --retry-on-error "${target}" --docker default --python "${version}" \
|
ansible-test network-integration --color -v --retry-on-error "${target}" --docker default --python "${version}" \
|
||||||
${COVERAGE:+"$COVERAGE"} ${CHANGED:+"$CHANGED"} "${platforms[@]}"
|
${COVERAGE:+"$COVERAGE"} ${CHANGED:+"$CHANGED"} "${platforms[@]}" --remote-terminate "${terminate}"
|
||||||
done
|
done
|
||||||
|
|
|
@ -67,7 +67,14 @@ for version in "${python_versions[@]}"; do
|
||||||
ci="windows/ci/minimal/"
|
ci="windows/ci/minimal/"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# terminate remote instances on the final python version tested
|
||||||
|
if [ "${version}" = "${python_versions[-1]}" ]; then
|
||||||
|
terminate="always"
|
||||||
|
else
|
||||||
|
terminate="never"
|
||||||
|
fi
|
||||||
|
|
||||||
# shellcheck disable=SC2086
|
# shellcheck disable=SC2086
|
||||||
ansible-test windows-integration --color -v --retry-on-error "${ci}" --docker default --python "${version}" ${COVERAGE:+"$COVERAGE"} ${CHANGED:+"$CHANGED"} \
|
ansible-test windows-integration --color -v --retry-on-error "${ci}" --docker default --python "${version}" ${COVERAGE:+"$COVERAGE"} ${CHANGED:+"$CHANGED"} \
|
||||||
"${platforms[@]}" --changed-all-target "${changed_all_target}"
|
"${platforms[@]}" --changed-all-target "${changed_all_target}" --remote-terminate "${terminate}"
|
||||||
done
|
done
|
||||||
|
|
Loading…
Reference in a new issue