python 读取nginx虚拟主机配置插入myqsql 数据库

##获取nginx 配置文件虚拟主机文件路径和文件名称#######
##https://github.com/fatiherikli/nginxparser ######### pip install nginxparser#######
def getConf():
    from nginxparser import load
    filepath = "/etc/nginx/conf"
    for parent, dirnames, filenames in os.walk(filepath):
        for filename in set(filenames):
            file = (os.path.join(parent, filename))
            print(file)
            try:
                data = load(open(file))
                T = getDict(data, list())
                D = dict()
                D["server"] = list()
                D["listen"] = list()
                D["upstream"] = list()
                for x in T:
                    if x["key"] == "upstream":
                        D["upstream"].append(x["value"])
                    elif x["key"] == "server_name":
                        D["server_name"] = x["value"]
                    elif x["key"] == "server":
                        try:
                            D["server"].append(x["value"])
                        except:
                            pass
                    elif x["key"] == "listen":
                        D["listen"].append(x["value"])

                print("配置文件为: " + file)
                yield D
            except:
                 pass


##########递归多级列表拆分list转换为字典
def getDict(x, l=list()):
    a = ["key", "value"]
    for i in x:
        if isinstance(i, list):
            if isinstance(i[0], list):
                for y in i:
                    # print("#######: ", y)
                    getDict(y, l)
            else:
                # print("xxxxxxxxxxxxxx: ", dict(zip(a, i)))
                l.append(dict(zip(a, i)))
        else:
            l.append(dict(zip(a, x)))
    return l


#######获取配置插入数据库#########
def mysqlConfig(sql):
    import pymysql
    USERNAME = "ops"
		PASSWORD = "123456"
    HOST = "192.168.1.1"
    DATABASE = "op_nginx"
    dbconfig = pymysql.connect(HOST, USERNAME, PASSWORD, DATABASE)
    try:
        print(sql)
        cursor = dbconfig.cursor()
        try:
            cursor.execute(sql)
            dbconfig.commit()
            return cursor
        except Exception as e:
           pass
    except Exception as err:
        print(err)
				
def createNginxConfigtab():
    sql = """CREATE TABLE  if not exists  virtual_host (
             env CHAR(32) NOT NULL,
             upstreamname CHAR(128),
             domainname CHAR(200),
             frontport CHAR(128),
             backendip CHAR(128)
             )"""
    mysqlConfig(sql)
createNginxConfigtab()


###########数据插入###########
def nginxtbale(env, upname, dominame, frontport, backendip):
    try:
        sql = """INSERT INTO virtual_host(env,upstreamname,
                         domainname,  frontport, backendip)
                         VALUES ('{}','{}', '{}','{}','{}')""".format(env, upname, dominame, frontport,
                                                                      backendip)
        mysqlConfig(sql)
    except Exception as e:
        # 如果发生错误则回滚
        print(e)


#######读出配置到数据库#############

def insertNginxConfig():
    for i in getConf():
        try:
            nginxtbale("test", ",".join(list(set((i["upstream"])))), i["server_name"].replace(" ", ","),
                       ",".join(i["listen"]), ",".join(i["server"]))
        except:
             print(i)
insertNginxConfig()

#########


猜你喜欢

转载自blog.51cto.com/breaklinux/2402003
今日推荐