Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[stable-2.5] Backport test infra updates and test fixes. #49204

Merged
merged 6 commits into from
Dec 4, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ Aliases can be used to skip platforms using one of the following:
- ``skip/rhel`` - Skip tests on RHEL.
- ``skip/docker`` - Skip tests when running on a Docker container

Platform versions, as specified using the ``--remote`` option with ``/`` removed, can also be skipped:

- ``skip/freebsd11.1`` - Skip tests on FreeBSD 11.1.
- ``skip/rhel7.6`` - Skip tests on RHEL 7.6.

Aliases can be used to skip Python major versions using one of the following:

- ``skip/python2`` - Skip tests on Python 2.x.
Expand Down
9 changes: 3 additions & 6 deletions shippable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,7 @@ matrix:
- env: T=network

- env: T=osx/10.11/1
- env: T=rhel/7.5/1
- env: T=freebsd/10.4/1
- env: T=rhel/7.6/1
- env: T=freebsd/11.1/1
- env: T=linux/centos6/1
- env: T=linux/centos7/1
Expand All @@ -59,8 +58,7 @@ matrix:
- env: T=linux/ubuntu1604py3/1

- env: T=osx/10.11/2
- env: T=rhel/7.5/2
- env: T=freebsd/10.4/2
- env: T=rhel/7.6/2
- env: T=freebsd/11.1/2
- env: T=linux/centos6/2
- env: T=linux/centos7/2
Expand All @@ -72,8 +70,7 @@ matrix:
- env: T=linux/ubuntu1604py3/2

- env: T=osx/10.11/3
- env: T=rhel/7.5/3
- env: T=freebsd/10.4/3
- env: T=rhel/7.6/3
- env: T=freebsd/11.1/3
- env: T=linux/centos6/3
- env: T=linux/centos7/3
Expand Down
1 change: 1 addition & 0 deletions test/integration/targets/lookup_passwordstore/aliases
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
shippable/posix/group2
destructive
skip/rhel
10 changes: 6 additions & 4 deletions test/integration/targets/lookup_passwordstore/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
- include: "package.yml"
when: "ansible_distribution_version not in passwordstore_skip_os.get(ansible_distribution, [])"
- include: "tests.yml"
when: "ansible_distribution_version not in passwordstore_skip_os.get(ansible_distribution, [])"
- block:
- include: "package.yml"
- include: "tests.yml"
when:
- not (ansible_distribution == 'RedHat') # requires EPEL
- not (ansible_distribution == 'CentOS' and ansible_distribution_version is version_compare('7', '<'))
4 changes: 0 additions & 4 deletions test/integration/targets/lookup_passwordstore/vars/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,3 @@ passwordstore_privkey: |
SxHTvI2pKk+gx0FB8wWhd/CocAHJpx9oNUs/7A==
=ZF3O
-----END PGP PRIVATE KEY BLOCK-----
passwordstore_skip_os:
Ubuntu: ['12.04']
RedHat: ['7.4']
CentOS: ['6.9', '6.10']
3 changes: 1 addition & 2 deletions test/runner/completion/remote.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
freebsd/10.4
freebsd/11.1
osx/10.11
rhel/7.5
rhel/7.6
4 changes: 4 additions & 0 deletions test/runner/lib/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -409,6 +409,10 @@ def parse_args():
shell.set_defaults(func=command_shell,
config=ShellConfig)

shell.add_argument('--raw',
action='store_true',
help='direct to shell with no setup')

add_environments(shell, tox_version=True)
add_extra_docker_options(shell)
add_httptester_options(shell, argparse)
Expand Down
5 changes: 5 additions & 0 deletions test/runner/lib/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,11 @@ def __init__(self, args):
"""
super(ShellConfig, self).__init__(args, 'shell')

self.raw = args.raw # type: bool

if self.raw:
self.httptester = False


class SanityConfig(TestConfig):
"""Configuration for the sanity command."""
Expand Down
15 changes: 15 additions & 0 deletions test/runner/lib/delegation.py
Original file line number Diff line number Diff line change
Expand Up @@ -334,9 +334,11 @@ def delegate_remote(args, exclude, require, integration_targets):

core_ci = AnsibleCoreCI(args, platform, version, stage=args.remote_stage, provider=args.remote_provider)
success = False
raw = False

if isinstance(args, ShellConfig):
use_httptester = args.httptester
raw = args.raw
else:
use_httptester = args.httptester and any('needs/httptester/' in target.aliases for target in integration_targets)

Expand All @@ -359,6 +361,9 @@ def delegate_remote(args, exclude, require, integration_targets):
# Windows doesn't need the ansible-test fluff, just run the SSH command
manage = ManageWindowsCI(core_ci)
cmd = ['powershell.exe']
elif raw:
manage = ManagePosixCI(core_ci)
cmd = create_shell_command(['bash'])
else:
options = {
'--remote': 1,
Expand All @@ -384,6 +389,7 @@ def delegate_remote(args, exclude, require, integration_targets):
manage = ManagePosixCI(core_ci)

manage.setup()

if isinstance(args, IntegrationConfig):
cloud_platforms = get_cloud_providers(args)

Expand All @@ -394,7 +400,16 @@ def delegate_remote(args, exclude, require, integration_targets):
manage.ssh(cmd, ssh_options)
success = True
finally:
download = False

if platform != 'windows':
download = True

if isinstance(args, ShellConfig):
if args.raw:
download = False

if download:
manage.ssh('rm -rf /tmp/results && cp -a ansible/test/results /tmp/results && chmod -R a+r /tmp/results')
manage.download('/tmp/results', 'test')
finally:
Expand Down
11 changes: 11 additions & 0 deletions test/runner/lib/executor.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,10 @@ def install_command_requirements(args, python_version=None):
:type args: EnvironmentConfig
:type python_version: str | None
"""
if isinstance(args, ShellConfig):
if args.raw:
return

generate_egg_info(args)

if not args.requirements:
Expand Down Expand Up @@ -1628,6 +1632,13 @@ def get_integration_remote_filter(args, targets):
display.warning('Excluding tests marked "%s" which are not supported on %s: %s'
% (skip.rstrip('/'), platform, ', '.join(skipped)))

skip = 'skip/%s/' % args.remote.replace('/', '')
skipped = [target.name for target in targets if skip in target.aliases]
if skipped:
exclude.append(skip)
display.warning('Excluding tests marked "%s" which are not supported on %s: %s'
% (skip.rstrip('/'), args.remote.replace('/', ' '), ', '.join(skipped)))

python_version = 2 # remotes are expected to default to python 2

skip = 'skip/python%d/' % python_version
Expand Down
9 changes: 9 additions & 0 deletions test/runner/lib/manage_ci.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@
ansible_environment,
)

from lib.config import (
ShellConfig,
)


class ManageWindowsCI(object):
"""Manage access to a Windows instance provided by Ansible Core CI."""
Expand Down Expand Up @@ -203,6 +207,11 @@ def __init__(self, core_ci):
def setup(self):
"""Start instance and wait for it to become ready and respond to an ansible ping."""
self.wait()

if isinstance(self.core_ci.args, ShellConfig):
if self.core_ci.args.raw:
return

self.configure()
self.upload_source()

Expand Down