其实飞书推送是最近才完成的功能,但是因为刚刚写完了一个功能,成热打铁就先把这一块写了。 其实飞书在二开这方面还是比较方便的,可以在线调api并生成示例代码,非常容易入手。
我这里因为是想要用来给任意人和群发送信息,所以使用的是自建小程序方式,webhook机器人只能限制在一个群内,比较不方便。鉴权方式大概就是:app_id,app_secret获取一个token,然后通过这个token请求各种接口。
发送信息的模板虽然是json但是发送信息的open-apis/im/v1/messages
接口接受的其实是str,Content 是 string 类型, json 结构需要转义。详情还以官方文档为准。信息json模板为一开始在飞书工具中搭建完成后在程序中读取替换信息。
信息卡片中的互动按钮会回传信息到后台机器人设置中的消息卡片请求网址中。根据不同key来区分功能。
jira分配组没有什么好说的,只是手动再拿一下名字去jira接口更改下组,AD域密码重置的话是第一篇里面的遗留问题,使用的的是powershell的方式去去调用重置密码的。现在服务器都是跑在容器中,所以现在需要一个方法去远程执行powershell。 这里一开始找到的是pywinrm这个模块,但是直接执行powershell会报一些奇怪的问题,最后想到使用ansible来进行控制。
python环境下pip install ansible
后在当前目录下创建配置文件:
####ansible.cfg [defaults] inventory = hosts library = ansible路径 forks = 5 sudo_user = root remote_port = 22 host_key_checking = False timeout = 60 log_path = /var/log/ansible.log ###hosts [windows] 10.*.*.* ansible_user="登录名" ansible_password="密码" ansible_ssh_port="5985" ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore ansible_winrm_transport=ntlm
然后通过python生成ps1文件后通过ansible windows -m script -a "result.ps1"
来执行完成更改,被控端的配置见
使用Winrm进行远程PowerShell管理
这里因为使用ansible+powershell远程运行所以其实效率堪忧,在飞书调用的时候集极有可能产生超时。这里在Flask中调用的时候用异步方式先返回再进行后续的计算。
pythonfrom concurrent.futures import ThreadPoolExecutor
executor = ThreadPoolExecutor() # 初始化进程池,可以设置线程上限
executor.submit(ResetADPasswd, info["initials"]) #异步执行函数 第一个参数为函数地址不用带括号
最后这个项目通过DockerFile来容器化:
FROM python:3.8-slim EXPOSE 5002 ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 # Install pip requirements COPY requirements.txt . RUN python -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple WORKDIR /app COPY . /app RUN adduser -u 5678 --disabled-password --gecos "" appuser && chown -R appuser /app USER appuser CMD ["gunicorn", "--bind", "0.0.0.0:5002", "wanAlert:app"]