def test_prepare_with_ssh_key(mocker): mocker.patch('os.makedirs', return_value=True) open_fifo_write_mock = mocker.patch( 'ansible_runner.config._base.open_fifo_write') rc = RunnerConfig('/') rc.prepare_inventory = mocker.Mock() rc.prepare_command = mocker.Mock() rc.wrap_args_with_ssh_agent = mocker.Mock() rc.ssh_key_data = None rc.artifact_dir = '/' rc.env = {} rc.execution_mode = ExecutionMode.ANSIBLE_PLAYBOOK rc.playbook = 'main.yaml' rc.ssh_key_data = '01234567890' rc.command = 'ansible-playbook' mocker.patch.dict('os.environ', {'AWX_LIB_DIRECTORY': '/'}) rc.prepare() assert rc.ssh_key_path == '/ssh_key_data' assert rc.wrap_args_with_ssh_agent.called assert open_fifo_write_mock.called
def rc(request, tmp_path): rc = RunnerConfig(str(tmp_path)) rc.suppress_ansible_output = True rc.expect_passwords = {pexpect.TIMEOUT: None, pexpect.EOF: None} rc.cwd = str(tmp_path) rc.env = {} rc.job_timeout = .5 rc.idle_timeout = 0 rc.pexpect_timeout = .1 rc.pexpect_use_poll = True return rc
def test_prepare_with_defaults(mocker): mocker.patch('os.makedirs', return_value=True) rc = RunnerConfig('/') rc.prepare_inventory = mocker.Mock() rc.prepare_env = mocker.Mock() rc.prepare_command = mocker.Mock() rc.ssh_key_data = None rc.artifact_dir = '/' rc.env = {} with pytest.raises(ConfigurationError) as exc: rc.prepare() assert str(exc.value) == 'No executable for runner to run'
def test_container_volume_mounting_with_Z(mocker, tmp_path): mocker.patch('os.path.isdir', return_value=True) mocker.patch('os.path.exists', return_value=True) rc = RunnerConfig(str(tmp_path)) rc.container_volume_mounts = ['/tmp/project_path:/tmp/project_path:Z'] rc.container_name = 'foo' rc.env = {} new_args = rc.wrap_args_for_containerization( ['ansible-playbook', 'foo.yml'], 0, None) assert new_args[0] == 'podman' for i, entry in enumerate(new_args): if entry == '-v': mount = new_args[i + 1] if mount.endswith(':/tmp/project_path/:Z'): break else: raise Exception( 'Could not find expected mount, args: {}'.format(new_args))
def test_prepare(mocker): mocker.patch.dict( 'os.environ', { 'PYTHONPATH': '/python_path_via_environ', 'AWX_LIB_DIRECTORY': '/awx_lib_directory_via_environ', }) mocker.patch('os.makedirs', return_value=True) rc = RunnerConfig('/') rc.prepare_inventory = mocker.Mock() rc.prepare_command = mocker.Mock() rc.ssh_key_data = None rc.artifact_dir = '/' rc.env = {} rc.execution_mode = ExecutionMode.ANSIBLE_PLAYBOOK rc.playbook = 'main.yaml' rc.prepare() assert rc.prepare_inventory.called assert rc.prepare_command.called assert not hasattr(rc, 'ssh_key_path') assert not hasattr(rc, 'command') assert rc.env['ANSIBLE_STDOUT_CALLBACK'] == 'awx_display' assert rc.env['ANSIBLE_RETRY_FILES_ENABLED'] == 'False' assert rc.env['ANSIBLE_HOST_KEY_CHECKING'] == 'False' assert rc.env['AWX_ISOLATED_DATA_DIR'] == '/' assert rc.env['PYTHONPATH'] == '/python_path_via_environ:/awx_lib_directory_via_environ', \ "PYTHONPATH is the union of the env PYTHONPATH and AWX_LIB_DIRECTORY" del rc.env['PYTHONPATH'] os.environ['PYTHONPATH'] = "/foo/bar/python_path_via_environ" rc.prepare() assert rc.env['PYTHONPATH'] == "/foo/bar/python_path_via_environ:/awx_lib_directory_via_environ", \ "PYTHONPATH is the union of the explicit env['PYTHONPATH'] override and AWX_LIB_DIRECTORY"