VI JAVA:从虚拟机获取自定义字段(名称和值)

VI JAVA: Getting Custom Fields (Names and Values) from Virtual Machines

我的虚拟机的自定义字段(名称和值)。位于“摘要”选项卡上 "annotations" 下的那些字段。不,我不需要注释 属性 本身,我确实需要自定义字段。

我通过执行 vm.getSummary.getCustomValue 设法从自定义字段获取值本身,然后将其转换为 CustomFieldStringValue 并为数组的每个自定义字段执行 .getValue

举个例子,(vmObject是我为需要抓取的字段创建的对象):

CustomFieldValue[] customFieldValue = vm.getSummary().getCustomValue();       
CustomFieldStringValue BU = (CustomFieldStringValue) customFieldValue[0];
vmObject.setBusinessUnit(BU.getValue());

我知道有 CustomFieldsManager 和 CustomFieldDef,它们都有我需要的 "name" 属性,但我不知道如何从我目前所在的位置映射到这些...

Edit/Progress: 所以我设法抓住 CustomFieldsManagerCustomFieldsDef,方法是:

ManagedObjectReference customFieldOR = si.getServiceContent().getCustomFieldsManager();
        CustomFieldsManager CFManager = new CustomFieldsManager(vm.getServerConnection(), customFieldOR);
        CustomFieldDef[] CFDef = CFManager.getField();

这样做的坏处是我需要为每个 VM 和 VM 中的自定义字段遍历 CustomFieldDef 数组... cringe

嗯,看起来迭代是可行的方法。我想好处是每次迭代都不会进行 vsphere 调用,因为我设法在一两次调用中获取了所有自定义字段:

ManagedObjectReference customFieldOR = si.getServiceContent().getCustomFieldsManager();
        CustomFieldsManager CFManager = new CustomFieldsManager(vm.getServerConnection(), customFieldOR);
        CustomFieldDef[] CFDef = CFManager.getField();

在那里,我有一个包含所有自定义字段的数组。

然后,在遍历 VM 时,我抓住了他们的 CustomFieldValue 属性,其中有密钥。从那里开始,它的映射键使用 CustomFieldDefCustomFieldValue 数组。请记住,CustomFieldStringValue 是具有自定义字段实际值的 属性 - 因此需要从 CustomFieldValue 转换为 CustomFieldStringValue

随时欢迎提出改进建议!希望这对以后的人有帮助。