This repository was archived by the owner on Apr 11, 2019. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathweb.py
More file actions
93 lines (78 loc) · 2.79 KB
/
web.py
File metadata and controls
93 lines (78 loc) · 2.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import os
import ConfigParser
from flask import Flask
from flask import render_template, jsonify, request, redirect, url_for
import ansibleengine
import ansible
from ansible import callbacks
app = Flask(__name__)
@app.route("/")
@app.route("/inventories/")
def index():
return render_template('index.html', inventories=engine.listInventoryFiles())
@app.route("/hosts/")
def hosts():
return render_template('hosts.html', hosts=engine.listHosts(groups=True))
@app.route("/roles/")
def roles():
return render_template('roles.html', roles=engine.listRoles())
@app.route("/roles/<role>")
def viewRole(role):
pass
@app.route("/playbooks/")
def playbooks():
return render_template('playbooks.html', playbooks=engine.listPlaybooks())
@app.route("/playbooks/run/")
def runPlaybook():
return render_template('playbooks_run.html',
playbooks=engine.listPlaybooks(),
inventories=engine.listInventoryFiles(),
default_p=request.args.get('p', ''),
default_i=request.args.get('i', ''))
@app.route("/playbooks/launch/", methods=['POST'])
def launchPlaybook():
if request.method == "POST":
engine.runPlaybook(request.form['inventory'], request.form['playbook'])
return redirect(url_for('watchPlaybook'))
return redirect(url_for('runPlaybook'))
@app.route("/file/save/<path:filename>/", methods=['POST'])
def saveFile(filename):
filetxt = request.form['contents']
with open(engine.basepath(filename), 'w') as fh:
fh.write(filetxt)
return "Success"
@app.route("/file/edit/<path:filename>/")
def editFile(filename,role=None,folder=None):
try:
with open(engine.basepath(filename)) as fh:
filetxt = fh.read()
extension = os.path.splitext(filename)[1][1:]
except IOError:
filetxt = ""
extension = "txt"
return render_template('edit.html', filename=filename, filetxt=filetxt, extension=extension)
@app.route("/playbooks/watch/")
def watchPlaybook():
return render_template('playbooks_watch.html')
@app.route("/playbooks/run/status/")
def runningPlaybookStatus():
return jsonify(engine.getStatus())
def getConfig():
global engine
config_defaults = {
"Bind": "127.0.0.1",
"Port": "5000",
"Debug": False,
"Base": os.path.dirname(os.path.realpath(__file__)),
"InventoryGlob": "*.inv",
"PlaybookGlob": "*.yml",
}
global config
config = ConfigParser.SafeConfigParser(config_defaults)
config.read('formic.ini')
engine = ansibleengine.AnsibleEngine(config)
if __name__ == "__main__":
getConfig()
app.run(host=config.get('Web', 'Bind'),
port=int(config.get('Web', 'Port')),
debug=config.get('Web', 'Debug'))