vSphere6.0 中数据存储的 searchManagedEntity returns null :VIjava

searchManagedEntity for Datastore in vSphere6.0 returns null :VIjava

我使用 vijava5.5 创建了 vCenter 6.0 的 serviceInstance

当我尝试使用 SerachManagedEntity 获取数据存储的属性时,即使对于可用的数据存储,我也收到空响应

数据存储 ds = (数据存储) new InventoryNavigator(rootFolder).searchManagedEntity("Datastore", "scsi_10_3");

ds 为空 http://prntscr.com/6izkxi

但数据存储在 vCenter 中可用 http://prntscr.com/6izl1b

可能是什么问题,它在 vCenter 5.5 中正常工作

我希望你不能从库存中获得 "DataStore"。它只能从 HostSystem 获取。从 HostSystem 中,您可以获得所有 DataStores。从中你可以迭代并得到它。

问题是因为您正在做的事情使用了 InventoryNavigator + VIJAVA + vSphere 6.0。如果您使用的是 vijava 5.5 beta 或之前发布的任何版本,则硬编码为查找 API 的版本 4 或 5 以加载 InventoryNavigator 的正确库存路径。我建议使用 YAVIJAVA,它是我创建和维护的 VIJAVA 的一个分支。我在版本 5.5.10 中修复了该错误,它目前在 GitHub 中可用,并且从今天起已发布到 public Maven。

如果您使用 GitHub 版本,您将需要

gradle build

如果您想使用 Maven,它可能需要几个小时才能同步到中央存储库。

仅供参考,但您使用的 vijava 版本还有另一个错误,它只会抛出 RemoteException。我也在 YAVIJAVA 中修复了这个问题。我还添加了日志记录。如果您查看 6.0 branch.

,官方 6.0 支持也在积极进行中

如果您必须通过 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 肯定更好,让你的生活更轻松。

您可以通过以下方式从 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();

看看这个。