Python3调用ansible模块和fastapi实现项目监控接口!

问题说明

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
    }
}

python3 安装ansible 模块

pip3 install ansible_runner
pip3 install ansible_inventory
pip3 install ansible_playbook
pip3 install fastapi
pip3 install uvicorn

Python3调用ansible模块和fastapi实现项目监控接口!_第1张图片

获取官方实例并修改

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

你可能感兴趣的:(Python3调用ansible模块和fastapi实现项目监控接口!)