2012-11-19 23 views
0

我寫的是與VMware vSphere客戶端接口的應用程序。它使用vijava庫來做到這一點。我需要使用NFS服務器的IP地址和導出目錄的名稱在主機上找到NAS數據存儲。如何找到NAS數據存儲信息在vijava

我可以在該主機上查找數據存儲,並使用HostFileSystemVolume.type找出NFS類型的數據存儲,但現在如何找到此數據存儲的NASDatastoreInfo對象。文檔很大,我沒有時間閱讀所有內容。我知道,我需要得到我已經找到了相應的數據存儲對象NASDatastoreInfo對象,但我無法弄清楚,可能會返回NASDatastoreInfo對象的任何方法。你所擁有的只是來自Datastore對象的DatastoreInfo對象。

任何幫助,將不勝感激。

謝謝... 自由自在

回答

1

你將無法得到任何有關的NAS,除非它被安裝。

我懷疑你有許多安裝在主機上的驅動器。

建議:

  1. 只要抓住所有已安裝的卷

  2. 檢查他們每個人的

  3. 簡單地忽略那些沒有它卷一個NASDataStoreInfo屬性。

0

這就是我設法做到的。該代碼看起來可能有點複雜,但這裏的要點是:

查找該主機的所有卷,發現上構建了NFS文件系統的人。對於這些卷中的每個卷,請使用卷名稱=數據存儲名稱條件迭代數據存儲列表。找到匹配項後,從DatastoreInfo對象獲取NASDatastoreInfo對象,並檢查遠程NFS服務器IP和導出目錄。

我檢查HostFileSystemVolume.type ==「NFS」該主機上的所有卷,然後檢查該卷的遠程NFS服務器IP和出口目錄。

代碼已經有一個服務實例「SI」到vCenter和HostSystem對象命名爲「主機」

 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);