ansible: fork isolated tasks from correct parent.

Closes #355.
pull/372/head
David Wilson 6 years ago
parent a52f66328b
commit 66142e7d75

@ -693,6 +693,8 @@ class Connection(ansible.plugins.connection.ConnectionBase):
if kwargs.pop('use_login_context', None): if kwargs.pop('use_login_context', None):
call_context = self.login_context call_context = self.login_context
elif kwargs.pop('use_fork_context', None):
call_context = self.fork_context
else: else:
call_context = self.context call_context = self.context
@ -743,7 +745,8 @@ class Connection(ansible.plugins.connection.ConnectionBase):
:returns: :returns:
mitogen.core.Context of the new child. mitogen.core.Context of the new child.
""" """
return self.call(ansible_mitogen.target.create_fork_child) return self.call(ansible_mitogen.target.create_fork_child,
use_fork_context=True)
def get_default_cwd(self): def get_default_cwd(self):
""" """

@ -14,5 +14,7 @@
- import_playbook: custom_script_interpreter.yml - import_playbook: custom_script_interpreter.yml
- import_playbook: environment_isolation.yml - import_playbook: environment_isolation.yml
- import_playbook: etc_environment.yml - import_playbook: etc_environment.yml
- import_playbook: forking_behaviour.yml - import_playbook: forking_active.yml
- import_playbook: forking_inactive.yml
- import_playbook: forking_correct_parent.yml
- import_playbook: missing_module.yml - import_playbook: missing_module.yml

@ -1,26 +1,8 @@
- name: integration/runner/forking_active.yml
- name: integration/runner/forking_behaviour.yml
hosts: test-targets hosts: test-targets
any_errors_fatal: true any_errors_fatal: true
tasks: tasks:
# Verify non-async jobs run in-process.
- name: get process ID.
custom_python_detect_environment:
register: sync_proc1
when: is_mitogen
- name: get process ID again.
custom_python_detect_environment:
register: sync_proc2
when: is_mitogen
- assert:
that:
- sync_proc1.pid == sync_proc2.pid
when: is_mitogen
# Verify mitogen_task_isolation=fork triggers forking. # Verify mitogen_task_isolation=fork triggers forking.
- name: get force-forked process ID. - name: get force-forked process ID.
@ -42,3 +24,4 @@
- fork_proc1.pid != sync_proc1.pid - fork_proc1.pid != sync_proc1.pid
- fork_proc1.pid != fork_proc2.pid - fork_proc1.pid != fork_proc2.pid
when: is_mitogen when: is_mitogen

@ -0,0 +1,26 @@
- name: integration/runner/forking_correct_parent.yml
hosts: test-targets
any_errors_fatal: true
tasks:
# Verify mitogen_task_isolation=fork forks from "virginal fork parent", not
# shared interpreter.
- name: get regular process ID.
custom_python_detect_environment:
register: regular_proc
when: is_mitogen
- name: get force-forked process ID again.
custom_python_detect_environment:
register: fork_proc
vars:
mitogen_task_isolation: fork
when: is_mitogen
- assert:
that:
- fork_proc.pid != regular_proc.pid
- fork_proc.ppid != regular_proc.pid
when: is_mitogen

@ -0,0 +1,23 @@
# Verify non-async jobs run in-process.
- name: integration/runner/forking_inactive.yml
hosts: test-targets
any_errors_fatal: true
tasks:
- name: get process ID.
custom_python_detect_environment:
register: sync_proc1
when: is_mitogen
- name: get process ID again.
custom_python_detect_environment:
register: sync_proc2
when: is_mitogen
- assert:
that:
- sync_proc1.pid == sync_proc2.pid
when: is_mitogen
Loading…
Cancel
Save