我正在编写一个定制的ansible模块,以使用linux包psutil获取具有进程名称的进程ID。这是我的模块文件。
from ansible.module_utils.basic import AnsibleModule
import sys
try:
import psutil
HAS_PSUTIL = True
except ImportError:
HAS_PSUTIL = False
def get_pid(name, module):
return [int(p.info['pid']) for p in psutil.process_iter(attrs=['pid', 'name']) if name in p.info['name']]
def main():
module = AnsibleModule(
argument_spec={
"name": {"required": True, "type": "str"}
}
)
if not HAS_PSUTIL:
module.fail_json(msg="Missing required 'psutil' python module. Try installing it with: pip install psutil")
name = module.params["name"]
response = dict(pids=get_pid(name, module))
module.exit_json(**response)
if __name__ == '__main__':
main()
可使用该模块的代码
- name: "Checking the process IDs (PIDs) of sleep binary"
pids:
name: "some-long-process-name-999999"
register: pids
- name: "Verify that the Process IDs (PIDs) returned is not empty"
assert:
that:
- "pids.pids | length > 0"
尝试使用长名称时,我得到的进程名称为空,对于小名称,它可以正常工作。 psutil模块有问题吗?我尝试了pidof和pgrep,它也似乎失败了。谁能帮我这个 ?谢谢您的时间。