【Python自动化运维】字典应用场景:批量操作多台服务器上的多个Tomcat应用

以传统的方式,当你需要操作多台服务器上的多个Tomcat服务时:

  最无脑的操作,当然是登录到每个服务器上面,然后再依次去启动每个Tomcat服务。

  或者通过python脚本来控制的,通过ssh远程启动Tomcat服务,就像这样:

import os

# 远程服务器1
os.system("ssh root@[ 远程服务器ip1 ] [ tomcat服务名1 ]/bin/startup.sh")
os.system("ssh root@[ 远程服务器ip1 ] [ tomcat服务名2 ]/bin/startup.sh”)


# 远程服务器2
os.system("ssh root@[ 远程服务器ip2 ] [ tomcat服务名1 ]/bin/startup.sh")
os.system("ssh root@[ 远程服务器ip2 ] [ tomcat服务名2 ]/bin/startup.sh")

...

## 多一个Tomcat服务,就多一行

恩...上面这种虽然能达到目的效果,但是脚本里面很多冗余的代码,重复的片段比较多,我们可以稍微优化一下,就用Python里面的列表功能来操作一下:

import os

# 有多少个服务器,就定义多少个列表
tomcatA = ["tomcat服务1" , "tomcat服务2"]
tomcatB = ["tomcat服务1" , "tomcat服务2"]


# 遍历列表,启动tomcat服务器上所有的tomcat:
for tomcatName in tomcatA:
    command = "ssh root@服务器ip1" + "/opt/" + tomcatName +"/bin/startup.sh"
    os.system(command)


for tomcatName in tomcatB:
    command = "ssh root@服务器ip2" + "/opt/" + tomcatName +"/bin/startup.sh"
    os.system(command)

 

恩...上面这种已经有点优化效果了,服务器不增加的情况,每增多一个Tomcat,只需要在相应的列表里面加上Tomcat名。服务器增加一台,就多一个for循环。

现在看看终极优化,引入字典:

#!/usr/bin/python3
# author 老板你再这样我要删库了


import os


# 字典的key对应所有服务器IP,字典的value对应一个列表。
info = {
    "服务器ip1" : ["tomcat1"],
    "服务器ip2" : ["tomcat2" , "tomcat3"]
}


# 遍历所有IP
for serverIP in info.keys(): 
    # 遍历所有Tomcat名
    for tomcatName in info[serverIp]:
        command = "ssh root@" + info[serverIp] + " " + "/opt/" + tomcatName + "/bin/startup.sh"
        os.system(command)
    

  因为这是教程,我也就随便写写,观想的是2台服务器,每台服务器一两个Tomcat的情况,从代码行数上来看好像都差不多,但实际场景中,十几二十台服务器都是少的,每个服务器上Tomcat数量又不一样。

采用字典的方式,多一台服务器,也就是多一个键值对,多一个Tomcat就在列表里加多一个元素,从扩展方面来讲,这就很溜了。

猜你喜欢

转载自blog.csdn.net/wuguifa/article/details/85088971
今日推荐