vSphere6.0中的searchManagedEntity for Datastore返回null:VIjava

时间:2015-03-20 05:39:44

标签: sdk vmware vcenter

我使用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中正常运行

4 个答案:

答案 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。从那里你可以迭代并获得它。