为什么';s失败,消息为';具有此情况下不允许的字段的并集';当我调用VMware vCenter REST API创建磁盘时
当我调用VMware vCenter rest api为vm创建磁盘时,api响应包含一个错误体: 请求: 方法:发布 路径:rest/vcenter/vm/vm-xxxxx/hardware/disk 标题:内容类型:应用程序/json接受:应用程序/json vmware api会话id:xxxxxxxxx 正文: { } 答复: 状态:400 正文: { } 调用api有什么问题?我还尝试了键入“IDE”,也报告“sata”,或者键入“sata”,报告“scsi”为什么';s失败,消息为';具有此情况下不允许的字段的并集';当我调用VMware vCenter REST API创建磁盘时,vmware,vsphere,vcenter,Vmware,Vsphere,Vcenter,当我调用VMware vCenter rest api为vm创建磁盘时,api响应包含一个错误体: 请求: 方法:发布 路径:rest/vcenter/vm/vm-xxxxx/hardware/disk 标题:内容类型:应用程序/json接受:应用程序/json vmware api会话id:xxxxxxxxx 正文: { } 答复: 状态:400 正文: { } 调用api有什么问题?我还尝试了键入“IDE”,也报告“sata”,或者键入“sata”,报告“scsi” 谢谢你的建议。我找到了这
谢谢你的建议。我找到了这个问题的根本原因: 在响应中,它报告“Structure com.vmware.vcenter.vm.hardware.disk.create_spec有一个union,该字段不允许用于此情况” 当我们将“SCSI”、“SATA”、“IDE”指定给“type”时,消息是相同的。 这是因为“com.vmware.vcenter.vm.hardware.disk.create_spec”的定义有一个union结构,该结构由union“SCSI”、“SATA”、“IDE”组成 因此,json主体中只允许存在这3个结构中的一个,例如:
{
"spec":{
"ide":{
"primary":true,
"master":true
},
"type":"IDE",
"new_vmdk":{
"name":"Hard disk 4",
"capacity":1073741824
}
}
}
或:
(3 struct部分都是可选的,因此只有提供类型,new_vmdk将创建新磁盘。即使类型也是可选的,vcenter也将使用来宾默认类型。)实际上,您的问题是总线ID的问题
"type": "com.vmware.vapi.std.errors.invalid_argument",
"value": {
"messages": [
{
"args": [
"com.vmware.vcenter.vm.hardware.disk.create_spec",
"sata"
],
"default_message": "Structure com.vmware.vcenter.vm.hardware.disk.create_spec has a union with a field not allowed for this case: sata",
"id": "vapi.data.structure.union.extra"
}
]
}
{
"spec":{
"ide":{
"primary":true,
"master":true
},
"type":"IDE",
"new_vmdk":{
"name":"Hard disk 4",
"capacity":1073741824
}
}
}
{
"spec":{
"type":"SCSI",
"new_vmdk":{
"name":"Hard disk 4",
"capacity":1073741824
}
}
}