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:
所以我设法抓住 CustomFieldsManager
和 CustomFieldsDef
,方法是:
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
属性,其中有密钥。从那里开始,它的映射键使用 CustomFieldDef
和 CustomFieldValue
数组。请记住,CustomFieldStringValue 是具有自定义字段实际值的 属性 - 因此需要从 CustomFieldValue
转换为 CustomFieldStringValue
。
随时欢迎提出改进建议!希望这对以后的人有帮助。
我的虚拟机的自定义字段(名称和值)。位于“摘要”选项卡上 "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:
所以我设法抓住 CustomFieldsManager
和 CustomFieldsDef
,方法是:
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
属性,其中有密钥。从那里开始,它的映射键使用 CustomFieldDef
和 CustomFieldValue
数组。请记住,CustomFieldStringValue 是具有自定义字段实际值的 属性 - 因此需要从 CustomFieldValue
转换为 CustomFieldStringValue
。
随时欢迎提出改进建议!希望这对以后的人有帮助。