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

skip process isolation check for transmit and process #1084

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
12 changes: 6 additions & 6 deletions ansible_runner/interface.py
Expand Up @@ -83,12 +83,6 @@ def init_runner(**kwargs):
if logfile:
output.set_logfile(logfile)

if kwargs.get("process_isolation", False):
pi_executable = kwargs.get("process_isolation_executable", "podman")
if not check_isolation_executable_installed(pi_executable):
print(f'Unable to find process isolation executable: {pi_executable}')
sys.exit(1)

event_callback_handler = kwargs.pop('event_handler', None)
status_callback_handler = kwargs.pop('status_handler', None)
artifacts_handler = kwargs.pop('artifacts_handler', None)
Expand Down Expand Up @@ -118,6 +112,12 @@ def init_runner(**kwargs):
**kwargs)
return stream_processor

if kwargs.get("process_isolation", False):
pi_executable = kwargs.get("process_isolation_executable", "podman")
if not check_isolation_executable_installed(pi_executable):
print(f'Unable to find process isolation executable: {pi_executable}')
sys.exit(1)

kwargs.pop('_input', None)
kwargs.pop('_output', None)
rc = RunnerConfig(**kwargs)
Expand Down
60 changes: 60 additions & 0 deletions test/integration/test_transmit_worker_process.py
Expand Up @@ -168,6 +168,66 @@ def process_method(results_sockfile_read):

self.check_artifacts(str(process_dir), job_type)

def test_process_isolation_executable_not_exist(self, tmp_path, mocker):
"""Case transmit should not fail if process isolation executable does not exist and
worker should fail if process isolation executable does not exist
"""
mocker.patch.object(ansible_runner.interface, 'check_isolation_executable_installed', return_value=False)

job_kwargs = self.get_job_kwargs('run')
job_kwargs['process_isolation'] = True
job_kwargs['process_isolation_executable'] = 'does_not_exist'

outgoing_buffer_file = tmp_path / 'buffer_out'
outgoing_buffer_file.touch()
outgoing_buffer = outgoing_buffer_file.open('b+r')

transmitter = ansible_runner.interface.run(
streamer='transmit',
_output=outgoing_buffer,
**job_kwargs,
)

# valide process_isolation kwargs are passed to transmitter
assert transmitter.kwargs['process_isolation'] == job_kwargs['process_isolation']
assert transmitter.kwargs['process_isolation_executable'] == job_kwargs['process_isolation_executable']

# validate that transmit did not fail due to missing process isolation executable
assert transmitter.rc in (None, 0)
Shrews marked this conversation as resolved.
Show resolved Hide resolved

# validate that transmit buffer is not empty
outgoing_buffer.seek(0)
sent = outgoing_buffer.read()
assert sent # should not be blank at least

# validate buffer contains kwargs
assert b'kwargs' in sent

# validate kwargs in buffer contain correct process_isolation and process_isolation_executable
for line in sent.decode('utf-8').split('\n'):
if "kwargs" in line:
kwargs = json.loads(line).get("kwargs", {})
assert kwargs['process_isolation'] == job_kwargs['process_isolation']
assert kwargs['process_isolation_executable'] == job_kwargs['process_isolation_executable']
break

Shrews marked this conversation as resolved.
Show resolved Hide resolved
worker_dir = tmp_path / 'for_worker'
incoming_buffer_file = tmp_path / 'buffer_in'
incoming_buffer_file.touch()
incoming_buffer = incoming_buffer_file.open('b+r')

outgoing_buffer.seek(0)

# validate that worker fails raise sys.exit(1) when process isolation executable does not exist
with pytest.raises(SystemExit) as exc:
ansible_runner.interface.run(
streamer='worker',
_input=outgoing_buffer,
_output=incoming_buffer,
private_data_dir=worker_dir,
)
assert exc.value.code == 1


@pytest.fixture
def transmit_stream(project_fixtures, tmp_path):
Expand Down