问题说明
2.而且项目可能在不同环境部署在不同的系统中 3.开发同学权限不足无法查看pid从而找到websocket 端口
{ "apps": { "args": [ "debug", "3121" ], "cwd": "/data/source/service-sk_platform_professional_rda/publish/", "error_file": "/data/pm2-log/errlogs/service-sk_platform_professional_rda-err.log", "exec_interpreter": "node", "exec_mode": "fork", "instances": "4", "log_date_format": "YYYY-MM-DD HH:mm Z", "max_memory_restart": "8100M", "max_restarts": "50", "merge_logs": true, "min_uptime": "20s", "name": "service-sk_platform_professional_rda", "node_args": "--inspect=0.0.0.0:33121 --max-old-space-size=8000", "out_file": "/data/pm2-log/outlogs/service-sk_platform_professional_rda-out.log", "pid_file": "/data/pm2-log/outlogs/service-sk_platform_professional_rda.pid", "script": "/data/source/service-sk_platform_professional_rda/publish/service/server.js", "watch": false } }
pip3 install ansible_runner pip3 install ansible_inventory pip3 install ansible_playbook pip3 install fastapi pip3 install uvicorn
https://docs.ansible.com/ansible/latest/dev_guide/developing_api.html
导入类完整路径功能用途from ansible.module_utils.common.collections import ImmutableDict用于添加选项。比如: 指定远程用户remote_user=Nonefrom ansible.parsing.dataloader import DataLoader读取 json/ymal/ini 格式的文件的数据解析器from ansible.vars.manager import VariableManager管理主机和主机组的变量管理器from ansible.inventory.manager import InventoryManager管理资源库的,可以指定一个 inventory 文件等from ansible.playbook.play import Play用于执行 Ad-hoc 的类 ,需要传入相应的参数from ansible.executor.task_queue_manager import TaskQueueManageransible 底层用到的任务队列管理器ansible.plugins.callback.CallbackBase处理任务执行后返回的状态from ansible import context上下文管理器,他就是用来接收 ImmutableDict 的示例对象import ansible.constants as C用于获取 ansible 产生的临时文档。from ansible.executor.playbook_executor import PlaybookExecutor执行 playbook 的核心类from ansible.inventory.host import Group对 主机组 执行操作 ,可以给组添加变量等操作,扩展from ansible.inventory.host import Host对 主机 执行操作 ,可以给主机添加变量等操作,扩展
[root@dev-technology-215l shell]# cat ansible2.py import json import shutil from ansible.module_utils.common.collections import ImmutableDict from ansible.parsing.dataloader import DataLoader from ansible.vars.manager import VariableManager from ansible.inventory.manager import InventoryManager from ansible.playbook.play import Play from ansible.executor.task_queue_manager import TaskQueueManager from ansible.plugins.callback import CallbackBase from ansible import context import ansible.constants as C class ResultCallback(CallbackBase): """ 重写callbackBase类的部分方法 """ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.host_ok = {} self.host_unreachable = {} self.host_failed = {} self.task_ok = {} def v2_runner_on_unreachable(self, result): self.host_unreachable[result._host.get_name()] = result def v2_runner_on_ok(self, result, **kwargs): self.host_ok[result._host.get_name()] = result def v2_runner_on_failed(self, result, **kwargs): self.host_failed[result._host.get_name()] = result class MyAnsiable2(): def __init__(self, connection='local', # 连接方式 local 本地方式,smart ssh方式 remote_user=None, # ssh 用户 remote_password=None, # ssh 用户的密码,应该是一个字典, key 必须是 conn_pass private_key_file=None, # 指定自定义的私钥地址 sudo=None, sudo_user=None, ask_sudo_pass