zoukankan      html  css  js  c++  java
  • 服务端测试环境hosts配置检查脚本

    [本文出自天外归云的博客园]

    问题

    由于A测试环境和B测试环境相互耦合,B测试环境切换导致我方测试环境需要更改后台服务器的响应配置。若多台服务器中有一台服务器没有更改配置,则在测试过程中将会出现问题。届时排查由于环境配置不统一引起的环境问题将会费时费力。

    思考

    测试环境之间的关联配置就是hosts的配置,我们只需要知道A测试环境中各个服务器上的hosts文件中配置的B环境的hosts是否一致即可得出结论。

    解决方案

    在A测试环境服务器端各个机器的根目录下均安放hosts检查脚本hosts_check.py,内容如下:
    #!/usr/bin/python
    # -*- coding:utf-8 -
    B_server_ip_1 = "B env ip 1"
    B_server_ip_2 = "B env ip 2"
    tip_1 = "isXXX"
    tip_2 = "isnotXXX"
    
    with open('/etc/hosts') as f:
        for line in f.readlines():
            rule1 = "B env name" in line
            rule2 = not line.startswith("#")
            rule3 = B_server_ip_1 in line
            rule4 = B_server_ip_2 in line
            if rule1 and rule2:
                if rule3:
                    print(tip_1)
                if rule4:
                    print(tip_2)

    其中假设B环境有两台server,他们的ip分别为B_server_ip_1和B_server_ip_2,对于每台server上的hosts文件进行检查,找出其中对应B环境名(hosts name,这里的B env name)的行,找出没被注释掉的行,假如该行中包含B_server_ip_1则对应的是打印tip_1,包含B_server_ip_2则对应的是打印tip_2。

    在本地端执行检测脚本,内容如下:

    # coding:utf-8
    import base64
    import paramiko
    
    class SSH_Handler:
        client = paramiko.SSHClient()
        def __init__(self,ssh_key_path,server_ip,server_port,username):
            ssh_key = paramiko.RSAKey.from_private_key_file(ssh_key_path)
            self.client.load_system_host_keys()
            self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
            self.client.connect(server_ip,port=server_port,username=username,pkey=ssh_key)
        def exec_command(self,command):
            stdin, stdout, stderr = self.client.exec_command(command)
            ret = []
            for line in stdout:
                ret.append(line.strip())
            return ret
        def __del__(self):
            self.client.close()
    
    '''
        ssh_key_path:OpenSSH格式的用来连接服务器的私钥路径
        server_ip:要连接的服务器的ip地址
        server_port:要连接的服务器的端口
        username:登录服务器的用户名
        command:在服务器端要执行的命令
    '''
    if __name__ == '__main__':
        ssh_key_path = 'E:\sshKey'
        server_ips = ['A env ip 1','A env ip 2','A env ip 3']
        server_port = xxxx
        username = 'username'
        command = 'python hosts_check.py'
        results = []
        s = set()
        for server_ip in server_ips:
            result = SSH_Handler(ssh_key_path,server_ip,server_port,username).exec_command(command)[0]
            results.append(server_ip+":"+result)
            s.add(result)
        if len(s) ==1:
            print(s)
        else:
            print(results)

    在执行上面的脚本前需要在本地python3环境安装paramiko,用来远程ssh服务器。需要弄清连接服务器私钥存放的地址,在SecureCRT中可以通过Tools中的工具将秘钥转换为OpenSSH格式的私钥,这个路径对应的就是OpenSSH格式私钥的路径,这里对应的文件为sshKey。这里假设A环境有三台服务器,对每台服务器上分别执行hosts_check.py脚本并获取输出,分析输出结果,如果一致则说明环境配置无误,返回当前配置的环境信息的集合;如果不一致则说明环境配置有误,返回当前配置的环境信息列表。

  • 相关阅读:
    C# 设计原则-单一职责原则
    C# Linq的简单运用
    .Net Core中的管道机制
    .Net Core和.Net Framework的区别
    C# 9.0 新特性简析
    .Net core的依赖注入
    .Net IOC容器unity的使用
    网站被黑客攻击百度出现警示
    七牛云免费对象存储(解决图片加载缓慢问题)
    今天第一篇博客 说点随意的内容
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/7521410.html
Copyright © 2011-2022 走看看