haproxy.conf
глобальный журнал 127.0.0.1 local2 демон MAXCONN 256 журнала 127.0.0.1 Local2 информация по умолчанию журнал глобального режима HTTP тайм - аут подключения 5000 мс таймаута клиент 50000ms сервер таймаут 50000ms вариант dontlognull слушать статистику: 8888 Статистика включить статистику URI / админ Статистика аутентификации администратора: 1234 фронтэнда oldboy.org связать 0.0.0.0:80 вариант httplog вариант httpclose вариант forwardfor войти глобальный WWW hdr_reg ACL (хост) -i www.oldboy.org use_backend www.oldboy.org , если WWW бэкенд www.oldboy1.org сервер 101.1000.7.9 101.1000.7.9 вес 20 MAXCONN 30 сервера 2.2.2.7 2.2.2.7 вес 30 MAXCONN 4000 Сервер 10.10.10.1 10.10.10.1 вес 22 MAXCONN 2000 сервера 2.2.2.5 2.2.2.5 вес 30 MAXCONN 4000 бэкенд www.oldboy2.org сервер 3.3.3.3 3.3.3.3 вес 20 MAXCONN 3000 бэкенд www.oldboy20.org сервер 10.10.0.10 10.10. 0.10 вес 9999 MAXCONN 33333333333
импорт ОС
если __name__ == "__main__": # переменная
тзд = "" "
1: Запрос
2: Добавить
3: Измените
4: Удалить
5: Выход
" ""
msf_dic = { "1": FETCH, "2": добавления (), "3": изменение, "4 ": удаление}
Правда это время:
Print (MSG)
Выбор = ввод ( "Пожалуйста , введите свои варианты:"). Газа ()
Если нет выбора: Продолжите
IF Choice == "5": BREAK
Данных = входе ( "Пожалуйста , введите ваши данные:" ) .strip ()
############## запрос ####################
Защиту выборки (данные): # печать ( "这是查询功能") backend_data = 'BACKEND% S' % данных с открытым ( "haproxy.conf", "г") , как read_f: тег = False # Тег标识一种状态 RET = [] для read_line в read_f: если read_line.strip () == backend_data: тег = True продолжать , если тег и read_line.startswith ( "бэкенд"): сломать , если тег: печать (read_line, конец = "") RET. присоединять (read_line) возвращение в отставке
############## изменить #################
DEF Change (Data): Print ( "Это функция модификации") Print ( "пользовательский ввод данных", данные) Серверные = Data [0] [ "Серверные"] # файлов между рекордно backend_data = «бэкенд% s "% бэкенд old_server_record =" % sServer% S% S вес% S MAXCONN% S \ п -. "% (" "* 8, данных [0] [" Запись "] [" Сервер "], данные [0] [" Запись "] [" Сервер "], данные [0] [" Запись "] [" вес "], данные [0] [" Запись "] [" The MAXCONN "]) new_server_record =" % sServer% S% S% по весу S MAXCONN% s \ п "% ( " «* 8,Данные [1] [ "запись"] [ "сервер"], данные [1] [ "запись"] [ "сервер"], Данные [1] [ "запись"] [ "вес"], данные [1] [ "запись"] [ "MAXCONN"]) печать ( "用户想要修改的记录是", old_server_record) Рез = выборки (бэкенд) если нет разрешения или old_server_record не в разрешении: возвращение "修改记录不存在" другое: индекс = res.index (old_server_record) Рез [индекс] = new_server_record res.insert (0, "% s \ п" % бэкэнд) с открытым ( "haproxy.comf", "г") , как read_f, \ открыт ( "haproxy.comf_new", "ш") , как write_f: тег = False has_write = False для read_line в read_f: , если read_line.strip () == backend_data: тег = True продолжать если тег и read_line.startswith ( "базовая") тег = False , если не помечать: write_f.write (read_line) еще: если не has_write: для записи в разрешении: write_f.write (запись) has_write = True os.rename ( "HAProxy .conf», "haproxy.conf.bak") os.rename ( "haproxy.conf_new", "haproxy.conf") os.remove ( "haproxy.conf.bak")
########### ########## развязку и окончательный вариант
импорта ОС Защиту записях file_handler (backend_data, разреш = None, тип = "не выборка"): если тип == "выборка": с открытым ( "haproxy.conf", "г") , как read_f: тег = False RET = [] для read_line в read_f: если read_line.strip () == backend_data: тег = True продолжать , если тег и read_line.startswith ( "бэкенд"): сломать , если тег: печать (read_line, конец = "") ret.append (read_line) вернуться RET типа Элиф == «изменение»: с открытым ( "haproxy.comf", "R"), Как read_f \ открытый ( "haproxy.comf_new", "ш") , как write_f: тег = False has_write = False для read_line в read_f: если read_line.strip () == backend_data: тег = True продолжать , если тег и read_line.startswith ( "базовая" ): тег = False , если не помечать: write_f.write (read_line) еще: если не has_write: для записи в разрешении: write_f.write (запись) has_write = True os.rename ( "haproxy.conf", "haproxy.conf.bak") os.rename ( "haproxy.conf_new", «HAProxy .conf ") os.remove (" haproxy.conf.Бака ") Защита выборки (данные): # Print ( "Это функция поиска") backend_data = 'бэкенд% S' % Данные возврата записи file_handler является (backend_data) DEF надстроек) (: Pass DEF Change (Data): Print ( "Это функция модификации") Print ( «пользовательский ввод данных "данные) new_server_record = "sServer% вес% S% S% S% S MAXCONN \ п -" ". * 8, данные [1] [" % ( "Запись"] [ "Сервер"], данные [1] [ "записи"] [ "сервер"], Серверным = данные [0] [ "базовым"] # файлы между рекордно backend_data = "бэкенд% S" % бэкенд old_server_record = «% sServer% S% S% по весу S MAXCONN% s \ п "% ( " "* 8, данные [0] [" запись "] [ "Сервер"], Данные [0] [ "запись"] [ "сервер"], данные [0] [ "запись"] [ "вес"], данные [0] [ "записи"] [ "MAXCONN"]) данные [1] [ "запись"] [ "вес"], данные [1] [ "запись"] [ "MAXCONN"]) печать ( "用户想要修改的记录是", old_server_record) разреш = выборки (бэкенд) , если не разреш или old_server_record не в разрешении: возвращение "修改记录不存在" еще: Индекс = res.index (old_server_record) Рез [индекс] = new_server_record res.insert (0, "% S \ n-" бэкенд%) записях file_handler являются (backend_data, RES = RES, тип = "Изменить") DEF Delete (): Передайте ЕСЛИ __name__ == "__main__": # Переменная тзд = "" " 1: запрос 2: Добавить 3: Обзор 4: удалить 5: Выход "" ". msf_dic = { "1": FETCH, "2": на Add (), "3": Изменить, "4": удаление} в то время как True: Print (MSG) выбор = вход ( "Пожалуйста , введите свои варианты:") Strip (). Если нет выбора: Продолжить IF Choice == "5": BREAK в данных = вход ( "Пожалуйста , введите свои данные:"). Strip () ! = IF Choice "1": Данные = Eval (данные) структуры данных #eval экстракта строка, строка может быть выполнены их выражение операции RES = msf_dic [Выбор] (данные) печати (РЭС)
----------