121 lines
4.1 KiB
Python
121 lines
4.1 KiB
Python
@app.route("/servers")
|
|
@login_required
|
|
def servers():
|
|
env = "prod"
|
|
host = os.uname()[1]
|
|
accepted = client.run('key.list_all', client='wheel')['data']['return']['minions']
|
|
print(accepted)
|
|
#add maintainers for each server
|
|
dname = "/srv/salt/" + env + "/pillars/servers/maintainer/server/"
|
|
servers={}
|
|
for server in accepted:
|
|
servers[server]={}
|
|
servers[server]["maintainer"]=[]
|
|
servers[server]["roles"]=[]
|
|
print(servers)
|
|
for fname in os.listdir(dname):
|
|
f = open(dname+fname,"r")
|
|
lines = f.readlines()
|
|
f.close()
|
|
sname = os.path.splitext(fname)[0]
|
|
print(sname)
|
|
for line in lines:
|
|
maintainer = line.replace("-","").replace("\n","").strip()
|
|
if maintainer != "maintainer:":
|
|
servers[sname]["maintainer"].append(maintainer)
|
|
#add roles for each server
|
|
dname = "/srv/salt/" + env + "/pillars/servers/roles/server/"
|
|
for fname in os.listdir(dname):
|
|
f = open(dname+fname,"r")
|
|
lines = f.readlines()
|
|
f.close()
|
|
sname = os.path.splitext(fname)[0]
|
|
print(sname)
|
|
for line in lines:
|
|
role = line.replace("-","").replace("\n","").strip()
|
|
if role != "roles:" and role != "grains:":
|
|
servers[sname]["roles"].append(role)
|
|
print(servers)
|
|
return render_template('servers.html', servers=servers)
|
|
|
|
@app.route("/servers/<server>")
|
|
@login_required
|
|
def server_display(server):
|
|
env = "prod"
|
|
host = os.uname()[1]
|
|
aroles = client.run("pillar.items",client="local", tgt=host)[host]["roles"]
|
|
sroles=[]
|
|
dname = "/srv/salt/" + env + "/pillars/servers/roles/server/"
|
|
fname = server + ".sls"
|
|
f = open(dname+fname,"r")
|
|
lines = f.readlines()
|
|
f.close()
|
|
for line in lines:
|
|
role = line.replace("-","").replace("\n","").strip()
|
|
if role != "roles:" and role != "grains:":
|
|
sroles.append(role)
|
|
del aroles[role]
|
|
return render_template('server_display.html', server=server, aroles=aroles, sroles=sroles,is_mnt=is_server_maintainer(server))
|
|
|
|
@app.route("/server_add_role/<server>/<role>")
|
|
@login_required
|
|
def server_add_role(server, role):
|
|
if is_server_maintainer(server):
|
|
env = "prod"
|
|
#We need to add role to pillars/servers/roles/server/<server>.sls
|
|
fname = "/srv/salt/" + env + "/pillars/servers/roles/server/" + server + ".sls"
|
|
print(fname)
|
|
print(server)
|
|
print(role)
|
|
if (os.path.exists(fname)):
|
|
f = open(fname,"a")
|
|
f.write(" - " + role + "\n")
|
|
f.close()
|
|
return redirect("/servers/" + server,302)
|
|
|
|
@app.route("/server_rem_role/<server>/<role>")
|
|
@login_required
|
|
def server_rem_role(server, role):
|
|
if is_server_maintainer(server):
|
|
env = "prod"
|
|
#We need to remove role from pillars/servers/roles/server/<server>.sls
|
|
fname = "/srv/salt/" + env + "/pillars/servers/roles/server/" + server + ".sls"
|
|
print(fname)
|
|
print(server)
|
|
print(role)
|
|
if (os.path.exists(fname)):
|
|
f = open(fname,"r")
|
|
lines = f.readlines()
|
|
f.close()
|
|
f = open(fname,"w")
|
|
for line in lines:
|
|
if line != " - " + role + "\n":
|
|
f.write(line)
|
|
f.close()
|
|
return redirect("/servers/" + server,302)
|
|
|
|
def is_server_maintainer(server):
|
|
env = "prod"
|
|
fname = "/srv/salt/" + env + "/pillars/servers/maintainer/server/"+server+".sls"
|
|
f = open(fname,"r")
|
|
lines = f.readlines()
|
|
f.close()
|
|
maintainers = []
|
|
for line in lines:
|
|
maintainer = line.replace("-","").replace("\n","").strip()
|
|
if maintainer != "maintainer:":
|
|
maintainers.append(maintainer)
|
|
usr = session.get('username')
|
|
from subprocess import check_output
|
|
grpstr = check_output(["groups", usr])
|
|
groups = grpstr.split(" : ")[1].split()
|
|
is_maintainer = False
|
|
if usr in maintainers:
|
|
is_maintainer = True
|
|
else:
|
|
for grp in groups:
|
|
if "%"+grp+"%" in maintainers:
|
|
is_maintainer = True
|
|
break
|
|
return is_maintainer
|
|
|