You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Flask表单接收的用户输入传入Ansible变量并触发Playbook执行

Flask表单传递参数触发Ansible Playbook实现方案

1. 前置依赖安装

首先确保环境已安装所需组件,执行以下命令:

pip install flask
# 安装Ansible,根据系统选择对应安装方式,以下为Debian/Ubuntu示例
apt update && apt install ansible -y

2. 修改Flask后端代码(applet.py)

通过Python标准库subprocess调用ansible-playbook命令,将表单收集到的参数通过--extra-vars参数传递给Ansible,修改后代码如下:

from flask import Flask, render_template, request
import subprocess
import shlex

app = Flask(__name__)

@app.route('/form')
def form():
    return render_template('form.html')

@app.route('/data/', methods = ['POST', 'GET'])
def data():
    if request.method == 'GET':
        return "The URL /data is accessed directly. Try going to '/form' to submit form"
    if request.method == 'POST':
        form_data = request.form.to_dict()
        # 构造Ansible额外参数,将表单数据转为JSON格式传递,避免空格特殊字符问题
        extra_vars = str(form_data).replace("'", '"')
        # 构造Ansible执行命令,替换为你的playbook实际路径
        cmd = f'ansible-playbook /path/to/your/playbook.yml --extra-vars \'{extra_vars}\''
        # 执行命令,捕获输出
        process = subprocess.Popen(shlex.split(cmd), stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
        stdout, stderr = process.communicate()
        # 返回执行结果给前端,也可以渲染到自定义模板
        return f"""
        <h3>表单提交成功,Ansible执行结果:</h3>
        <p>标准输出:<pre>{stdout}</pre></p>
        <p>错误输出:<pre>{stderr}</pre></p>
        <p>传入参数:<pre>{form_data}</pre></p>
        """

if __name__ == '__main__':
    # 生产环境不要用debug模式
    app.run(host='localhost', port=5000, debug=False)

3. Ansible Playbook示例

你可以直接在Playbook中调用表单传递的变量,变量名和表单input的name属性完全一致,示例playbook.yml内容如下:

---
- name: 接收Flask表单参数执行任务
  hosts: all
  tasks:
    - name: 打印用户输入的参数
      ansible.builtin.debug:
        msg: "用户姓名:{{ Name }},所在城市:{{ City }},所在国家:{{ Country }}"
    # 下方添加你需要执行的其他Ansible任务

4. 关键注意事项

  • 运行Flask应用的系统用户需要有Ansible执行权限、对应inventory文件和目标主机的访问权限,建议提前手动测试Ansible命令可正常执行
  • 生产环境必须添加表单输入校验,过滤特殊字符,避免命令注入风险,也可以使用ansible-runner第三方库替代直接调用subprocess,安全性更高
  • 如果Playbook执行时间超过1分钟,建议引入Celery等异步任务框架处理执行逻辑,避免Flask请求超时
  • 你可以根据需求将Ansible执行结果存储到日志文件,再展示到前端页面,方便后续排查问题

内容的提问来源于stack exchange,提问作者Sudhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 12:48:01