python中云服务器集群计算节点客户机网卡状态管理的脚本示例
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章给大家分享的是有关python中云服务器集群计算节点客户机网卡状态管理的脚本示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。计算节点服务端代码,响应客户端http
千家信息网最后更新 2025年12月03日python中云服务器集群计算节点客户机网卡状态管理的脚本示例
这篇文章给大家分享的是有关python中云服务器集群计算节点客户机网卡状态管理的脚本示例的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
计算节点服务端代码,响应客户端http请求,完成对虚拟机网卡的状态管理.
#! /usr/bin/pythonfrom wsgiref.simple_server import make_server import jsonimport os import signal import shlex import subprocess from eventlet.green import subprocess as green_subprocess from eventlet import greenthread reserved_ip = "10.38.88.10" # this service rejects any request except those from 10.38.88.10 reserved_http_method = "POST" listen_port = 9999 def create_process(cmd, root_helper=None, addl_env=None): if root_helper: cmd = shlex.split(root_helper) + cmd cmd = map(str, cmd) env = os.environ.copy() if addl_env: env.update(addl_env) obj = subprocess_popen(cmd, shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, env=env) return obj, cmd def execute(cmd, root_helper=None, process_input=None, addl_env=None, check_exit_code=True, return_stderr=False): try: obj, cmd = create_process(cmd, root_helper=root_helper, addl_env=addl_env) _stdout, _stderr = (process_input and obj.communicate(process_input) or obj.communicate()) obj.stdin.close() m = ("\nCommand: %(cmd)s\nExit code: %(code)s\nStdout: %(stdout)r\n" "Stderr: %(stderr)r") % {'cmd': cmd, 'code': obj.returncode, 'stdout': _stdout, 'stderr': _stderr} if obj.returncode and check_exit_code: raise RuntimeError(m) finally: greenthread.sleep(0) return return_stderr and (_stdout, _stderr) or _stdoutdef _subprocess_setup(): signal.signal(signal.SIGPIPE, signal.SIG_DFL)def subprocess_popen(args, stdin=None, stdout=None, stderr=None, shell=False, env=None): return green_subprocess.Popen(args, shell=shell, stdin=stdin, stdout=stdout, stderr=stderr, preexec_fn=_subprocess_setup, close_fds=True, env=env)def app(environ, start_response): source_ip = environ['REMOTE_ADDR'] request_method = environ['REQUEST_METHOD'] if source_ip != reserved_ip : status = '400 Bad Request' # Not Allowed headers = [('Content-type', 'application/json')] # HTTP Headers start_response(status, headers) return ['{"msg":"Not Acceptable"}'] if request_method != reserved_http_method: status = '405 Method Not Allowed' # Not Allowed headers = [('Content-type', 'application/json')] # HTTP Headers start_response(status, headers) return ['{"msg":"Method Not Allowed"}'] request_body_size = int(environ.get('CONTENT_LENGTH', 0)) request_body = environ['wsgi.input'].read(request_body_size) request_body = json.loads(request_body) param_vmid = request_body['id'] param_status = request_body['status'] hex_id = str(hex(param_vmid))[2:] for i in xrange(8-len(hex_id)): hex_id = "%d%s"%(0,hex_id) instance_name = "instance-%s"%hex_id mgmt = "virsh domiflist %s"%instance_name cmd = mgmt.split() try: retv = execute(cmd,root_helper=None) except Exception as e: status = '400 Bad Request' # Not Allowed headers = [('Content-type', 'application/json')] # HTTP Headers start_response(status, headers) return ['{"msg":"VM Not Found"}'] result = [] for line in retv.split("\n"): if "br-wan" in line: result.append(line) domif = result[0].split()[0].strip() if "-" == domif: status = '200 OK' # Not Allowed headers = [('Content-type', 'application/json')] # HTTP Headers start_response(status, headers) return ['{"msg":"Success"}'] else: mgmt = "ip link set %s %s"%(domif,param_status) cmd = mgmt.split() retv = execute(cmd,root_helper=None) status = '200 OK' # Not Allowed headers = [('Content-type', 'application/json')] # HTTP Headers start_response(status, headers) return ['{"msg":"Success"}'] httpd = make_server('', listen_port, app)httpd.serve_forever()前台程序计算出客户机所处计算节点(宿主)ip,然后调用http请求,实现功能.
def kvm_conn_mgmt(self,instance_name,conn_status): if conn_status!='up' and conn_status!='down': return (resultcode.BadRequest, {"msg":"Vps conn status must be up/down"}) if len(instance_name.strip())==0: return (resultcode.BadRequest, {"msg":"Vps name should not be empty. "}) sql= "select i.id,cn.host_ip from instances as i,compute_nodes as cn where i.display_name='%s' and i.deleted=0 and i.host=cn.hypervisor_hostname"%instance_name result = db.execNovaSQL(sql) if len(result) == 0: return (resultcode.BadRequest, {"msg":"Vps with name '%s' does Not Exist. "%instance_name}) comp_host = result[0][1] vmid = result[0][0] msg = {"status":conn_status,"id":vmid} f = urllib.urlopen("http://%s:9999"%comp_host,json.dumps(msg)) content = f.read() if "Success" in content: return (resultcode.Success, {"msg":"Success"}) else: return (resultcode.BadRequest, {"msg":content})计算节点运行服务监听端口9999,并限制只允许来自10.38.88.10的调用
iptables -A INPUT -p tcp -s 10.38.88.10 --dport 9999 -j ACCEPT
感谢各位的阅读!关于"python中云服务器集群计算节点客户机网卡状态管理的脚本示例"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
节点
客户
服务
客户机
状态
网卡
管理
中云
服务器
示例
脚本
集群
内容
更多
篇文章
不错
实用
代码
前台
功能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
在小公司做window服务器
部门网络安全核查
思安信息网络安全
sqlite怎么创造数据库
服务器开通虚拟机端口权限
永劫无间服务器在杭州吗
游戏为什么要弄那么多服务器
同花顺如何接入证券公司服务器
武大网络安全学院专业
苹果服务器一直无法连接
中国数据库最新成果
数据库redis使用教程
计算机网络技术认知实习报告
青浦区品牌软件开发收购价格
卫星通信网络技术电子书pdf
学生考试成绩管理数据库
无线电网络技术课本
宁波手机游戏软件开发怎么选
济南编程软件开发机构
总结网络安全开展情况
塔式服务器怎么装到机柜里
华工科技公司是工业互联网吗
h3c服务器开机黄灯闪烁
数据库设计规范图解
网络安全高维攻击
长城汽车的软件开发岗怎么样
职中网络技术出来多少月多少钱
软件开发的主营成本有哪些
视频管理服务器是流媒体服务器吗
网络安全哪家信誉好