Add --raw option to ansible-test shell command.

It is currently supported only with the `--remote` option.

This makes it easier to troubleshoot new instances which are not
yet supported by the setup scripts used by ansible-test.

(cherry picked from commit 0826a00803)
This commit is contained in:
Matt Clay 2018-11-16 14:50:01 -08:00 committed by Toshio Kuratomi
parent 7a0e86551d
commit 19ba752b56
5 changed files with 37 additions and 0 deletions

View file

@ -409,6 +409,10 @@ def parse_args():
shell.set_defaults(func=command_shell, shell.set_defaults(func=command_shell,
config=ShellConfig) config=ShellConfig)
shell.add_argument('--raw',
action='store_true',
help='direct to shell with no setup')
add_environments(shell, tox_version=True) add_environments(shell, tox_version=True)
add_extra_docker_options(shell) add_extra_docker_options(shell)
add_httptester_options(shell, argparse) add_httptester_options(shell, argparse)

View file

@ -134,6 +134,11 @@ class ShellConfig(EnvironmentConfig):
""" """
super(ShellConfig, self).__init__(args, 'shell') super(ShellConfig, self).__init__(args, 'shell')
self.raw = args.raw # type: bool
if self.raw:
self.httptester = False
class SanityConfig(TestConfig): class SanityConfig(TestConfig):
"""Configuration for the sanity command.""" """Configuration for the sanity command."""

View file

@ -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) core_ci = AnsibleCoreCI(args, platform, version, stage=args.remote_stage, provider=args.remote_provider)
success = False success = False
raw = False
if isinstance(args, ShellConfig): if isinstance(args, ShellConfig):
use_httptester = args.httptester use_httptester = args.httptester
raw = args.raw
else: else:
use_httptester = args.httptester and any('needs/httptester/' in target.aliases for target in integration_targets) use_httptester = args.httptester and any('needs/httptester/' in target.aliases for target in integration_targets)
@ -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 # Windows doesn't need the ansible-test fluff, just run the SSH command
manage = ManageWindowsCI(core_ci) manage = ManageWindowsCI(core_ci)
cmd = ['powershell.exe'] cmd = ['powershell.exe']
elif raw:
manage = ManagePosixCI(core_ci)
cmd = create_shell_command(['bash'])
else: else:
options = { options = {
'--remote': 1, '--remote': 1,
@ -384,6 +389,7 @@ def delegate_remote(args, exclude, require, integration_targets):
manage = ManagePosixCI(core_ci) manage = ManagePosixCI(core_ci)
manage.setup() manage.setup()
if isinstance(args, IntegrationConfig): if isinstance(args, IntegrationConfig):
cloud_platforms = get_cloud_providers(args) cloud_platforms = get_cloud_providers(args)
@ -394,7 +400,16 @@ def delegate_remote(args, exclude, require, integration_targets):
manage.ssh(cmd, ssh_options) manage.ssh(cmd, ssh_options)
success = True success = True
finally: finally:
download = False
if platform != 'windows': 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.ssh('rm -rf /tmp/results && cp -a ansible/test/results /tmp/results && chmod -R a+r /tmp/results')
manage.download('/tmp/results', 'test') manage.download('/tmp/results', 'test')
finally: finally:

View file

@ -161,6 +161,10 @@ def install_command_requirements(args, python_version=None):
:type args: EnvironmentConfig :type args: EnvironmentConfig
:type python_version: str | None :type python_version: str | None
""" """
if isinstance(args, ShellConfig):
if args.raw:
return
generate_egg_info(args) generate_egg_info(args)
if not args.requirements: if not args.requirements:

View file

@ -24,6 +24,10 @@ from lib.ansible_util import (
ansible_environment, ansible_environment,
) )
from lib.config import (
ShellConfig,
)
class ManageWindowsCI(object): class ManageWindowsCI(object):
"""Manage access to a Windows instance provided by Ansible Core CI.""" """Manage access to a Windows instance provided by Ansible Core CI."""
@ -203,6 +207,11 @@ class ManagePosixCI(object):
def setup(self): def setup(self):
"""Start instance and wait for it to become ready and respond to an ansible ping.""" """Start instance and wait for it to become ready and respond to an ansible ping."""
self.wait() self.wait()
if isinstance(self.core_ci.args, ShellConfig):
if self.core_ci.args.raw:
return
self.configure() self.configure()
self.upload_source() self.upload_source()