当我调用VMware vCenter rest api为vm创建磁盘时,带有错误正文的api响应:
请求:
方法:POST 路径:rest / vcenter / vm / vm-xxxxx / hardware / disk 标题:content-type:application / json accept:application / json vmware-api-session-id:xxxxxxxxx 的体: {
"spec": {
"backing": {
"type": ""
},
"ide": {
"master": true,
"primary": true
},
"new_vmdk": {
"capacity": 1073741824,
"name": "Hard disk 2"
},
"sata": {
"bus": 0,
"unit": 0
},
"scsi": {
"bus": 0,
"unit": 0
},
"type": "SCSI"
}
}
响应: 状态:400 的体: {
"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"
}
]
}
}
我打电话到api有什么问题?我也尝试输入:“IDE”,报告“sata”,或输入:“SATA”,报告“scsi”
感谢您的任何建议。
答案 0 :(得分:0)
嗯,我找到了这个问题的根本原因:
在回复中,它报告“结构com.vmware.vcenter.vm.hardware.disk.create_spec有一个带有一个不允许这个案例的字段的联合” 当我们将“SCSI”,“SATA”,“IDE”分配给“type”时,消息是相同的。 这是因为“com.vmware.vcenter.vm.hardware.disk.create_spec”的定义有一个联合结构,它结合了“SCSI”,“SATA”,“IDE”。
因此,只允许json主体中存在这3个结构中的一个,例如:
{
"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
}
}
}
(3个struct部分都是可选的,所以只提供type和new_vmdk会创建新磁盘。甚至,type也是可选的,vcenter会使用guest默认类型。)