import yaml; @app.route("/firewalld/") @login_required def firewalld(role): env = "prod" fname = "/srv/salt/" + env + "/pillars/roles/firewalld/" + role + ".sls" if (os.path.exists(fname)): firewalld = import_yaml(fname) print(firewalld) else: firewalld = "{'firewalld':{}}" return render_template('firewalld_edit.html', firewalld=firewalld,role=role, is_mnt=is_role_maintainer(role)) @app.route("/firewalld_save/",methods=['POST']) @login_required def firewalld_save(role): if is_role_maintainer(role): env = "prod" data=request.get_json() print(data) y = yaml.safe_dump(data,default_flow_style=False, indent=2) # fix weird quirk - when not using default_flow_style, "-" lines aren't indented properly y = y.replace("-"," -") print(y) fname = "/srv/salt/" + env + "/pillars/roles/firewalld/" + role + ".sls" f = open(fname,"w") f.write(y) return redirect("/firewalld/" + role,302) #remove everything prior to the last "/" and then everything after the first "." in the name to ensure name isn't malicious def cleanse_name(name): name = re.sub('^.*/','',name)#remove everything up to and including final / name = re.sub('^\.*','',name)#remove any .s at start of name that remain print(name) name = re.sub('\.*$','',name)#remove everything after and including first . print(name) return name def import_yaml(fname): y = {} if os.path.exists(fname): f = open(fname,"r") lines = f.read() f.close() y = yaml.load(lines) return y