@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