我正在编写一个与VMWare vSphere客户端连接的应用程序。它使用vijava库来实现。我需要使用NFS服务器的IP地址和导出目录的名称在主机上找到NAS数据存储区。
我可以使用HostFileSystemVolume.type查找该主机上的数据存储并查找NFS类型的数据存储,但是如何找到此数据存储的NASDatastoreInfo对象。文档很广泛,我还没有时间阅读它。我知道我需要为我找到的相应数据存储对象获取NASDatastoreInfo对象,但是我无法弄清楚任何可能返回NASDatastoreInfo对象的方法。您所拥有的只是来自数据存储对象的DatastoreInfo对象。
任何帮助都将不胜感激。
...谢谢 自由自在
答案 0 :(得分:1)
除非已安装,否则您无法获取有关NAS的任何卷信息。
我怀疑你的主机上安装了那么多驱动器。
建议:
抓住所有已安装的卷
检查每个属性上的NASDataStoreInfo属性
只需忽略没有它的卷。
答案 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);