如何在vijava中查找NAS数据存储信息

时间:2012-11-19 01:33:57

标签: vmware vsphere

我正在编写一个与VMWare vSphere客户端连接的应用程序。它使用vijava库来实现。我需要使用NFS服务器的IP地址和导出目录的名称在主机上找到NAS数据存储区。

我可以使用HostFileSystemVolume.type查找该主机上的数据存储并查找NFS类型的数据存储,但是如何找到此数据存储的NASDatastoreInfo对象。文档很广泛,我还没有时间阅读它。我知道我需要为我找到的相应数据存储对象获取NASDatastoreInfo对象,但是我无法弄清楚任何可能返回NASDatastoreInfo对象的方法。您所拥有的只是来自数据存储对象的DatastoreInfo对象。

任何帮助都将不胜感激。

...谢谢 自由自在

2 个答案:

答案 0 :(得分:1)

除非已安装,否则您无法获取有关NAS的任何卷信息。

我怀疑你的主机上安装了那么多驱动器。

建议:

  1. 抓住所有已安装的卷

  2. 检查每个属性上的NASDataStoreInfo属性

  3. 只需忽略没有它的卷。

答案 1 :(得分:0)

这就是我设法做到的。代码可能看起来有点复杂,但这是要点:

查找此主机的所有卷,并找到在其上构建NFS文件系统的卷。对于每个卷,使用卷名称=数据存储名称条件迭代数据存储列表。找到匹配项后,从DatastoreInfo对象获取NASDatastoreInfo对象,并检查远程NFS服务器IP和导出目录。

我检查了此主机上所有卷的HostFileSystemVolume.type =='NFS',然后检查该卷的远程NFS服务器IP和导出目录。

代码已经有一个服务实例'si'到vCenter和一个名为'host'的

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