def check_delegation_args(args): """ :type args: CommonConfig """ if not isinstance(args, EnvironmentConfig): return if args.docker: get_python_version(args, get_docker_completion(), args.docker_raw) elif args.remote: get_python_version(args, get_remote_completion(), args.remote)
def delegate_remote(args, exclude, require, integration_targets): """ :type args: EnvironmentConfig :type exclude: list[str] :type require: list[str] :type integration_targets: tuple[IntegrationTarget] """ parts = args.remote.split('/', 1) platform = parts[0] version = parts[1] 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) if use_httptester and not docker_available(): display.warning( 'Assuming --disable-httptester since `docker` is not available.') use_httptester = False httptester_id = None ssh_options = [] try: core_ci.start() if use_httptester: httptester_id, ssh_options = start_httptester(args) core_ci.wait() if platform == 'windows': # 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, } python_interpreter = get_python_interpreter( args, get_remote_completion(), args.remote) cmd = generate_command(args, python_interpreter, 'ansible/bin/ansible-test', options, exclude, require) if httptester_id: cmd += ['--inject-httptester'] if isinstance(args, TestConfig): if args.coverage and not args.coverage_label: cmd += [ '--coverage-label', 'remote-%s-%s' % (platform, version) ] if isinstance(args, IntegrationConfig): if not args.allow_destructive: cmd.append('--allow-destructive') # remote instances are only expected to have a single python version available if isinstance(args, UnitsConfig) and not args.python: cmd += ['--python', 'default'] manage = ManagePosixCI(core_ci) python_version = get_python_version(args, get_remote_completion(), args.remote) manage.setup(python_version) if isinstance(args, IntegrationConfig): cloud_platforms = get_cloud_providers(args) for cloud_platform in cloud_platforms: ssh_options += cloud_platform.get_remote_ssh_options() try: 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: if args.remote_terminate == 'always' or (args.remote_terminate == 'success' and success): core_ci.stop() if httptester_id: docker_rm(args, httptester_id)