我的虚拟机的自定义字段(名称和值)。位于“摘要”选项卡上“注释”下的那些字段。不,我不需要注释属性本身,我确实需要自定义字段。
我已经通过vm.getSummary.getCustomValue
设置了自定义字段中的值本身,然后将其转换为CustomFieldStringValue
并为数组的每个自定义字段执行.getValue
。
这是一个例子,(vmObject
是我为我需要抓取的字段创建的对象):
CustomFieldValue[] customFieldValue = vm.getSummary().getCustomValue();
CustomFieldStringValue BU = (CustomFieldStringValue) customFieldValue[0];
vmObject.setBusinessUnit(BU.getValue());
我知道有CustomFieldsManager和CustomFieldDef,它们都有我需要的“名称”属性,我不知道的是如何从我目前所处的位置映射到这些...
编辑/进度:
所以我设法抓住了CustomFieldsManager
和CustomFieldsDef
:
ManagedObjectReference customFieldOR = si.getServiceContent().getCustomFieldsManager();
CustomFieldsManager CFManager = new CustomFieldsManager(vm.getServerConnection(), customFieldOR);
CustomFieldDef[] CFDef = CFManager.getField();
关于这一点的坏处是,我需要为VM中的每个VM和自定义字段迭代CustomFieldDef
数组... cringe
答案 0 :(得分:0)
好吧,看起来迭代是要走的路。我认为好处是每次迭代都没有进行vsphere调用,因为我设法在一次或两次调用时获取所有自定义字段:
ManagedObjectReference customFieldOR = si.getServiceContent().getCustomFieldsManager();
CustomFieldsManager CFManager = new CustomFieldsManager(vm.getServerConnection(), customFieldOR);
CustomFieldDef[] CFDef = CFManager.getField();
在那里,我有一个包含所有自定义字段的数组。
然后,在迭代虚拟机时,我抓住了他们的CustomFieldValue
属性,其中包含密钥。从那时起,它使用CustomFieldDef
和CustomFieldValue
数组映射键。请记住,CustomFieldStringValue是具有自定义字段的实际值的属性 - 因此需要从CustomFieldValue
转换为CustomFieldStringValue
。
随时欢迎建议的改进!希望这有助于未来的人们。