我使用vijava5.5
创建了vCenter 6.0的serviceInstance当我尝试使用SerachManagedEntity获取数据存储区的属性时,即使对于可用的数据存储区也会获得空响应
Datastore ds =(Datastore)new InventoryNavigator(rootFolder).searchManagedEntity(“Datastore”,“scsi_10_3”);
ds为null http://prntscr.com/6izkxi
但是数据存储区可在vCenter http://prntscr.com/6izl1b
中使用可能是什么问题,它在vCenter 5.5中正常运行
答案 0 :(得分:4)
问题在于您所做的事情使用InventoryNavigator + VIJAVA + vSphere 6.0。如果您使用的是vijava 5.5 beta或之前发布的任何版本,则硬编码查找API的版本4或5以加载InventoryNavigator的正确库存路径。我建议使用YAVIJAVA它是我创建和维护的VIJAVA的一个分支。我修复了5.5.10版本中的错误,它目前在GitHub中可用,并且已经发布到今天的公共Maven。
如果您使用GitHub版本,则需要
gradle build
如果您想使用Maven,它可能需要几个小时才会同步到中央回购。
只是一个FYI,但你使用的vijava版本还有另一个错误,它只会抛出RemoteException。我也在YAVIJAVA中解决了这个问题。我也添加了日志记录。如果您查看6.0 branch。
,也正在积极开展官方6.0支持答案 1 :(得分:1)
如果您必须通过vijava 5.1从vSphere 6.0获取DataStore和StoragePod,但没有InventoryNavigator,那么您可以通过'Datacenter对象获得。
ManagedEntity[] meArr = rootFolder.getChildEntity();
for (ManagedEntity me : meArr) {
if (me instanceof Datacenter) {
Datacenter dc = (Datacenter) me;
// All datastores related to the Datacenter
Datastore[] dsArr = dc.getDatastores();
// You can also get StoragePod
StoragePod sp = (StoragePod) ds.getParent();
}
}
当然,这是非常不优化的方式,只有在你不想因某些原因使用yavijava时才能使用。否则yavijava肯定会更好,让你的生活变得轻松。
答案 2 :(得分:0)
您可以从InventoryNavigator以下列方式获取数据存储区。
摘录:
ServiceInstance si = new ServiceInstance(new URL("https://" + hostname + "/sdk/"), username, password, true);
InventoryNavigator invNav = new InventoryNavigator(si.getRootFolder());
ManagedEntity[] mes = invNav.searchManagedEntities("HostSystem");
HostSystem hostSystem = (HostSystem)mes[0];
HostDatastoreSystem hds = hostSystem.getHostDatastoreSystem();
datastores = hds.getDatastores();
检查一下。
答案 3 :(得分:-1)
我希望你不能从库存中获得“DataStore”。它只能从HostSystem获取。从HostSystem,您可以获取所有DataStore。从那里你可以迭代并获得它。