要求:
<span style="font-family:"># 修改<a href="https://www.gaodaima.com/tag/haproxy" title="查看更多关于haproxy的文章" target="_blank">haproxy</a>配置文件</span><br><span style="font-family:"># 查询:<a href="https://www.gaodaima.com/tag/%e8%be%93%e5%85%a5" title="查看更多关于输入的文章" target="_blank">输入</a>网址获取当前backend下的所有记录</span><br><span style="font-family:"># 增加:输入字典增加一条记录</span><br><span style="font-family:"># 删除:输入字典删除该记录<br><strong>目前完成的版本有一个比较大的问题就是增加删除的时候如果不按格式输入代码会报错,后续再改进吧</strong><br><br></span>
www#gaodaima.com来源gao@!dai!ma.com搞$$代^@码!网搞代码
<span style="color: #008080"> 1</span> <span style="color: #0000ff">global</span> <span style="color: #008080"> 2</span> <a href="https://www.gaodaima.com/tag/log" title="查看更多关于log的文章" target="_blank">log</a> 127.0.0.1<span style="color: #000000"> local2 </span><span style="color: #008080"> 3</span> <span style="color: #000000"> daemon </span><span style="color: #008080"> 4</span> maxconn 256 <span style="color: #008080"> 5</span> log 127.0.0.1<span style="color: #000000"> local2 info </span><span style="color: #008080"> 6</span> <span style="color: #000000">defaults </span><span style="color: #008080"> 7</span> log <span style="color: #0000ff">global</span> <span style="color: #008080"> 8</span> <span style="color: #000000"> mode http </span><span style="color: #008080"> 9</span> <span style="color: #000000"> timeout connect 5000ms </span><span style="color: #008080">10</span> <span style="color: #000000"> timeout client 50000ms </span><span style="color: #008080">11</span> <span style="color: #000000"> timeout server 50000ms </span><span style="color: #008080">12</span> <span style="color: #000000"> option dontlognull </span><span style="color: #008080">13</span> <span style="color: #008080">14</span> listen stats :8888 <span style="color: #008080">15</span> <span style="color: #000000"> stats enable </span><span style="color: #008080">16</span> stats uri /<span style="color: #000000">admin </span><span style="color: #008080">17</span> stats auth admin:1234 <span style="color: #008080">18</span> <span style="color: #008080">19</span> <span style="color: #000000">frontend oldboy.org </span><span style="color: #008080">20</span> bind 0.0.0.0:80 <span style="color: #008080">21</span> <span style="color: #000000"> option httplog </span><span style="color: #008080">22</span> <span style="color: #000000"> option httpclose </span><span style="color: #008080">23</span> <span style="color: #000000"> option forwardfor </span><span style="color: #008080">24</span> log <span style="color: #0000ff">global</span> <span style="color: #008080">25</span> acl www hdr_reg(host) -<span style="color: #000000">i www.oldboy.org </span><span style="color: #008080">26</span> use_backend www.oldboy.org <span style="color: #0000ff">if</span><span style="color: #000000"> www </span><span style="color: #008080">27</span> <span style="color: #008080">28</span> <span style="color: #000000">backend www.oldboy.org </span><span style="color: #008080">29</span> server 100.1.7.9 100.1.7.9 weight 20 maxconn 3000
haproxy文档
<span style="color: #008080"> 1</span> <span style="color: #008000">#</span><span style="color: #008000"> 修改haproxy配置文件</span> <span style="color: #008080"> 2</span> <span style="color: #008000">#</span><span style="color: #008000"> 查询:输入网址获取当前backend下的所有记录</span> <span style="color: #008080"> 3</span> <span style="color: #008000">#</span><span style="color: #008000"> 增加:输入字典增加一条记录</span> <span style="color: #008080"> 4</span> <span style="color: #008000">#</span><span style="color: #008000"> 删除:输入字典删除该记录</span> <span style="color: #008080"> 5</span> <span style="color: #008080"> 6</span> <span style="color: #0000ff">import</span><span style="color: #000000"> sys </span><span style="color: #008080"> 7</span> <span style="color: #008080"> 8</span> <span style="color: #008080"> 9</span> <span style="color: #0000ff">def</span><span style="color: #000000"> info(): </span><span style="color: #008080"> 10</span> <span style="color: #800000">"""</span><span style="color: #800000">提取当前配置文件中所有backend网址信息</span><span style="color: #800000">"""</span> <span style="color: #008080"> 11</span> backend =<span style="color: #000000"> [] </span><span style="color: #008080"> 12</span> with open(<span style="color: #800000">"</span><span style="color: #800000">haproxy</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">r</span><span style="color: #800000">"</span><span style="color: #000000">) as f: </span><span style="color: #008080"> 13</span> <span style="color: #0000ff">for</span> line <span style="color: #0000ff">in</span><span style="color: #000000"> f: </span><span style="color: #008080"> 14</span> <span style="color: #0000ff">if</span> line.startswith(<span style="color: #800000">"</span><span style="color: #800000">backend</span><span style="color: #800000">"</span><span style="color: #000000">): </span><span style="color: #008080"> 15</span> line =<span style="color: #000000"> line.strip() </span><span style="color: #008080"> 16</span> backend.append(line.partition(<span style="color: #800000">"</span> <span style="color: #800000">"</span>)[2<span style="color: #000000">]) </span><span style="color: #008080"> 17</span> <span style="color: #0000ff">return</span><span style="color: #000000"> backend </span><span style="color: #008080"> 18</span> <span style="color: #008080"> 19</span> <span style="color: #008080"> 20</span> <span style="color: #0000ff">def</span><span style="color: #000000"> search(website): </span><span style="color: #008080"> 21</span> <span style="color: #800000">"""</span><span style="color: #800000">输入网址查找其具体信息</span><span style="color: #800000">"""</span> <span style="color: #008080"> 22</span> info_backend =<span style="color: #000000"> [] </span><span style="color: #008080"> 23</span> <span style="color: #0000ff">if</span> website <span style="color: #0000ff">in</span><span style="color: #000000"> info(): </span><span style="color: #008080"> 24</span> with open(<span style="color: #800000">"</span><span style="color: #800000">haproxy</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">r</span><span style="color: #800000">"</span><span style="color: #000000">) as f: </span><span style="color: #008080"> 25</span> <span style="color: #0000ff">for</span> line <span style="color: #0000ff">in</span><span style="color: #000000"> f: </span><span style="color: #008080"> 26</span> <span style="color: #0000ff">if</span> line.strip() == <span style="color: #800000">"</span><span style="color: #800000">backend</span><span style="color: #800000">"</span>+<span style="color: #800000">"</span> <span style="color: #800000">"</span>+<span style="color: #000000">website: </span><span style="color: #008080"> 27</span> f1 =<span style="color: #000000"> f.readline() </span><span style="color: #008080"> 28</span> <span style="color: #0000ff">while</span> f1.startswith(<span style="color: #800000">"</span><span style="color: #800000"> server</span><span style="color: #800000">"</span><span style="color: #000000">): </span><span style="color: #008080"> 29</span> <span style="color: #000000"> info_backend.append(f1.strip()) </span><span style="color: #008080"> 30</span> f1 =<span style="color: #000000"> f.readline() </span><span style="color: #008080"> 31</span> <span style="color: #0000ff">print</span>(f<span style="color: #800000">"</span><span style="color: #800000">33[31m{website}条目信息:33[0m</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 32</span> <span style="color: #0000ff">for</span> i, items <span style="color: #0000ff">in</span><span style="color: #000000"> enumerate(info_backend): </span><span style="color: #008080"> 33</span> <span style="color: #0000ff">print</span>(i+1, items.strip(<span style="color: #800000">"</span><span style="color: #800000">"</span><span style="color: #800000">"</span><span style="color: #000000">)) </span><span style="color: #008080"> 34</span> <span style="color: #0000ff">else</span><span style="color: #000000">: </span><span style="color: #008080"> 35</span> <span style="color: #0000ff">print</span>(f<span style="color: #800000">"</span><span style="color: #800000">{website} 条目不存在</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 36</span> <span style="color: #0000ff">return</span><span style="color: #000000"> info_backend </span><span style="color: #008080"> 37</span> <span style="color: #008080"> 38</span> <span style="color: #008080"> 39</span> <span style="color: #0000ff">def</span><span style="color: #000000"> add(add_dic): </span><span style="color: #008080"> 40</span> <span style="color: #800000">"""</span><span style="color: #800000">添加条目</span><span style="color: #800000">"""</span> <span style="color: #008080"> 41</span> add_dic =<span style="color: #000000"> eval(add_dic) </span><span style="color: #008080"> 42</span> website = add_dic[<span style="color: #800000">"</span><span style="color: #800000">backend</span><span style="color: #800000">"</span><span style="color: #000000">] </span><span style="color: #008080"> 43</span> record = add_dic[<span style="color: #800000">"</span><span style="color: #800000">record</span><span style="color: #800000">"</span><span style="color: #000000">] </span><span style="color: #008080"> 44</span> <span style="color: #0000ff">if</span> website <span style="color: #0000ff">in</span><span style="color: #000000"> info(): </span><span style="color: #008080"> 45</span> <span style="color: #0000ff">print</span>(f<span style="color: #800000">"</span><span style="color: #800000">33[31m{website}已存在33[0m</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 46</span> <span style="color: #0000ff">else</span><span style="color: #000000">: </span><span style="color: #008080"> 47</span> with open(<span style="color: #800000">"</span><span style="color: #800000">haproxy</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">a</span><span style="color: #800000">"</span><span style="color: #000000">) as f: </span><span style="color: #008080"> 48</span> f.write(<span style="color: #800000">"</span><span style="color: #800000"> </span><span style="color: #800000">"</span>+<span style="color: #800000">"</span><span style="color: #800000">backend</span><span style="color: #800000">"</span>+<span style="color: #800000">"</span> <span style="color: #800000">"</span>+website+<span style="color: #800000">"</span><span style="color: #800000"> </span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 49</span> f.write(<span style="color: #800000">"</span> <span style="color: #800000">"</span>+<span style="color: #800000">"</span><span style="color: #800000">server</span><span style="color: #800000">"</span>+<span style="color: #800000">"</span> <span style="color: #800000">"</span>+record[<span style="color: #800000">"</span><span style="color: #800000">server</span><span style="color: #800000">"</span>]+<span style="color: #800000">"</span> <span style="color: #800000">"</span>+record[<span style="color: #800000">"</span><span style="color: #800000">server</span><span style="color: #800000">"</span>]+<span style="color: #800000">"</span> <span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 50</span> f.write(<span style="color: #800000">"</span><span style="color: #800000">weight</span><span style="color: #800000">"</span>+<span style="color: #800000">"</span> <span style="color: #800000">"</span>+str(record[<span style="color: #800000">"</span><span style="color: #800000">weight</span><span style="color: #800000">"</span>])+<span style="color: #800000">"</span> <span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 51</span> f.write(<span style="color: #800000">"</span><span style="color: #800000">maxconn</span><span style="color: #800000">"</span>+<span style="color: #800000">"</span> <span style="color: #800000">"</span>+str(record[<span style="color: #800000">"</span><span style="color: #800000">maxconn</span><span style="color: #800000">"</span><span style="color: #000000">])) </span><span style="color: #008080"> 52</span> <span style="color: #0000ff">print</span>(f<span style="color: #800000">"</span><span style="color: #800000">33[31mbackend {website} 条目已添加33[0m</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 53</span> <span style="color: #008080"> 54</span> <span style="color: #008080"> 55</span> <span style="color: #0000ff">def</span><span style="color: #000000"> delete(del_dic): </span><span style="color: #008080"> 56</span> <span style="color: #800000">"""</span><span style="color: #800000">删除条目</span><span style="color: #800000">"""</span> <span style="color: #008080"> 57</span> del_dic =<span style="color: #000000"> eval(del_dic) </span><span style="color: #008080"> 58</span> website = del_dic[<span style="color: #800000">"</span><span style="color: #800000">backend</span><span style="color: #800000">"</span><span style="color: #000000">] </span><span style="color: #008080"> 59</span> <span style="color: #0000ff">if</span> website <span style="color: #0000ff">in</span><span style="color: #000000"> info(): </span><span style="color: #008080"> 60</span> with open(<span style="color: #800000">"</span><span style="color: #800000">haproxy</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">r</span><span style="color: #800000">"</span><span style="color: #000000">) as f: </span><span style="color: #008080"> 61</span> with open(<span style="color: #800000">"</span><span style="color: #800000">haproxy_new.txt</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">w+</span><span style="color: #800000">"</span><span style="color: #000000">) as f1: </span><span style="color: #008080"> 62</span> <span style="color: #0000ff">for</span> line <span style="color: #0000ff">in</span><span style="color: #000000"> f: </span><span style="color: #008080"> 63</span> <span style="color: #0000ff">if</span> line.strip() == <span style="color: #800000">"</span><span style="color: #800000">backend</span><span style="color: #800000">"</span>+<span style="color: #800000">"</span> <span style="color: #800000">"</span>+del_dic[<span style="color: #800000">"</span><span style="color: #800000">backend</span><span style="color: #800000">"</span><span style="color: #000000">]: </span><span style="color: #008080"> 64</span> line =<span style="color: #000000"> f.readline() </span><span style="color: #008080"> 65</span> <span style="color: #0000ff">while</span> line.startswith(<span style="color: #800000">"</span><span style="color: #800000"> server</span><span style="color: #800000">"</span><span style="color: #000000">): </span><span style="color: #008080"> 66</span> line =<span style="color: #000000"> f.readline() </span><span style="color: #008080"> 67</span> <span style="color: #0000ff">continue</span> <span style="color: #008080"> 68</span> <span style="color: #0000ff">else</span><span style="color: #000000">: </span><span style="color: #008080"> 69</span> <span style="color: #000000"> f1.write(line) </span><span style="color: #008080"> 70</span> <span style="color: #0000ff">print</span>(f<span style="color: #800000">"</span><span style="color: #800000">{website} 条目删除成功</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 71</span> with open(<span style="color: #800000">"</span><span style="color: #800000">haproxy</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">w</span><span style="color: #800000">"</span><span style="color: #000000">) as f: </span><span style="color: #008080"> 72</span> with open(<span style="color: #800000">"</span><span style="color: #800000">haproxy_new.txt</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">r</span><span style="color: #800000">"</span><span style="color: #000000">) as f1: </span><span style="color: #008080"> 73</span> <span style="color: #0000ff">for</span> line <span style="color: #0000ff">in</span><span style="color: #000000"> f1: </span><span style="color: #008080"> 74</span> <span style="color: #000000"> f.write(line) </span><span style="color: #008080"> 75</span> <span style="color: #0000ff">else</span><span style="color: #000000">: </span><span style="color: #008080"> 76</span> <span style="color: #0000ff">print</span>(f<span style="color: #800000">"</span><span style="color: #800000">{website} 条目不存在</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 77</span> <span style="color: #0000ff">return</span> <span style="color: #008080"> 78</span> <span style="color: #008080"> 79</span> <span style="color: #008080"> 80</span> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">33[31m欢迎进入haproxy配置系统33[0m</span><span style="color: #800000">"</span>.center(50, <span style="color: #800000">"</span> <span style="color: #800000">"</span><span style="color: #000000">)) </span><span style="color: #008080"> 81</span> <span style="color: #0000ff">while</span><span style="color: #000000"> True: </span><span style="color: #008080"> 82</span> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">-</span><span style="color: #800000">"</span>.center(50, <span style="color: #800000">"</span><span style="color: #800000">-</span><span style="color: #800000">"</span><span style="color: #000000">)) </span><span style="color: #008080"> 83</span> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">当前backend网址信息如下:</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 84</span> <span style="color: #0000ff">for</span> j, backend <span style="color: #0000ff">in</span><span style="color: #000000"> enumerate(info()): </span><span style="color: #008080"> 85</span> <span style="color: #0000ff">print</span>(j+1<span style="color: #000000">, backend) </span><span style="color: #008080"> 86</span> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">-</span><span style="color: #800000">"</span>.center(50, <span style="color: #800000">"</span><span style="color: #800000">-</span><span style="color: #800000">"</span><span style="color: #000000">)) </span><span style="color: #008080"> 87</span> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">1.信息查询</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000"> </span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">2.增加条目</span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000"> </span><span style="color: #800000">"</span>, <span style="color: #800000">"</span><span style="color: #800000">3.删除条目</span><span style="color: #800000">"</span>, sep=<span style="color: #800000">""</span><span style="color: #000000">) </span><span style="color: #008080"> 88</span> choice1 = input(<span style="color: #800000">"</span><span style="color: #800000">输入序号进入配置界面(输入q退出系统):</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 89</span> <span style="color: #0000ff">if</span><span style="color: #000000"> choice1.isdigit(): </span><span style="color: #008080"> 90</span> choice1 =<span style="color: #000000"> int(choice1) </span><span style="color: #008080"> 91</span> <span style="color: #0000ff">if</span> choice1 <span style="color: #0000ff">in</span> range(1, 4<span style="color: #000000">): </span><span style="color: #008080"> 92</span> <span style="color: #0000ff">if</span> choice1 == 1<span style="color: #000000">: </span><span style="color: #008080"> 93</span> <span style="color: #0000ff">while</span><span style="color: #000000"> True: </span><span style="color: #008080"> 94</span> choice2 = input(<span style="color: #800000">"</span><span style="color: #800000">请输入网址进行查询(例:www.baidu.com)(b返回q退出):</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 95</span> <span style="color: #0000ff">if</span> choice2 == <span style="color: #800000">"</span><span style="color: #800000">b</span><span style="color: #800000">"</span><span style="color: #000000">: </span><span style="color: #008080"> 96</span> <span style="color: #0000ff">break</span> <span style="color: #008080"> 97</span> <span style="color: #0000ff">elif</span> choice2 == <span style="color: #800000">"</span><span style="color: #800000">q</span><span style="color: #800000">"</span><span style="color: #000000">: </span><span style="color: #008080"> 98</span> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">系统退出</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080"> 99</span> <span style="color: #000000"> sys.exit() </span><span style="color: #008080">100</span> <span style="color: #0000ff">else</span><span style="color: #000000">: </span><span style="color: #008080">101</span> <span style="color: #000000"> search(choice2) </span><span style="color: #008080">102</span> <span style="color: #0000ff">elif</span> choice1 == 2<span style="color: #000000">: </span><span style="color: #008080">103</span> <span style="color: #0000ff">while</span><span style="color: #000000"> True: </span><span style="color: #008080">104</span> choice3 = input(<span style="color: #800000">"</span><span style="color: #800000">请输入条目字典(b返回q退出):</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080">105</span> <span style="color: #0000ff">if</span> choice3 == <span style="color: #800000">"</span><span style="color: #800000">b</span><span style="color: #800000">"</span><span style="color: #000000">: </span><span style="color: #008080">106</span> <span style="color: #0000ff">break</span> <span style="color: #008080">107</span> <span style="color: #0000ff">elif</span> choice3 == <span style="color: #800000">"</span><span style="color: #800000">q</span><span style="color: #800000">"</span><span style="color: #000000">: </span><span style="color: #008080">108</span> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">系统退出</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080">109</span> <span style="color: #000000"> sys.exit() </span><span style="color: #008080">110</span> <span style="color: #0000ff">else</span><span style="color: #000000">: </span><span style="color: #008080">111</span> <span style="color: #000000"> add(choice3) </span><span style="color: #008080">112</span> <span style="color: #0000ff">elif</span> choice1 == 3<span style="color: #000000">: </span><span style="color: #008080">113</span> <span style="color: #0000ff">while</span><span style="color: #000000"> True: </span><span style="color: #008080">114</span> choice4 = input(<span style="color: #800000">"</span><span style="color: #800000">请输入添加条目字典(b返回q退出):</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080">115</span> <span style="color: #0000ff">if</span> choice4 == <span style="color: #800000">"</span><span style="color: #800000">b</span><span style="color: #800000">"</span><span style="color: #000000">: </span><span style="color: #008080">116</span> <span style="color: #0000ff">break</span> <span style="color: #008080">117</span> <span style="color: #0000ff">elif</span> choice4 == <span style="color: #800000">"</span><span style="color: #800000">q</span><span style="color: #800000">"</span><span style="color: #000000">: </span><span style="color: #008080">118</span> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">系统退出</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080">119</span> <span style="color: #000000"> sys.exit() </span><span style="color: #008080">120</span> <span style="color: #0000ff">else</span><span style="color: #000000">: </span><span style="color: #008080">121</span> <span style="color: #000000"> delete(choice4) </span><span style="color: #008080">122</span> <span style="color: #0000ff">else</span><span style="color: #000000">: </span><span style="color: #008080">123</span> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">无此选项,请正确输入!</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080">124</span> <span style="color: #0000ff">elif</span> choice1 == <span style="color: #800000">"</span><span style="color: #800000">q</span><span style="color: #800000">"</span><span style="color: #000000">: </span><span style="color: #008080">125</span> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">系统退出</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080">126</span> <span style="color: #000000"> sys.exit() </span><span style="color: #008080">127</span> <span style="color: #0000ff">else</span><span style="color: #000000">: </span><span style="color: #008080">128</span> <span style="color: #0000ff">print</span>(<span style="color: #800000">"</span><span style="color: #800000">格式错误,请重新输入!</span><span style="color: #800000">"</span><span style="color: #000000">) </span><span style="color: #008080">129</span> <span style="color: #0000ff">continue</span>
haproxy代码