可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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",