Enable more network support in ansible-test. (#20372)

* Only start platform instances with tests selected.
* Enable ios on Shippable.
* Show inventory in explain mode.
* Fix indentation of generated network inventory.
* Update classification of network module_utils.
This commit is contained in:
Matt Clay 2017-01-17 16:24:05 -08:00 committed by GitHub
parent 97491672e4
commit 3c51ce56fd
3 changed files with 41 additions and 7 deletions

View file

@ -10,6 +10,7 @@ from lib.target import (
walk_units_targets,
walk_compile_targets,
walk_sanity_targets,
load_integration_prefixes,
)
from lib.util import (
@ -86,6 +87,7 @@ class PathMapper(object):
self.module_names_by_path = dict((t.path, t.module) for t in self.module_targets)
self.integration_targets_by_name = dict((t.name, t) for t in self.integration_targets)
self.integration_targets_by_alias = dict((a, t) for t in self.integration_targets for a in t.aliases)
self.posix_integration_by_module = dict((m, t.name) for t in self.integration_targets
if 'posix/' in t.aliases for m in t.modules)
@ -94,6 +96,8 @@ class PathMapper(object):
self.network_integration_by_module = dict((m, t.name) for t in self.integration_targets
if 'network/' in t.aliases for m in t.modules)
self.prefixes = load_integration_prefixes()
def classify(self, path):
"""
:type path: str
@ -170,6 +174,21 @@ class PathMapper(object):
}
if ext == '.py':
if name in self.prefixes and self.prefixes[name] == 'network':
network_target = 'network/%s/' % name
if network_target in self.integration_targets_by_alias:
return {
'network-integration': network_target,
'units': 'all',
}
display.warning('Integration tests for "%s" not found.' % network_target)
return {
'units': 'all',
}
return {
'integration': 'all',
'network-integration': 'all',

View file

@ -183,12 +183,20 @@ def command_network_integration(args):
:type args: NetworkIntegrationConfig
"""
internal_targets = command_integration_filter(args, walk_network_integration_targets())
platform_targets = set(a for t in internal_targets for a in t.aliases if a.startswith('network/'))
if args.platform:
instances = [] # type: list [lib.thread.WrappedThread]
for platform_version in args.platform:
platform, version = platform_version.split('/', 1)
platform_target = 'network/%s/' % platform
if platform_target not in platform_targets and 'network/basics/' not in platform_targets:
display.warning('Skipping "%s" because selected tests do not target the "%s" platform.' % (
platform_version, platform))
continue
instance = lib.thread.WrappedThread(functools.partial(network_run, args, platform, version))
instance.daemon = True
instance.start()
@ -202,9 +210,12 @@ def command_network_integration(args):
remotes = [instance.wait_for_result() for instance in instances]
inventory = network_inventory(remotes)
filename = 'test/integration/inventory.networking'
display.info('>>> Inventory: %s\n%s' % (filename, inventory.strip()), verbosity=3)
if not args.explain:
with open('test/integration/inventory.networking', 'w') as inventory_fd:
display.info('>>> Inventory: %s\n%s' % (inventory_fd.name, inventory.strip()), verbosity=3)
with open(filename, 'w') as inventory_fd:
inventory_fd.write(inventory)
else:
install_command_requirements(args)
@ -258,12 +269,12 @@ def network_inventory(remotes):
for group in groups:
hosts = '\n'.join(groups[group])
template += """
template += textwrap.dedent("""
[%s]
%s
""" % (group, hosts)
""") % (group, hosts)
inventory = textwrap.dedent(template)
inventory = template
return inventory
@ -291,9 +302,12 @@ def command_windows_integration(args):
remotes = [instance.wait_for_result() for instance in instances]
inventory = windows_inventory(remotes)
filename = 'test/integration/inventory.winrm'
display.info('>>> Inventory: %s\n%s' % (filename, inventory.strip()), verbosity=3)
if not args.explain:
with open('test/integration/inventory.winrm', 'w') as inventory_fd:
display.info('>>> Inventory: %s\n%s' % (inventory_fd.name, inventory.strip()), verbosity=3)
with open(filename, 'w') as inventory_fd:
inventory_fd.write(inventory)
else:
install_command_requirements(args)

View file

@ -14,6 +14,7 @@ if [ -s /tmp/network.txt ]; then
ansible-test network-integration --color -v --retry-on-error "${target}" --requirements \
--platform vyos/1.1.0 \
--platform ios/csr1000v \
else
echo "No changes requiring integration tests specific to networking were detected."