コード例 #1
0
ファイル: peer_op.py プロジェクト: sun7shines/GlusterFS
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,''
コード例 #2
0
ファイル: peer_db.py プロジェクト: sun7shines/GlusterFS
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,''
コード例 #3
0
ファイル: peer_db.py プロジェクト: sun7shines/GlusterFS
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,''
コード例 #4
0
ファイル: peer_cmd.py プロジェクト: sun7shines/GlusterFS
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,''
コード例 #5
0
ファイル: volume_clr.py プロジェクト: sun7shines/GlusterFS
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, ""
コード例 #6
0
ファイル: volume_clr.py プロジェクト: sun7shines/GlusterFS
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, ""
コード例 #7
0
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,''