当我调用VMware vCenter REST API创建磁盘时,为什么失败的消息'有一个不允许这种情况的字段的联合'

时间:2018-04-18 02:36:52

标签: vmware vsphere vcenter

当我调用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”

感谢您的任何建议。

1 个答案:

答案 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默认类型。)