69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
import subprocess
|
|
import os
|
|
from flask import Flask, render_template, request, redirect, url_for
|
|
from flask_socketio import SocketIO
|
|
|
|
from config import *
|
|
|
|
app = Flask(__name__)
|
|
socketio = SocketIO(app)
|
|
|
|
@app.route('/')
|
|
def index():
|
|
playbooks=[]
|
|
for file in os.listdir(path.ansible_scripts):
|
|
if file.endswith(".yml"):
|
|
playbooks.append(file)
|
|
return render_template('index.html',list=playbooks)
|
|
|
|
@app.route('/edit', methods=['POST'])
|
|
def edit():
|
|
if request.form['file_edit']:
|
|
FILE_PATH = path.ansible_scripts+request.form['file_edit']
|
|
with open(FILE_PATH, 'r') as file:
|
|
file_content = file.read()
|
|
return render_template('edit_file.html', file_content=file_content, filepath=FILE_PATH,file_name=request.form['file_edit'])
|
|
|
|
@app.route('/edit_file', methods=['POST'])
|
|
def edit_file():
|
|
new_content = request.form.get('file_content')
|
|
FILE_PATH = request.form.get('file_path')
|
|
with open(FILE_PATH, 'w') as file:
|
|
file.write(new_content)
|
|
return redirect(url_for('index'))
|
|
|
|
@app.route('/run')
|
|
def run():
|
|
return render_template('run.html')
|
|
|
|
@socketio.on('submit_playbook')
|
|
def handle_submit_playbook(data):
|
|
playbook = data['playbook']
|
|
hosts = data['hosts']
|
|
argument = data['argument']
|
|
limitation = data['limitation']
|
|
if playbook:
|
|
command = path.binary+path.ansible_scripts+playbook
|
|
if limitation:
|
|
command = command +" -l "+limitation
|
|
if argument:
|
|
command = command +' -e "'+argument+'"'
|
|
if hosts:
|
|
command = command +" -i "+inventory
|
|
else:
|
|
command = command +" -i "+path.default_hosts
|
|
print(command)
|
|
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True, bufsize=1)
|
|
while True:
|
|
output = process.stdout.readline()
|
|
if output == '' and process.poll() is not None:
|
|
break
|
|
if output:
|
|
socketio.emit('ansible_output', {'data': output.strip()})
|
|
|
|
process.wait()
|
|
socketio.emit('ansible_output', {'data': '*** La tâche Ansible est terminée ***'})
|
|
|
|
if __name__ == '__main__':
|
|
socketio.run(app, host=flask_config.host, port=flask_config.port, debug=flask_config.debug)
|