def create_peer(param): #没有错误返回,如果增加错误返回可以添加新的事件 #检查主机,是否包含gluster cluster信息 gluster_ip = param.get('gluster_ip') operation.gluster.volume_clr.clear_peer_cfgs() flag,sysid = operation.gluster.volume_ifo.getsysid() if flag: operation.gluster.peer_db.insert_peer(sysid,gluster_ip) target_ip = param.get('target_ip') if target_ip and target_ip != 'None': (flag, psh) = vmd_utils.get_rpcConnection(target_ip) if not flag: return False,psh flag,msg = psh.do_probe_peer(gluster_ip) if not flag: return False,msg cmd = "echo '%s' > /var/lib/glusterd/glfs_ip" % (gluster_ip) os.system(cmd) return True,''
def check_glfs_ip(hostip,glusterip,dcuuid): # 在vcenter端执行 dcobj = db_get('datacenters',{'uuid':dcuuid}) if not dcobj: return True,'' hobjs = db_values('hosts',{'datacenter_id':dcobj['id']}) if not hobjs: return True,'' try: (flag, psh) = vmd_utils.get_rpcConnection(hostip) if not flag: return False,'vserver rpc failed' (netmask) = psh.do_web_get_netmask({"host_ip":glusterip}) if not netmask: return False,'get glusterip netmask failed' except: return False,'get glusterip netmask failed' for hobj in hobjs: if hobj['host_ip'] == hostip: continue pobj = db_get('glusterpeer',{'host_id':hobj['id']}) if not pobj: continue glusterip1 = pobj['glusterip'] netmask1 = operation.vcluster.cluster_db_op.get_netmask_by_ip(glusterip1) if netmask1: if get_ip_seg(glusterip1, netmask1) != get_ip_seg(glusterip, netmask): return False,'glusterfs network segment error' return True,''
def get_available_peer_target_ip(dcuuid,host_ip,vc_uuid=None,vc_ip=None): #只在vcneter端执行 module_object = dbmodule.db_module_interface.DbMessageObject(db_name='hosts') if vc_ip: module_object.ip_d = vc_ip module_object.message['field1'] = {'datacenter':{'db_name':'datacenters','field':{'uuid':dcuuid}}} flag,msg = module_object.select_by_fkey() if not flag: return False,'' if not msg: return True,'' for x in msg: if x['host_ip'] == host_ip: continue target_ip = x['host_ip'] (flag, psh) = vmd_utils.get_rpcConnection(target_ip) if not flag: continue output = system.network.sent_rpc.sent_rpc_getret(psh, "do_web_get_vserver_baseinfo") if ("flag" not in output) or (not output["flag"]): continue if "yes" == output["param"]["vCenter"]: return True,target_ip return False,''
def detach_peer(target_ip,host_ip): try: (flag, psh) = vmd_utils.get_rpcConnection(target_ip) if not flag: return False,psh flag,msg = psh.do_detach_peer(host_ip) if not flag: return False,msg except: syslog.syslog(syslog.LOG_ERR,'detach_peer '+str(traceback.format_exc())) return True,''
def gluster_reset_rbstate(volume_descs): # 是否只重启一个机器的服务就可以?? _, states = operation.gluster.peer_cmd.get_peer_states() _, states = operation.gluster.peer_db.convert_to_target_states(states) for target_ip, conn_state, peer_state in states: if conn_state == "Connected" and peer_state == "Peer in Cluster": try: (flag, psh) = vmd_utils.get_rpcConnection(target_ip) if not flag: continue psh.do_stop_gluster() except: syslog.syslog(syslog.LOG_ERR, "glsuter rpc " + str(traceback.format_exc())) return False, "rpc stop %s gluster service failed" % (target_ip) operation.gluster.volume_sys.do_stop_gluster() try: do_clear_rbstate(volume_descs) except: syslog.syslog(syslog.LOG_ERR, "cleare rbstate: " + str(traceback.format_exc())) operation.gluster.volume_sys.do_restart_gluster() for target_ip, conn_state, peer_state in states: if conn_state == "Connected" and peer_state == "Peer in Cluster": try: (flag, psh) = vmd_utils.get_rpcConnection(target_ip) if not flag: continue psh.do_clear_rbstate(volume_descs) except: syslog.syslog(syslog.LOG_ERR, "glsuter rpc " + str(traceback.format_exc())) finally: psh.do_restart_gluster() return True, ""
def delete_brick_attr(bricks, delete=False): for brick in bricks: try: target_ip = brick["target_ip"] storage_path = brick["storage_path"] (flag, psh) = vmd_utils.get_rpcConnection(target_ip) if not flag: continue psh.do_clear_path_attr(storage_path, delete) except: syslog.syslog(syslog.LOG_ERR, "gluster clear path attr failed: " + str(target_ip) + " " + storage_path) syslog.syslog(syslog.LOG_ERR, "gluster clear path attr failed: " + str(traceback.format_exc())) return True, ""
def gluster_replace_brick(volume_desc,brick_info,new_brick): host_ip = system.network.dns_service_op.get_localhost_ip() operation.gluster.volume_sys.do_stop_gluster() flag = True try: if host_ip == brick_info['peer_ip']: operation.gluster.volume_clr.do_clear_brick(volume_desc,brick_info['peer_ip'],brick_info['storage_path']) else: #target_ip = brick_info['peer_ip'] target_ip = brick_info['target_ip'] (flag, psh) = vmd_utils.get_rpcConnection(target_ip) if flag: psh.do_clear_brick(volume_desc,brick_info['peer_ip'],brick_info['storage_path']) except: syslog.syslog(syslog.LOG_ERR,'gluster replace brick '+str(traceback.format_exc())) try: do_gluster_replace_brick(volume_desc,brick_info['peer_ip'],brick_info['storage_path'],new_brick['peer_ip'],new_brick['storage_path']) new_dir = '%s/glusterfs_storage' % (new_brick['storage_path']) cmd = "(vol=%s; brick=%s; setfattr -n trusted.glusterfs.volume-id -v 0x$(grep volume-id \ /var/lib/glusterd/vols/$vol/info | cut -d= -f2 | sed 's/-//g') $brick) " % (volume_desc,new_dir) os.system(cmd) # rb_dst_brick.vol operation.gluster.volume_cfg.rewrite_rb_dst_brick(volume_desc,new_brick) except: syslog.syslog(syslog.LOG_ERR,'gluster replace brick '+str(traceback.format_exc())) flag = False operation.gluster.volume_sys.do_restart_gluster() if not flag: return False,'gluster replace brick failed,check the messages log' return True,''