From e8fc25a7f4f549f336f907c9c65b6954f6525f98 Mon Sep 17 00:00:00 2001 From: Bo Chen Date: Tue, 7 Apr 2020 18:09:12 -0700 Subject: [PATCH] version: Update clh to master Upgrade the version of clh to the upstream master, so that we have can boot from pmem, and have the support for virtio-blk and virtio-pmem hotplug. Changes: a8ec8f33 build(deps): bump hermit-abi from 0.1.10 to 0.1.11 6cc8248a build(deps): bump num_cpus from 1.12.0 to 1.13.0 8ff36337 vm-virtio: pci: Update the BARs used by the VirtioPciDevice 56207a03 pci: Print out details of the BAR moving upon error a216c2eb vm-virtio: pci: Implement free_bars() for VirtioPciDevice 72fdfff1 vmm: device_manager: Remove unused "_mmap_regions" member 70ecd6ba vmm, virtio: fs: Move freeing of mappped region into device 0c6706a5 vmm, virtio: pmem: Move freeing of mappped region into device 6565e478 vhost_user_net: Enable multithreaded multiqueue support 1a0a2c01 vhost_user_backend: Provide the thread ID to handle_event() cfffb7ed vhost_user_backend: Allow for one exit_event per thread b927dcee vhost_user_net: Prepare for multithreaded support cd2b03f6 vhost_user_backend: Return a list of vring workers d9eec0de vhost_user_backend: Add the ability to start multiple threads 40e4dc63 vhost_user_backend: Change handle_event as immutable 8f434df1 vhost_user: Adapt backends to let handle_event be immutable b1554642 vmm: seccomp: Add missing mremap() syscall 886c0f90 build(deps): bump libc from 0.2.68 to 0.2.69 6c164c76 build(deps): bump thiserror from 1.0.14 to 1.0.15 0071ac8c build(deps): bump parking_lot from 0.10.0 to 0.10.2 2b7fbcb9 build(deps): bump lock_api from 0.3.3 to 0.3.4 d1155c7c build(deps): bump parking_lot_core from 0.7.0 to 0.7.1 28abfa9d vmm: openapi: Mark "initramfs" field nullable c260640f vmm: config: Use Default::default() value for initramfs field 4617aefd tests: Test initramfs loading with PVH boot 7134f312 vmm: Allow PVH boot with initramfs 0fc39364 arch: Support loading initramfs with PVH boot protocol b9f19370 build(deps): bump smallvec from 1.2.0 to 1.3.0 2d3f518c vmm: config: Error if both socket and path are specified for a disk eeb7e252 vmm: config: Move max vCPUs > boot vCPUs check to validate() 12edb246 vmm: config: Validate that serial/console file mode has a path 31928fb1 main: Consistently use eprintln!() for error messages 11dd609f main: Only try and parse VM options on VM boot path aaf382ee vmm: Move kernel check to VmConfig::validate() method 3b0da2d8 vmm: vm: Validate configuration on API boot 99b2ada4 vmm: Start splitting configuration parsing and validation 0ea706fa vmm: openapi: Update OpenAPI definition with RestoreConfig 8d9d2243 vmm: Add "prefault" option when restoring a517ca23 vmm: Move restore parameters into common RestoreConfig structure 6712958f vmm: memory: Add prefault option when creating region b2cdee80 vmm: memory: Restore with Copy-on-Write when possible d771223b vmm: memory: Extend new() to support external backing files ee5a041a vmm: memory: Add Copy-on-Write parameter when creating region be4e1e87 vmm: memory: Use fine grained mmap wrapper f0ab002e build(deps): bump openssl-sys from 0.9.54 to 0.9.55 b9f9f01f vmm: Extend seccomp filters to allow snapshot/restore 6eb72130 vmm: Enable restore feature 53613319 vmm: Enable snapshot feature 2cd0bc0a vmm: Create initial VM from its snapshot b55b83c6 vmm: vm: Implement the Transportable trait 1ed357cf vmm: vm: Implement the Snapshottable trait 20ba271b vmm: memory_manager: Implement the Transportable trait e606112c vmm: memory_manager: Implement the Snapshottable trait 50b3f008 vmm: cpu: Implement the Snapshottable trait f787c409 vmm: cpu: Factorize vcpu starting code 722f9b66 vmm: cpu: Get and set KVM vCPU state 13756490 vmm: cpu: Track all Vcpus through CpuManager a0d5dbce vmm: device_manager: Implement the Snapshottable trait 93d3abfd vmm: device_manager: Make serial and ioapic devices migratable 12b036a8 Cargo: Update dependencies for the KVM serialization work 183529d0 vmm: Cleanup warning from build 22958261 main: Print human readable error for command line error c7dfbd8a vmm: config: Implement fmt::Display for error d8119fda vmm: config: Remove unused error entries 1a10f16a vmm: config: Consolidate size parsing code f449486b vmm: config: Make toggle parsing more tolerant a4e0ce58 vmm: config: Consolidate on/off parsing c731a943 vmm: config: Port vsock to OptionParser 37264cf2 vmm: config: Add unit testing for vsock 8665898f vmm: config: Port device parsing to OptionParser a85e2fa7 vmm: config: Add unit test for VFIO device parsing bed282b8 vmm: config: Add "valueless" options to OptionParser 2ae3392d vmm: config: Port console parsing to OptionParser 143d63c8 vmm: config: Add unit test for console parsing 5ab58e74 vmm: config: Port pmem option to OptionParser 233ad78b vmm: config: Add parsing test for pmem 13dc6373 vmm: config: Port filesystem parsing to OptionParser 7a071c28 vmm: config: Implement unit testing for virtio-fs parsing e4cd3072 vmm: config: Port RNG options to OptionParser 708dbb97 vmm: config: Add RNG parsing unit test 057e71d2 vmm: config: Accept empty value strings 218c780f vmm: config: Port network parsing to OptionParser a5747a84 net_util: Implement FromStr for MacAddr 8754720e vmm: config: Add unit test for net parsing 224e3dde vmm: config: Switch disk parsing to OptionParser 9e102447 vmm: config: Add unit test for disk parsing e40ae627 vmm: config: Port memory option parsing to OptionParser be32065a vmm: config: Add "ByteSized" type for simplifying parsing of byte sizes f01bd7d5 vmm: config: Implement FromStr for HotplugMethod 74613803 vmm: config: Add a Toggle type for "on/off" strings 929142bc vmm: config: Add memory parsing unit test 68203ea4 vmm: config: Port CPU parsing to OptionParser 9e6a2825 vmm: config: Add unit test for CPU parsing 9e7231cd vmm: config: Introduce basic OptionParser 1e20b572 build(deps): bump serde_json from 1.0.50 to 1.0.51 baf48500 build(deps): bump serde_derive from 1.0.105 to 1.0.106 00230905 build(deps): bump serde from 1.0.105 to 1.0.106 447af8e7 vmm: vm: Factorize the device and cpu managers creation routine c73c9b11 vmm: vm: Open kernel and initramfs once all managers are created 0646a906 vmm: cpu: Pass CpusConfig to simplify the new() prototype b584ec3f vmm: memory_manager: Own the system allocator ef2b11ee vmm: memory_manager: Pass MemoryConfig to simplify the new() prototype 622f3f8f vmm: vm: Avoid ioapic variable creation 164e8100 vmm: cpu: Move CPUID patching to CpuManager 1a2c1f97 vmm: vm: Factorize the KVM setup code 3eb11069 arch: regs: Rename and export create_msr_entries c3a34903 arch: regs: Make create_msr_entries more readable 7a50646c vmm: device_manager: Convert migratable_devices to a map 8ba37a98 .gitignore: Add build directory b3e4111e devices: serial: Implement the Snapshottable trait 98741573 devices: ioapic: Implement the Snapshottable trait 3ef1c00c ch-remote: Fix snapshot and restore subcommands dc97b67d main: Fix restore CLI 859a9618 ch-remote: Add --restore option 35c0ea6c ch-remote: Add --snapshot option fe2d8846 main: Support VM restore from the command line 8f300bed vmm: api: Add a /api/v1/vm.restore endpoint 92c73c3b vmm: Add a VmRestore command 39d4f817 vmm: http: Add a /api/v1/vm.snapshot endpoint cf8f8ce9 vmm: api: Add a Snapshot command 452475c2 vmm: Add migration helpers 1b1a2175 vm-migration: Define the Snapshottable and Transportable traits 2d17f438 vmm: seccomp: Add missing open() syscall bf135a29 build(deps): bump linux-loader from `2adddce` to `61d95eb` da4aaee7 build(deps): bump vmm-sys-util from 0.4.0 to 0.5.0 6a934c32 build(deps): bump proc-macro-hack from 0.5.14 to 0.5.15 3b891cd3 build(deps): bump micro_http from `e89ed14` to `0d87a94` d5199ad9 build(deps): bump anyhow from 1.0.27 to 1.0.28 6a0b4d7a build(deps): bump proc-macro2 from 1.0.9 to 1.0.10 31bbe0e5 build(deps): bump hermit-abi from 0.1.9 to 0.1.10 7f098168 build(deps): bump hermit-abi from 0.1.8 to 0.1.9 00a1eced build(deps): bump thiserror from 1.0.13 to 1.0.14 f24b7424 build(deps): bump serde_json from 1.0.48 to 1.0.50 e4ea8b0b vmm: Add missing syscalls to the seccomp filters 33be24bd vhost-user-fs: return EINVAL if req is out of range in fs_slave_mmap/unmap/sync 78b5cbc6 vhost-user-fs: validate fs_slave_map/unmap/sync request 0c29c2ec ci: Extend VFIO test with memory hotplug 9e181776 vmm: Add memory hotplug support to VFIO PCI devices cc67131e vmm: Retrieve new memory region when memory is extended e4a034ae vfio: Add support for memory hotplug 8fc7bf29 vmm: Move to the latest linux-loader 785812d9 vmm: Fallback to legacy boot if PVH is enabled along with initramfs 5157ba10 resources: enable initramfs in kernel config 3b470d4f tests: add support for initramfs 6cce7b95 arch: load initramfs and populate zero page 1f9bc68c openapi: Add initramfs support 4db252b4 main, vmm: add --initramfs cli option 0ce7de3e arch: provide mechanism to get page size 4b110d5b tests: Add integration test for hotplugging network device f3f4d075 ch-remote: Add support for hotplugging network devices c73c31b6 docs: Update API documentation to include "vm.add-net" 6244beb9 openapi: Add "vm.add-net" entry point 57c3fa4b vmm: Add "add-net" to the API f664cdde vmm: Add support for adding network devices to the VM 8f323e61 vmm: Add support to DeviceManager for hotplugging network devices 42a9896f vmm: device_manager: Refactor make_virtio_net_devices 9df601a1 bin, vmm: Centralise the net syntax 41d7b3a3 vmm: memory_manager: Only send the GED notification for the ACPI method 15d9ec01 openapit: Add hotplug_method to MemoryConfig abbd69ab tests: Add integration test test_virtio_mem 4a7a2cff tests: Add test for hotplug_size and hotplug_method e63f9818 vmm: device: Add make_virtio_mem_devices e6b934a5 vmm: Add support for virtio-mem 51d102c7 vm-virtio: Add virtio-mem device 8d05fb86 tests: Add integration test for hotplugging pmem device 0b051010 ch-remote: Add support for hotplugging persistent memory 44aef8f4 docs: Update API documentation to include "vm.add-pmem" 75878dd9 openapi: Add "vm.add-pmem" entry point f6f4c68f vmm: Add "add-pmem" to the API 15de30f1 vmm: Add support for adding pmem devices to the VM f7def621 vmm: Add support to DeviceManager for hotplugging pmem devices 8c3ea8cd vmm: device_manager: Refactor make_virtio_pmem_devices a7296bbb bin, vmm: Centralise the pmem syntax 61e34331 virtio-fs: validate request len in fs_slave_io() 4c9d15d4 vmm: Fix copy and paste error message 96d4f1e3 tests: Add integration test for hotplugging disk device 05ce2dc8 ch-remote: Add support for hotplugging disks eec1a32d docs: Update API documentation to include "vm.add-disk" 82cad99c openapi: Add "vm.add-disk" entry point f2151b27 vmm: Add "add-disk" to the API 164ec2b8 vmm: Add support for adding disks to the VM b3082c19 vmm: Add support to DeviceManager for hotplugging disks 2be703ca vmm: device_manager: Refactor make_virtio_block_devices 66da29d8 bin, vmm: Centralise the disk syntax ede28878 build(deps): bump micro_http from `e712d6a` to `e89ed14` Signed-off-by: Bo Chen --- versions.yaml | 2 +- .../client/.openapi-generator/VERSION | 2 +- .../pkg/cloud-hypervisor/client/README.md | 8 + .../cloud-hypervisor/client/api/openapi.yaml | 121 ++++++ .../cloud-hypervisor/client/api_default.go | 348 +++++++++++++++++- .../client/docs/DefaultApi.md | 165 +++++++++ .../client/docs/InitramfsConfig.md | 11 + .../client/docs/MemoryConfig.md | 1 + .../client/docs/RestoreConfig.md | 12 + .../cloud-hypervisor/client/docs/VmConfig.md | 1 + .../client/docs/VmSnapshotConfig.md | 11 + .../client/model_initramfs_config.go | 14 + .../client/model_memory_config.go | 1 + .../client/model_restore_config.go | 15 + .../client/model_vm_config.go | 1 + .../client/model_vm_snapshot_config.go | 14 + .../cloud-hypervisor/cloud-hypervisor.yaml | 112 ++++++ 17 files changed, 819 insertions(+), 20 deletions(-) create mode 100644 virtcontainers/pkg/cloud-hypervisor/client/docs/InitramfsConfig.md create mode 100644 virtcontainers/pkg/cloud-hypervisor/client/docs/RestoreConfig.md create mode 100644 virtcontainers/pkg/cloud-hypervisor/client/docs/VmSnapshotConfig.md create mode 100644 virtcontainers/pkg/cloud-hypervisor/client/model_initramfs_config.go create mode 100644 virtcontainers/pkg/cloud-hypervisor/client/model_restore_config.go create mode 100644 virtcontainers/pkg/cloud-hypervisor/client/model_vm_snapshot_config.go diff --git a/versions.yaml b/versions.yaml index c350108088..69aacfa0f5 100644 --- a/versions.yaml +++ b/versions.yaml @@ -75,7 +75,7 @@ assets: url: "https://github.com/cloud-hypervisor/cloud-hypervisor" uscan-url: >- https://github.com/cloud-hypervisor/cloud-hypervisor/tags.*/v?(\d\S+)\.tar\.gz - version: "c1e6d0022b220ecba25a10f61d0025a408d90a94" + version: "a8ec8f3326628d34021ccae0f259a9509ff1e6da" firecracker: description: "Firecracker micro-VMM" diff --git a/virtcontainers/pkg/cloud-hypervisor/client/.openapi-generator/VERSION b/virtcontainers/pkg/cloud-hypervisor/client/.openapi-generator/VERSION index bfbf77eb7f..b5d898602c 100644 --- a/virtcontainers/pkg/cloud-hypervisor/client/.openapi-generator/VERSION +++ b/virtcontainers/pkg/cloud-hypervisor/client/.openapi-generator/VERSION @@ -1 +1 @@ -4.3.0-SNAPSHOT \ No newline at end of file +4.3.1-SNAPSHOT \ No newline at end of file diff --git a/virtcontainers/pkg/cloud-hypervisor/client/README.md b/virtcontainers/pkg/cloud-hypervisor/client/README.md index c6b967cd29..3503d1baaf 100644 --- a/virtcontainers/pkg/cloud-hypervisor/client/README.md +++ b/virtcontainers/pkg/cloud-hypervisor/client/README.md @@ -41,9 +41,14 @@ Class | Method | HTTP request | Description *DefaultApi* | [**ShutdownVM**](docs/DefaultApi.md#shutdownvm) | **Put** /vm.shutdown | Shut the VM instance down. *DefaultApi* | [**ShutdownVMM**](docs/DefaultApi.md#shutdownvmm) | **Put** /vmm.shutdown | Shuts the cloud-hypervisor VMM. *DefaultApi* | [**VmAddDevicePut**](docs/DefaultApi.md#vmadddeviceput) | **Put** /vm.add-device | Add a new device to the VM +*DefaultApi* | [**VmAddDiskPut**](docs/DefaultApi.md#vmadddiskput) | **Put** /vm.add-disk | Add a new disk to the VM +*DefaultApi* | [**VmAddNetPut**](docs/DefaultApi.md#vmaddnetput) | **Put** /vm.add-net | Add a new network device to the VM +*DefaultApi* | [**VmAddPmemPut**](docs/DefaultApi.md#vmaddpmemput) | **Put** /vm.add-pmem | Add a new pmem device to the VM *DefaultApi* | [**VmInfoGet**](docs/DefaultApi.md#vminfoget) | **Get** /vm.info | Returns general information about the cloud-hypervisor Virtual Machine (VM) instance. *DefaultApi* | [**VmRemoveDevicePut**](docs/DefaultApi.md#vmremovedeviceput) | **Put** /vm.remove-device | Remove a device from the VM *DefaultApi* | [**VmResizePut**](docs/DefaultApi.md#vmresizeput) | **Put** /vm.resize | Resize the VM +*DefaultApi* | [**VmRestorePut**](docs/DefaultApi.md#vmrestoreput) | **Put** /vm.restore | Restore a VM from a snapshot. +*DefaultApi* | [**VmSnapshotPut**](docs/DefaultApi.md#vmsnapshotput) | **Put** /vm.snapshot | Returns a VM snapshot. *DefaultApi* | [**VmmPingGet**](docs/DefaultApi.md#vmmpingget) | **Get** /vmm.ping | Ping the VMM to check for API server availability @@ -55,16 +60,19 @@ Class | Method | HTTP request | Description - [DeviceConfig](docs/DeviceConfig.md) - [DiskConfig](docs/DiskConfig.md) - [FsConfig](docs/FsConfig.md) + - [InitramfsConfig](docs/InitramfsConfig.md) - [KernelConfig](docs/KernelConfig.md) - [MemoryConfig](docs/MemoryConfig.md) - [NetConfig](docs/NetConfig.md) - [PmemConfig](docs/PmemConfig.md) + - [RestoreConfig](docs/RestoreConfig.md) - [RngConfig](docs/RngConfig.md) - [VmAddDevice](docs/VmAddDevice.md) - [VmConfig](docs/VmConfig.md) - [VmInfo](docs/VmInfo.md) - [VmRemoveDevice](docs/VmRemoveDevice.md) - [VmResize](docs/VmResize.md) + - [VmSnapshotConfig](docs/VmSnapshotConfig.md) - [VmmPingResponse](docs/VmmPingResponse.md) - [VsockConfig](docs/VsockConfig.md) diff --git a/virtcontainers/pkg/cloud-hypervisor/client/api/openapi.yaml b/virtcontainers/pkg/cloud-hypervisor/client/api/openapi.yaml index 5dcc8f25a5..3d0eef0351 100644 --- a/virtcontainers/pkg/cloud-hypervisor/client/api/openapi.yaml +++ b/virtcontainers/pkg/cloud-hypervisor/client/api/openapi.yaml @@ -158,6 +158,86 @@ paths: "404": description: The device could not be removed from the VM instance. summary: Remove a device from the VM + /vm.add-disk: + put: + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/DiskConfig' + description: The details of the new disk + required: true + responses: + "204": + description: The new disk was successfully added to the VM instance. + "500": + description: The new disk could not be added to the VM instance. + summary: Add a new disk to the VM + /vm.add-pmem: + put: + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/PmemConfig' + description: The details of the new pmem device + required: true + responses: + "204": + description: The new device was successfully added to the VM instance. + "500": + description: The new device could not be added to the VM instance. + summary: Add a new pmem device to the VM + /vm.add-net: + put: + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/NetConfig' + description: The details of the new network device + required: true + responses: + "204": + description: The new device was successfully added to the VM instance. + "500": + description: The new device could not be added to the VM instance. + summary: Add a new network device to the VM + /vm.snapshot: + put: + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/VmSnapshotConfig' + description: The snapshot configuration + required: true + responses: + "204": + description: The VM instance was successfully snapshotted. + "404": + description: The VM instance could not be snapshotted because it is not + created. + "405": + description: The VM instance could not be snapshotted because it is not + booted. + summary: Returns a VM snapshot. + /vm.restore: + put: + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RestoreConfig' + description: The restore configuration + required: true + responses: + "204": + description: The VM instance was successfully restored. + "404": + description: The VM instance could not be restored because it is already + created. + summary: Restore a VM from a snapshot. components: schemas: VmmPingResponse: @@ -184,6 +264,7 @@ components: file: file size: 1 hotplug_size: 5 + hotplug_method: acpi disks: - path: path num_queues: 5 @@ -258,6 +339,8 @@ components: mode: "false" file: file iommu: false + initramfs: + path: path net: - tap: tap num_queues: 7 @@ -303,6 +386,7 @@ components: file: file size: 1 hotplug_size: 5 + hotplug_method: acpi disks: - path: path num_queues: 5 @@ -377,6 +461,8 @@ components: mode: "false" file: file iommu: false + initramfs: + path: path net: - tap: tap num_queues: 7 @@ -403,6 +489,8 @@ components: $ref: '#/components/schemas/MemoryConfig' kernel: $ref: '#/components/schemas/KernelConfig' + initramfs: + $ref: '#/components/schemas/InitramfsConfig' cmdline: $ref: '#/components/schemas/CmdLineConfig' disks: @@ -465,6 +553,7 @@ components: file: file size: 1 hotplug_size: 5 + hotplug_method: acpi properties: size: format: int64 @@ -477,6 +566,9 @@ components: mergeable: default: false type: boolean + hotplug_method: + default: acpi + type: string required: - size type: object @@ -489,6 +581,16 @@ components: required: - path type: object + InitramfsConfig: + example: + path: path + nullable: true + properties: + path: + type: string + required: + - path + type: object CmdLineConfig: example: args: args @@ -734,3 +836,22 @@ components: id: type: string type: object + VmSnapshotConfig: + example: + destination_url: destination_url + properties: + destination_url: + type: string + type: object + RestoreConfig: + example: + prefault: true + source_url: source_url + properties: + source_url: + type: string + prefault: + type: boolean + required: + - source_url + type: object diff --git a/virtcontainers/pkg/cloud-hypervisor/client/api_default.go b/virtcontainers/pkg/cloud-hypervisor/client/api_default.go index 87da4ded9b..c68fda29ad 100644 --- a/virtcontainers/pkg/cloud-hypervisor/client/api_default.go +++ b/virtcontainers/pkg/cloud-hypervisor/client/api_default.go @@ -597,6 +597,204 @@ func (a *DefaultApiService) VmAddDevicePut(ctx _context.Context, vmAddDevice VmA return localVarHTTPResponse, nil } +/* +VmAddDiskPut Add a new disk to the VM + * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param diskConfig The details of the new disk +*/ +func (a *DefaultApiService) VmAddDiskPut(ctx _context.Context, diskConfig DiskConfig) (*_nethttp.Response, error) { + var ( + localVarHTTPMethod = _nethttp.MethodPut + localVarPostBody interface{} + localVarFormFileName string + localVarFileName string + localVarFileBytes []byte + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/vm.add-disk" + localVarHeaderParams := make(map[string]string) + localVarQueryParams := _neturl.Values{} + localVarFormParams := _neturl.Values{} + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + // body params + localVarPostBody = &diskConfig + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes) + if err != nil { + return nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(r) + if err != nil || localVarHTTPResponse == nil { + return localVarHTTPResponse, err + } + + localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + if err != nil { + return localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + return localVarHTTPResponse, newErr + } + + return localVarHTTPResponse, nil +} + +/* +VmAddNetPut Add a new network device to the VM + * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param netConfig The details of the new network device +*/ +func (a *DefaultApiService) VmAddNetPut(ctx _context.Context, netConfig NetConfig) (*_nethttp.Response, error) { + var ( + localVarHTTPMethod = _nethttp.MethodPut + localVarPostBody interface{} + localVarFormFileName string + localVarFileName string + localVarFileBytes []byte + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/vm.add-net" + localVarHeaderParams := make(map[string]string) + localVarQueryParams := _neturl.Values{} + localVarFormParams := _neturl.Values{} + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + // body params + localVarPostBody = &netConfig + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes) + if err != nil { + return nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(r) + if err != nil || localVarHTTPResponse == nil { + return localVarHTTPResponse, err + } + + localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + if err != nil { + return localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + return localVarHTTPResponse, newErr + } + + return localVarHTTPResponse, nil +} + +/* +VmAddPmemPut Add a new pmem device to the VM + * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param pmemConfig The details of the new pmem device +*/ +func (a *DefaultApiService) VmAddPmemPut(ctx _context.Context, pmemConfig PmemConfig) (*_nethttp.Response, error) { + var ( + localVarHTTPMethod = _nethttp.MethodPut + localVarPostBody interface{} + localVarFormFileName string + localVarFileName string + localVarFileBytes []byte + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/vm.add-pmem" + localVarHeaderParams := make(map[string]string) + localVarQueryParams := _neturl.Values{} + localVarFormParams := _neturl.Values{} + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + // body params + localVarPostBody = &pmemConfig + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes) + if err != nil { + return nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(r) + if err != nil || localVarHTTPResponse == nil { + return localVarHTTPResponse, err + } + + localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + if err != nil { + return localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + return localVarHTTPResponse, newErr + } + + return localVarHTTPResponse, nil +} + /* VmInfoGet Returns general information about the cloud-hypervisor Virtual Machine (VM) instance. * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @@ -656,15 +854,6 @@ func (a *DefaultApiService) VmInfoGet(ctx _context.Context) (VmInfo, *_nethttp.R body: localVarBody, error: localVarHTTPResponse.Status, } - if localVarHTTPResponse.StatusCode == 200 { - var v VmInfo - err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) - if err != nil { - newErr.error = err.Error() - return localVarReturnValue, localVarHTTPResponse, newErr - } - newErr.model = v - } return localVarReturnValue, localVarHTTPResponse, newErr } @@ -812,6 +1001,138 @@ func (a *DefaultApiService) VmResizePut(ctx _context.Context, vmResize VmResize) return localVarHTTPResponse, nil } +/* +VmRestorePut Restore a VM from a snapshot. + * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param restoreConfig The restore configuration +*/ +func (a *DefaultApiService) VmRestorePut(ctx _context.Context, restoreConfig RestoreConfig) (*_nethttp.Response, error) { + var ( + localVarHTTPMethod = _nethttp.MethodPut + localVarPostBody interface{} + localVarFormFileName string + localVarFileName string + localVarFileBytes []byte + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/vm.restore" + localVarHeaderParams := make(map[string]string) + localVarQueryParams := _neturl.Values{} + localVarFormParams := _neturl.Values{} + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + // body params + localVarPostBody = &restoreConfig + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes) + if err != nil { + return nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(r) + if err != nil || localVarHTTPResponse == nil { + return localVarHTTPResponse, err + } + + localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + if err != nil { + return localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + return localVarHTTPResponse, newErr + } + + return localVarHTTPResponse, nil +} + +/* +VmSnapshotPut Returns a VM snapshot. + * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + * @param vmSnapshotConfig The snapshot configuration +*/ +func (a *DefaultApiService) VmSnapshotPut(ctx _context.Context, vmSnapshotConfig VmSnapshotConfig) (*_nethttp.Response, error) { + var ( + localVarHTTPMethod = _nethttp.MethodPut + localVarPostBody interface{} + localVarFormFileName string + localVarFileName string + localVarFileBytes []byte + ) + + // create path and map variables + localVarPath := a.client.cfg.BasePath + "/vm.snapshot" + localVarHeaderParams := make(map[string]string) + localVarQueryParams := _neturl.Values{} + localVarFormParams := _neturl.Values{} + + // to determine the Content-Type header + localVarHTTPContentTypes := []string{"application/json"} + + // set Content-Type header + localVarHTTPContentType := selectHeaderContentType(localVarHTTPContentTypes) + if localVarHTTPContentType != "" { + localVarHeaderParams["Content-Type"] = localVarHTTPContentType + } + + // to determine the Accept header + localVarHTTPHeaderAccepts := []string{} + + // set Accept header + localVarHTTPHeaderAccept := selectHeaderAccept(localVarHTTPHeaderAccepts) + if localVarHTTPHeaderAccept != "" { + localVarHeaderParams["Accept"] = localVarHTTPHeaderAccept + } + // body params + localVarPostBody = &vmSnapshotConfig + r, err := a.client.prepareRequest(ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes) + if err != nil { + return nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(r) + if err != nil || localVarHTTPResponse == nil { + return localVarHTTPResponse, err + } + + localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + if err != nil { + return localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + return localVarHTTPResponse, newErr + } + + return localVarHTTPResponse, nil +} + /* VmmPingGet Ping the VMM to check for API server availability * @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). @@ -871,15 +1192,6 @@ func (a *DefaultApiService) VmmPingGet(ctx _context.Context) (VmmPingResponse, * body: localVarBody, error: localVarHTTPResponse.Status, } - if localVarHTTPResponse.StatusCode == 200 { - var v VmmPingResponse - err = a.client.decode(&v, localVarBody, localVarHTTPResponse.Header.Get("Content-Type")) - if err != nil { - newErr.error = err.Error() - return localVarReturnValue, localVarHTTPResponse, newErr - } - newErr.model = v - } return localVarReturnValue, localVarHTTPResponse, newErr } diff --git a/virtcontainers/pkg/cloud-hypervisor/client/docs/DefaultApi.md b/virtcontainers/pkg/cloud-hypervisor/client/docs/DefaultApi.md index 3aafd1396d..d414fadfda 100644 --- a/virtcontainers/pkg/cloud-hypervisor/client/docs/DefaultApi.md +++ b/virtcontainers/pkg/cloud-hypervisor/client/docs/DefaultApi.md @@ -13,9 +13,14 @@ Method | HTTP request | Description [**ShutdownVM**](DefaultApi.md#ShutdownVM) | **Put** /vm.shutdown | Shut the VM instance down. [**ShutdownVMM**](DefaultApi.md#ShutdownVMM) | **Put** /vmm.shutdown | Shuts the cloud-hypervisor VMM. [**VmAddDevicePut**](DefaultApi.md#VmAddDevicePut) | **Put** /vm.add-device | Add a new device to the VM +[**VmAddDiskPut**](DefaultApi.md#VmAddDiskPut) | **Put** /vm.add-disk | Add a new disk to the VM +[**VmAddNetPut**](DefaultApi.md#VmAddNetPut) | **Put** /vm.add-net | Add a new network device to the VM +[**VmAddPmemPut**](DefaultApi.md#VmAddPmemPut) | **Put** /vm.add-pmem | Add a new pmem device to the VM [**VmInfoGet**](DefaultApi.md#VmInfoGet) | **Get** /vm.info | Returns general information about the cloud-hypervisor Virtual Machine (VM) instance. [**VmRemoveDevicePut**](DefaultApi.md#VmRemoveDevicePut) | **Put** /vm.remove-device | Remove a device from the VM [**VmResizePut**](DefaultApi.md#VmResizePut) | **Put** /vm.resize | Resize the VM +[**VmRestorePut**](DefaultApi.md#VmRestorePut) | **Put** /vm.restore | Restore a VM from a snapshot. +[**VmSnapshotPut**](DefaultApi.md#VmSnapshotPut) | **Put** /vm.snapshot | Returns a VM snapshot. [**VmmPingGet**](DefaultApi.md#VmmPingGet) | **Get** /vmm.ping | Ping the VMM to check for API server availability @@ -280,6 +285,102 @@ No authorization required [[Back to README]](../README.md) +## VmAddDiskPut + +> VmAddDiskPut(ctx, diskConfig) + +Add a new disk to the VM + +### Required Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. +**diskConfig** | [**DiskConfig**](DiskConfig.md)| The details of the new disk | + +### Return type + + (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) +[[Back to Model list]](../README.md#documentation-for-models) +[[Back to README]](../README.md) + + +## VmAddNetPut + +> VmAddNetPut(ctx, netConfig) + +Add a new network device to the VM + +### Required Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. +**netConfig** | [**NetConfig**](NetConfig.md)| The details of the new network device | + +### Return type + + (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) +[[Back to Model list]](../README.md#documentation-for-models) +[[Back to README]](../README.md) + + +## VmAddPmemPut + +> VmAddPmemPut(ctx, pmemConfig) + +Add a new pmem device to the VM + +### Required Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. +**pmemConfig** | [**PmemConfig**](PmemConfig.md)| The details of the new pmem device | + +### Return type + + (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) +[[Back to Model list]](../README.md#documentation-for-models) +[[Back to README]](../README.md) + + ## VmInfoGet > VmInfo VmInfoGet(ctx, ) @@ -372,6 +473,70 @@ No authorization required [[Back to README]](../README.md) +## VmRestorePut + +> VmRestorePut(ctx, restoreConfig) + +Restore a VM from a snapshot. + +### Required Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. +**restoreConfig** | [**RestoreConfig**](RestoreConfig.md)| The restore configuration | + +### Return type + + (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) +[[Back to Model list]](../README.md#documentation-for-models) +[[Back to README]](../README.md) + + +## VmSnapshotPut + +> VmSnapshotPut(ctx, vmSnapshotConfig) + +Returns a VM snapshot. + +### Required Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- +**ctx** | **context.Context** | context for authentication, logging, cancellation, deadlines, tracing, etc. +**vmSnapshotConfig** | [**VmSnapshotConfig**](VmSnapshotConfig.md)| The snapshot configuration | + +### Return type + + (empty response body) + +### Authorization + +No authorization required + +### HTTP request headers + +- **Content-Type**: application/json +- **Accept**: Not defined + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) +[[Back to Model list]](../README.md#documentation-for-models) +[[Back to README]](../README.md) + + ## VmmPingGet > VmmPingResponse VmmPingGet(ctx, ) diff --git a/virtcontainers/pkg/cloud-hypervisor/client/docs/InitramfsConfig.md b/virtcontainers/pkg/cloud-hypervisor/client/docs/InitramfsConfig.md new file mode 100644 index 0000000000..726938f23b --- /dev/null +++ b/virtcontainers/pkg/cloud-hypervisor/client/docs/InitramfsConfig.md @@ -0,0 +1,11 @@ +# InitramfsConfig + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**Path** | **string** | | + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/virtcontainers/pkg/cloud-hypervisor/client/docs/MemoryConfig.md b/virtcontainers/pkg/cloud-hypervisor/client/docs/MemoryConfig.md index 4934190083..30ae9e0187 100644 --- a/virtcontainers/pkg/cloud-hypervisor/client/docs/MemoryConfig.md +++ b/virtcontainers/pkg/cloud-hypervisor/client/docs/MemoryConfig.md @@ -8,6 +8,7 @@ Name | Type | Description | Notes **HotplugSize** | **int64** | | [optional] **File** | **string** | | [optional] **Mergeable** | **bool** | | [optional] [default to false] +**HotplugMethod** | **string** | | [optional] [default to acpi] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/virtcontainers/pkg/cloud-hypervisor/client/docs/RestoreConfig.md b/virtcontainers/pkg/cloud-hypervisor/client/docs/RestoreConfig.md new file mode 100644 index 0000000000..c9d8f5ef08 --- /dev/null +++ b/virtcontainers/pkg/cloud-hypervisor/client/docs/RestoreConfig.md @@ -0,0 +1,12 @@ +# RestoreConfig + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**SourceUrl** | **string** | | +**Prefault** | **bool** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/virtcontainers/pkg/cloud-hypervisor/client/docs/VmConfig.md b/virtcontainers/pkg/cloud-hypervisor/client/docs/VmConfig.md index ef62495a7b..08c142d475 100644 --- a/virtcontainers/pkg/cloud-hypervisor/client/docs/VmConfig.md +++ b/virtcontainers/pkg/cloud-hypervisor/client/docs/VmConfig.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **Cpus** | [**CpusConfig**](CpusConfig.md) | | [optional] **Memory** | [**MemoryConfig**](MemoryConfig.md) | | [optional] **Kernel** | [**KernelConfig**](KernelConfig.md) | | +**Initramfs** | Pointer to [**InitramfsConfig**](InitramfsConfig.md) | | [optional] **Cmdline** | [**CmdLineConfig**](CmdLineConfig.md) | | **Disks** | [**[]DiskConfig**](DiskConfig.md) | | [optional] **Net** | [**[]NetConfig**](NetConfig.md) | | [optional] diff --git a/virtcontainers/pkg/cloud-hypervisor/client/docs/VmSnapshotConfig.md b/virtcontainers/pkg/cloud-hypervisor/client/docs/VmSnapshotConfig.md new file mode 100644 index 0000000000..5482610955 --- /dev/null +++ b/virtcontainers/pkg/cloud-hypervisor/client/docs/VmSnapshotConfig.md @@ -0,0 +1,11 @@ +# VmSnapshotConfig + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**DestinationUrl** | **string** | | [optional] + +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/virtcontainers/pkg/cloud-hypervisor/client/model_initramfs_config.go b/virtcontainers/pkg/cloud-hypervisor/client/model_initramfs_config.go new file mode 100644 index 0000000000..3b361c1268 --- /dev/null +++ b/virtcontainers/pkg/cloud-hypervisor/client/model_initramfs_config.go @@ -0,0 +1,14 @@ +/* + * Cloud Hypervisor API + * + * Local HTTP based API for managing and inspecting a cloud-hypervisor virtual machine. + * + * API version: 0.3.0 + * Generated by: OpenAPI Generator (https://openapi-generator.tech) + */ + +package openapi +// InitramfsConfig struct for InitramfsConfig +type InitramfsConfig struct { + Path string `json:"path"` +} diff --git a/virtcontainers/pkg/cloud-hypervisor/client/model_memory_config.go b/virtcontainers/pkg/cloud-hypervisor/client/model_memory_config.go index e96e903209..3d4831c654 100644 --- a/virtcontainers/pkg/cloud-hypervisor/client/model_memory_config.go +++ b/virtcontainers/pkg/cloud-hypervisor/client/model_memory_config.go @@ -14,4 +14,5 @@ type MemoryConfig struct { HotplugSize int64 `json:"hotplug_size,omitempty"` File string `json:"file,omitempty"` Mergeable bool `json:"mergeable,omitempty"` + HotplugMethod string `json:"hotplug_method,omitempty"` } diff --git a/virtcontainers/pkg/cloud-hypervisor/client/model_restore_config.go b/virtcontainers/pkg/cloud-hypervisor/client/model_restore_config.go new file mode 100644 index 0000000000..713cf1b3c3 --- /dev/null +++ b/virtcontainers/pkg/cloud-hypervisor/client/model_restore_config.go @@ -0,0 +1,15 @@ +/* + * Cloud Hypervisor API + * + * Local HTTP based API for managing and inspecting a cloud-hypervisor virtual machine. + * + * API version: 0.3.0 + * Generated by: OpenAPI Generator (https://openapi-generator.tech) + */ + +package openapi +// RestoreConfig struct for RestoreConfig +type RestoreConfig struct { + SourceUrl string `json:"source_url"` + Prefault bool `json:"prefault,omitempty"` +} diff --git a/virtcontainers/pkg/cloud-hypervisor/client/model_vm_config.go b/virtcontainers/pkg/cloud-hypervisor/client/model_vm_config.go index 0c48392538..aa95e3324f 100644 --- a/virtcontainers/pkg/cloud-hypervisor/client/model_vm_config.go +++ b/virtcontainers/pkg/cloud-hypervisor/client/model_vm_config.go @@ -13,6 +13,7 @@ type VmConfig struct { Cpus CpusConfig `json:"cpus,omitempty"` Memory MemoryConfig `json:"memory,omitempty"` Kernel KernelConfig `json:"kernel"` + Initramfs *InitramfsConfig `json:"initramfs,omitempty"` Cmdline CmdLineConfig `json:"cmdline"` Disks []DiskConfig `json:"disks,omitempty"` Net []NetConfig `json:"net,omitempty"` diff --git a/virtcontainers/pkg/cloud-hypervisor/client/model_vm_snapshot_config.go b/virtcontainers/pkg/cloud-hypervisor/client/model_vm_snapshot_config.go new file mode 100644 index 0000000000..b029fff392 --- /dev/null +++ b/virtcontainers/pkg/cloud-hypervisor/client/model_vm_snapshot_config.go @@ -0,0 +1,14 @@ +/* + * Cloud Hypervisor API + * + * Local HTTP based API for managing and inspecting a cloud-hypervisor virtual machine. + * + * API version: 0.3.0 + * Generated by: OpenAPI Generator (https://openapi-generator.tech) + */ + +package openapi +// VmSnapshotConfig struct for VmSnapshotConfig +type VmSnapshotConfig struct { + DestinationUrl string `json:"destination_url,omitempty"` +} diff --git a/virtcontainers/pkg/cloud-hypervisor/cloud-hypervisor.yaml b/virtcontainers/pkg/cloud-hypervisor/cloud-hypervisor.yaml index fb3ec6dc6f..4a79b14066 100644 --- a/virtcontainers/pkg/cloud-hypervisor/cloud-hypervisor.yaml +++ b/virtcontainers/pkg/cloud-hypervisor/cloud-hypervisor.yaml @@ -171,6 +171,88 @@ paths: 404: description: The device could not be removed from the VM instance. + /vm.add-disk: + put: + summary: Add a new disk to the VM + requestBody: + description: The details of the new disk + content: + application/json: + schema: + $ref: '#/components/schemas/DiskConfig' + required: true + responses: + 204: + description: The new disk was successfully added to the VM instance. + 500: + description: The new disk could not be added to the VM instance. + + /vm.add-pmem: + put: + summary: Add a new pmem device to the VM + requestBody: + description: The details of the new pmem device + content: + application/json: + schema: + $ref: '#/components/schemas/PmemConfig' + required: true + responses: + 204: + description: The new device was successfully added to the VM instance. + 500: + description: The new device could not be added to the VM instance. + + /vm.add-net: + put: + summary: Add a new network device to the VM + requestBody: + description: The details of the new network device + content: + application/json: + schema: + $ref: '#/components/schemas/NetConfig' + required: true + responses: + 204: + description: The new device was successfully added to the VM instance. + 500: + description: The new device could not be added to the VM instance. + + /vm.snapshot: + put: + summary: Returns a VM snapshot. + requestBody: + description: The snapshot configuration + content: + application/json: + schema: + $ref: '#/components/schemas/VmSnapshotConfig' + required: true + responses: + 204: + description: The VM instance was successfully snapshotted. + 404: + description: The VM instance could not be snapshotted because it is not created. + 405: + description: The VM instance could not be snapshotted because it is not booted. + + /vm.restore: + put: + summary: Restore a VM from a snapshot. + requestBody: + description: The restore configuration + content: + application/json: + schema: + $ref: '#/components/schemas/RestoreConfig' + required: true + responses: + 204: + description: The VM instance was successfully restored. + 404: + description: The VM instance could not be restored because it is already created. + components: schemas: @@ -208,6 +290,8 @@ components: $ref: '#/components/schemas/MemoryConfig' kernel: $ref: '#/components/schemas/KernelConfig' + initramfs: + $ref: '#/components/schemas/InitramfsConfig' cmdline: $ref: '#/components/schemas/CmdLineConfig' disks: @@ -277,6 +361,9 @@ components: mergeable: type: boolean default: false + hotplug_method: + type: string + default: "acpi" KernelConfig: required: @@ -286,6 +373,15 @@ components: path: type: string + InitramfsConfig: + nullable: true + required: + - path + type: object + properties: + path: + type: string + CmdLineConfig: required: - args @@ -481,3 +577,19 @@ components: properties: id: type: string + + VmSnapshotConfig: + type: object + properties: + destination_url: + type: string + + RestoreConfig: + required: + - source_url + type: object + properties: + source_url: + type: string + prefault: + type: boolean