Почему это не удалось с сообщением «имеет объединение с полем, не разрешенным для этого случая», когда я вызываю VMware vCenter REST API для создания диска

Когда я вызываю VMware vCenter rest API для создания диска для виртуальной машины, ответ API с телом ошибки:

Запрос:

метод: POST Путь: rest/vcenter/vm/vm-xxxxx/hardware/disk Заголовки: content-type:application/json accept: application/json vmware-api-session-id:xxxxxxxxx Body: {

"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».

Спасибо за любой совет.


person andrewz    schedule 18.04.2018    source источник
comment
На самом деле ваша проблема заключается в идентификаторе шины   -  person    schedule 03.05.2018


Ответы (1)


Ну, я получил основную причину этой проблемы:

В ответ он сообщает: «Структура com.vmware.vcenter.vm.hardware.disk.create_spec имеет объединение с полем, не разрешенным для этого случая». Сообщение такое же, когда мы назначаем «SCSI», «SATA», «IDE " печатать". Это связано с тем, что определение «com.vmware.vcenter.vm.hardware.disk.create_spec» имеет структуру объединения, которая объединяет «SCSI», «SATA», «IDE».

Таким образом, в теле json допускается только одна из этих трех структур, например:

{
    "spec":{
        "ide":{
            "primary":true,
            "master":true
        },
        "type":"IDE",
        "new_vmdk":{
            "name":"Hard disk 4",
            "capacity":1073741824
        }
    }
}

Or:

{
    "spec":{
        "type":"SCSI",
        "new_vmdk":{
            "name":"Hard disk 4",
            "capacity":1073741824
        }
    }
}

(Все 3 части структуры являются необязательными, поэтому укажите только тип, а new_vmdk создаст новый диск. Даже тип также является необязательным, vcenter будет использовать гостевой тип по умолчанию.)

person Andrew Zong    schedule 20.04.2018