Я пишу пользовательский модуль ansible для получения идентификатора процесса с именем процесса с помощью пакета linux psutil. это мой файл модуля.
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, и это также, похоже, не работает. Кто-нибудь может мне с этим помочь ? спасибо за ваше время.