Get the pid of a running playbook for use within t

2019-06-28 02:43发布

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)?

3条回答
做个烂人
2楼-- · 2019-06-28 03:18

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.

查看更多
我欲成王,谁敢阻挡
3楼-- · 2019-06-28 03:41

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
查看更多
贪生不怕死
4楼-- · 2019-06-28 03:41

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",
查看更多
登录 后发表回答