VCenter: REST API: как загрузить ova в библиотеку содержимого

Я пытаюсь создать виртуальную машину из ova с помощью REST API. Я могу сделать это с помощью этого Rest API:

https://vcenter_ip/rest/com/vmware/vcenter/ovf/library-item/id:<library_item_id_ie_ova_item>?~action=deploy

Для этого я загрузил яйцеклетку через клиент VSphere. (Библиотека содержимого-> Выбрать библиотеку -> Импортировать элемент-> Выбрать файл .ovf из локального -> (предлагает выбрать справочные файлы) выбрать зависимый .vmdk из локального)

Но я хочу выполнить загрузку через Rest API.

Я сделал следующие шаги:

  1. Создать библиотеку

URL: https: // vcenter_ip / rest / com / vmware / content / local-library

Method: POST
Headers:
   Key:Content-Type 
   value: application/json
Request Body:
{
    "create_spec": {
        "name": "CL1",
        "description": "CL1 Desc",
        "publish_info": {
            "authentication_method": "NONE",
            "persist_json_enabled": false,
            "published": false
        },
        "storage_backings": [
            {
                "datastore_id": "datastore-144",
                "type": "DATASTORE"
            }
        ],
        "type": "LOCAL"
    }
}
  1. Создать элемент библиотеки

URL: https: // vcenter_ip / rest / com / vmware / content / library / item

Method: POST
Headers:
   Key:Content-Type 
   value: application/json

Request Body:
{
  "create_spec": {
    "library_id": "<library_id",
    "description": "mydesc",
    "name": "Damn Small Linux",
    "type": "ovf"
  }
}
  1. Создать новую сессию обновления

URL: https://vcenter_ip/rest/com/vmware/content/library/item/update-session

Method: POST
Headers:
   Key:Content-Type 
   value: application/json

Request Body:
{
  "create_spec":{
  "library_item_id": "<lib_item_id>"
  }
}

Response:
{
  "value": "26f143a2-fb9d-4ed9-bd5f-c7be5825ee37:ec4f8df0-249f-4887-ab84-0933f86e106c"
}

Затем я пытаюсь загрузить файлы в элемент библиотеки содержимого, и здесь у меня возникают проблемы.

  1. Чтобы загрузить ovf

4 (а). запросить конечную точку для загрузки файла .ovf

URL: https://vcenter_ip/rest/com/vmware/content/library/item/updatesession/file/id:f539fb7e-af8f-4cc8-ad66-cdcbd80f5dc4%3Aec4f8df0-249f-4887-ab84c33f86e10?~action=add

Method: POST
Headers:
   Key:Content-Type 
   value: application/json
   Key:update_session_id    
   value: 26f143a2-fb9d-4ed9-bd5f-c7be5825ee37:ec4f8df0-249f-4887-ab84-0933f86e106c

{
  "file_spec": {
    "source_type": "PUSH",
    "name": "Damn Small Linux.ovf",
    "size": 9
  }
}

Тело ответа:

{
  "value": {
    "bytes_transferred": 0,
    "upload_endpoint": {
      "uri": "https://<vcenter_ip>:443/cls/data/1a5129a1-87e8-4650-855d-9041c493c475/Damn%20Small%20Linux.ovf"
    },
    "name": "Damn Small Linux.ovf",
    "source_type": "PUSH",
    "status": "WAITING_FOR_TRANSFER"
  }
}

4 (б). Загрузка в этот URI с запросом на размещение с файлом, загруженным как данные многостраничной формы (я сделал это с почтальоном - остальные вызовы я сделал через Vcenter api explorer)

введите описание изображения здесь

4 (в). Проверить файл в сеансе обновления

URL: https://vcenter_ip/rest/com/vmware/content/library/item/updatesession/file/id:26f143a2-fb9d-4ed9-bd5f-c7be5825ee37%3Aec4f8df0-249f-4887-ab84-0933f86e106c?~action=validate
Method: POST
Headers:
   Key:Content-Type 
   value: application/json
   Key:update_session_id    
   value: 26f143a2-fb9d-4ed9-bd5f-c7be5825ee37:ec4f8df0-249f-4887-ab84-0933f86e106c

Response Body: 
{
  "value": {
    "has_errors": true,
    "invalid_files": [
      {
        "error_message": {
          "args": [
            "Damn Small Linux.ovf",
            "1:1:PARSE_ERROR: Parse error: Unexpected character '-' (code 45) in prolog; expected '<'\r\n at [row,col {unknown-source}]: [1,1].\r\n"
          ],
          "default_message": "File Damn Small Linux.ovf was considered invalid. Reason: 1:1:PARSE_ERROR: Parse error: Unexpected character '-' (code 45) in prolog; expected '<'\r\n at [row,col {unknown-source}]: [1,1].\r\n.",
          "id": "com.vmware.vdcs.cls-main.update_session_file_validation"
        },
        "name": "Damn Small Linux.ovf"
      }
    ],
    "missing_files": []
  }
}

Но это тот же файл, который я загрузил при успешной загрузке через клиент vsphere.

В чем проблема? И как мне после этого загрузить ссылку .vmdk?


person Deepa    schedule 28.04.2017    source источник


Ответы (1)


Это старый вопрос, но я дам ответ на тот случай, если кто-то столкнется с этим:

Чтобы это работало, в вашей загрузке данных PUT требуются две настройки:

  1. Установить заголовки Content-Type как application/octet-stream
  2. В разделе body убедитесь, что вы выбрали двоичный для вашего (ovf) файла.
person NuSkooler    schedule 18.12.2017
comment
Не могли бы вы объяснить, что означает второй пункт, и что jiwni может этого достичь? - person LearningPhase; 10.12.2018
comment
@LearningPhase Я не совсем понимаю, о чем вы здесь спрашиваете. Это RE с использованием Postman и используемой конфигурации. Если программно, важно установить правильный Content-Type. - person NuSkooler; 13.12.2018