2012-11-19 3 views
0

VMWare vSphere 클라이언트와 인터페이스하는 응용 프로그램을 작성 중입니다. 그렇게하기 위해 vijava 라이브러리를 사용합니다. NFS 서버의 IP 주소와 내보내기 디렉토리의 이름을 사용하는 호스트에서 NAS 데이터 저장소를 찾아야합니다.vijava에서 NAS Datastore 정보를 찾는 방법

HostFileSystemVolume.type을 사용하여 해당 호스트에서 데이터 저장소를 검색하고 NFS 유형 인 데이터 스토어를 찾을 수 있지만이 Datastore에 대한 NASDatastoreInfo 개체는 어떻게 찾을 수 있습니까? 문서가 방대하고 읽을 시간이별로 없습니다. 발견 한 해당 Datastore 객체에 대해 NASDatastoreInfo 객체를 가져와야하지만 NASDatastoreInfo 객체를 반환 할 수있는 메서드를 찾을 수 없다는 것을 알고 있습니다. Datastore 객체에서 오는 DatastoreInfo 객체 만 있으면됩니다.

도움을 주시면 감사하겠습니다.

덕분에 ... 는

답변

1

당신은이 장착 된 않는 NAS에 대한 어떤 볼륨 정보를 얻을 수 없을 것를 가고 싶은 곳에 갈.

호스트에 마운트 된 드라이브가 많을 것으로 생각됩니다.

는 SUGGESTION :

  1. 그냥 모든 마운트 된 볼륨

  2. 그들 각각

  3. 단순히이없는 볼륨을 무시에 NASDataStoreInfo 속성에 대한 확인을 잡아.

0

이것은 내가 처리 한 방법입니다. 코드가 조금 복잡해 보일 수도 있지만 요점은 다음과 같습니다.

이 호스트의 모든 볼륨을 검색하여 NFS 파일 시스템이 내장 된 볼륨을 찾습니다. 이 볼륨 각각에 대해 볼륨 이름 = 데이터 저장소 이름 조건으로 Datastore 목록을 반복합니다. 일치하는 항목을 찾으면 DatastoreInfo 개체에서 NASDatastoreInfo 개체를 가져 와서 원격 NFS 서버 IP 및 내보내기 디렉터리를 확인합니다.

이 호스트의 모든 볼륨에 대해 HostFileSystemVolume.type == 'NFS'를 확인한 다음 해당 볼륨의 원격 NFS 서버 IP 및 내보내기 디렉토리를 확인하십시오.

코드는 이미 '호스트'

 HostDatastoreSystem hds = host.getHostDatastoreSystem(); 
    HostDatastoreBrowser hdb = host.getDatastoreBrowser(); 
    Datastore[] allDS = hdb.getDatastores(); 
    HostConfigInfo hostConfigInfo = host.getConfig(); 
    HostFileSystemVolumeInfo hostFSVolumeInfo = hostConfigInfo.getFileSystemVolume(); 
    HostFileSystemMountInfo[] hostFSMountInfo= hostFSVolumeInfo.getMountInfo(); 
    for (HostFileSystemMountInfo hfsmi : hostFSMountInfo) { 
     HostFileSystemVolume hfsv = hfsmi.getVolume(); 
     if (hfsv.getType().equalsIgnoreCase("nfs")){ 
      String dsName = hfsv.getName(); 
      for(Datastore ds: allDS) { 
       DatastoreInfo di = ds.getInfo(); 
       if (di.getName().equals(dsName)){ 
        HostNasVolume nas = ((NasDatastoreInfo)di).getNas(); 
        if (nas.getRemoteHost().equals(nfsServer) & nas.getRemotePath().equals(datastorePathOnNfsServer)) { 
         try { 
         } catch (HostConfigFault e) { 
          logger.error("ERROR : unmountNfsDatastore : Could not remove Datastore named: " + ds.getName() + " on " + "host: " + hostname , e); 
          ret = 1; 
          return ret; 
         } catch (ResourceInUse e) { 
          logger.error("ERROR : unmountNfsDatastore : Could not remove Datastore named: " + ds.getName() + " on " + "host: " + hostname , e); 
          ret = 1; 
          return ret; 
         } catch (NotFound e) { 
          logger.error("ERROR : unmountNfsDatastore : Could not remove Datastore named: " + ds.getName() + " on " + "host: " + hostname , e); 
          ret = 1; 
          return ret; 
         } catch (RuntimeFault e) { 
          logger.error("ERROR : unmountNfsDatastore : Could not remove Datastore named: " + ds.getName() + " on " + "host: " + hostname , e); 
          ret = 1; 
          return ret; 
         } catch (RemoteException e) { 
          logger.error("ERROR : unmountNfsDatastore : Could not remove Datastore named: " + ds.getName() + " on " + "host: " + hostname , e); 
          ret = 1; 
          return ret; 
         } 
         return 0; 
        } 
       } 
      } 
     } 
    } 
    logger.error("ERROR : unmountNfsDatastore : Could not find Datastore exported by " + nfsServer + " on " + "host: " + hostname); 
    ret = 0; 
    return ret; 
          hds.removeDatastore(ds); 
라는 VCENTER에 서비스 인스턴스 '시'와 HostSystem 개체가 있습니다
관련 문제