Get the pid of a running playbook for use within t

2019-06-28 02:54发布

问题:

When we run a playbook, with verbose output enabled, in the ansible logs we can see something like this:

2016-02-03 12:51:58,235 p=4105 u=root | PLAY RECAP

I guess that the p=4105 is the pid of the playbook when it ran.

Is there a way to get this pid inside the playbook during its runtime (as a variable for example)?

回答1:

This sounds a little like an XY problem, but one option may be to spawn a shell with the shell command and then ask for the parent PID:

- name: get pid of playbook
  shell: |
    echo "$PPID"
  register: playbook_pid

This will give you the PID of the python process that is executing the playbook.



回答2:

You can define the PID for localhost using the set_fact module with a lookup filter.

- hosts: localhost
  tasks:
    - set_fact:
        pid: "{{ lookup('pipe', 'echo $PPID') }}"

And later on you can reference the PID via the hostvars dictionary.

- hosts: remote
  tasks:
    - debug: var=hostvars.localhost.pid


回答3:

If you will be using the pid in different plays, just add it to the setup module.

setup_result['ansible_facts']['ansible_pid'] = os.getpid()

and it will always be available.

    "ansible_os_family": "Debian",
    "ansible_pid": 27930,
    "ansible_pkg_mgr": "apt",