haproxy.conf
グローバル ログ127.0.0.1のLOCAL2の デーモンは 256のMAXCONN ログ127.0.0.1 LOCAL2情報の デフォルトは グローバルログ モードのHTTP タイムアウトが5000msを接続する クライアント50000msタイムアウト タイムアウトサーバー50000ms オプションをdontlognull 統計を聞く:8888の 統計は、有効 統計URI /管理者 1234:統計認証管理 フロントエンドoldboy.orgを 0.0.0.0:80バインド オプションHTTPLOG オプションhttpclose forwardforオプション グローバルのログを記録します ACLのWWWのhdr_reg(ホスト)-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
輸入OS
もし__name__ == "__main__":#変数
MSG = "" "
1:クエリ
2:追加
3:変更
4:削除
5:終了
" ""
msf_dic = { "1"、 "2" FETCH:add()を、 "3":変化、 "4 "}削除
真の中:
印刷(MSG)
。ストリップ():選択はINPUT(「あなたのオプションを入力してください」)=
IFない選択肢を:続行
の選択==「5」のIF:BREAK
データの入力を=(「あなたのデータを入力してください」 ).strip()
##############問い合わせ####################
DEF(データ)をフェッチ: #プリント( "这是查询功能") backend_data = 'バックエンド%s'は%データ read_fとしてオープン( "haproxy.conf"、 "R")を有する: タグ= Falseの#タグ标识一种状态 RET = [] READ_LINEためread_f中: もしread_line.strip()== backend_data: タグ= Trueの場合 継続 の場合、タグとread_line.startswith( "バックエンド"): 破る かのタグ: プリント(READ_LINE、エンド= "") RET。追加(READ_LINE) リターンRET
##############変更#################
DEFの変更(データ): 印刷(「それは修正機能である」) を印刷(「ユーザーの入力データがある」、データ) バックエンド=データ[0] [「バックエンド」]#ファイルのレコードの中 backend_data =「バックエンド%sの"%バックエンド old_server_record =" %sServer%S%S重量%S MAXCONN%S \ N - "%(" "* 8は、Data [0] ["レコード"] ["サーバ"]、 DATA [0] ["レコード"] ["サーバ"]、 DATA [0] ["レコード"] ["重量"]、 DATA [0] ["レコード"] [" MAXCONN "]) new_server_record =" %sServer%S%S重量%S MAXCONN%sの\ nは"%( "「* 8、データ[1] [ "記録"] [ "サーバー"]、 データ[1] [ "記録"] [ "サーバー"]、 データ[1]〜[ "レコード"] [ "重量"]、 read_fでREAD_LINE用: データ[1]〜[ "レコード"] [ "MAXCONN"]) 、印刷( "用户想要修改的记录是"、old_server_record) RES =(バックエンド)フェッチ ない場合RESを又はold_server_recordない解像度で: リターン「修改记录不存在" 他: インデックス= res.index(old_server_record) RES [インデックス] = new_server_record res.insert(0、" %sの\ n」%のバックエンド) オープンと( ""、 "R" haproxy.comf)read_fとして、\ オープン( "haproxy.comf_new" "W")write_fとして: タグ= Falseの has_write = Falseの タグ= Trueが 継続します read_line.strip()== backend_data場合: タグとread_line.startswith場合( "バックエンド") タグ= Falseの ない場合はタグ付け: write_f.write(READ_LINE) 他に: has_writeない場合: :解像度でのレコードの write_f.write(レコード) has_write =真 os.rename(「haproxy .confの」、 "haproxy.conf.bak") os.rename( "haproxy.conf_new"、 "haproxy.conf") os.remove( "haproxy.conf.bak")
########### ##########デカップリングと最終版
インポートOSの デフfile_handler(backend_data、RES =なし、タイプ= "フェッチない"): タイプ== "フェッチ"場合: read_fとして( "haproxy.conf"、 "R")オープンで: タグ= Falseの RET = [] のためread_fでREAD_LINE: :read_line.strip()== backend_dataかの タグ= Trueの場合 継続 タグとread_line.startswith( "バックエンド")場合: ブレーク ifタグ: プリント(READ_LINE、エンド= "") ret.append(READ_LINE) リターンRETの ELIFタイプ== "変更": 、read_fとして( "haproxy.comf"、 "R")オープン\有する has_writeない場合: :解像度でのレコードの write_f.write(レコード) オープン( "haproxy.comf_new" "W")write_fのように: タグ= Falseの has_write = Falseの read_fでREAD_LINEのため: もしread_line.strip()== backend_data: タグ= Trueの場合 継続 の場合、タグとread_line.startswith( "バックエンド" ): タグ= Falseの タグ付けされていない場合: write_f.write(READ_LINE) 他: has_write =真 os.rename( "haproxy.confを"、 "haproxy.conf.bak") os.rename( "haproxy.conf_new"、「haproxy .confの") os.remove(" haproxy.conf。BAK」) デフデータ(フェッチ): #印刷( "それは検索機能である") backend_data = 'バックエンド%S' %データ リターンfile_handlerある(backend_data) DEF追加(): パス DEFチェンジ(データ): 印刷( "それは修正機能です") プリント( "ユーザによるデータ入力がある"、データ) バックエンド=データ[0] [ "バックエンド"]レコードのうち、#ファイル backend_data = "バックエンド%S" %バックエンド old_server_record =「%sServer%S%S重量%S MAXCONN%S \ n "%( " "* 8、データ[0] ["レコード"]["サーバ"]、 データ[0] [ "レコード"] [ "サーバ"]、 DATA [0] [ "レコード"] [ "重量"]、 DATA [0] [ "レコード"] [ "MAXCONN"]) new_server_record = "sServer%の重量%S%S%S%S MAXCONNする\ n" - "* 8、DATA [1] [" %( "レコード"] [ "サーバ"]、 データ[1] [ "記録"] [ "サーバー"]、 データ[1]〜[ "レコード"] [ "重量"]、 DATA [1] [ "レコード"] [ "MAXCONN"]) 、印刷( "用户想要修改的记录是"、old_server_record) のRES =フェッチ(バックエンド) でない場合RES又はold_server_recordない解像度で: リターン"修改记录不存在" 他: インデックス= res.index(old_server_record) RES [インデックス] = new_server_record res.insert(0、 "%S \ N-"バックエンド%) file_handlerは(backend_data、RESの=のRES、タイプです= "変更") DEFの削除(): パス IF __name__ == "__main__":#変数 msgが= "" " 1:クエリ 2:追加 3:修正 4:削除 5:終了します 。 "" " msf_dic = {」1。 ": "2" FETCH:追加()、" 3。 ":変更し、" 4" 。:削除} しばらく真: 印刷(MSG) の選択= INPUT( "入力してくださいオプション:")。ストリップ() 選択されていない場合:続行を 選択== "5" IF:BREAK )ストリップ(。:( "あなたのデータを入力してください")=入力したデータを IF選択= "1" :! データ=のeval(データ)#evalをデータ構造の文字列を抽出し、文字列がその演算式を実行することができる RES = msf_dic [選択](データ) を印刷(RES)
----------