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

时间:2017-11-02 20:47:28

标签: java api sdk vmware vsphere

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

我已经通过vm.getSummary.getCustomValue设置了自定义字段中的值本身,然后将其转换为CustomFieldStringValue并为数组的每个自定义字段执行.getValue

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

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

我知道有CustomFieldsManager和CustomFieldDef,它们都有我需要的“名称”属性,我不知道的是如何从我目前所处的位置映射到这些...

编辑/进度: 所以我设法抓住了CustomFieldsManagerCustomFieldsDef

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

关于这一点的坏处是,我需要为VM中的每个VM和自定义字段迭代CustomFieldDef数组... cringe

1 个答案:

答案 0 :(得分:0)

好吧,看起来迭代是要走的路。我认为好处是每次迭代都没有进行vsphere调用,因为我设法在一次或两次调用时获取所有自定义字段:

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

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

然后,在迭代虚拟机时,我抓住了他们的CustomFieldValue属性,其中包含密钥。从那时起,它使用CustomFieldDefCustomFieldValue数组映射键。请记住,CustomFieldStringValue是具有自定义字段的实际值的属性 - 因此需要从CustomFieldValue转换为CustomFieldStringValue

随时欢迎建议的改进!希望这有助于未来的人们。