@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/") @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//") @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/.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//") @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/.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