From ed25d2cf5b57647656343e96c5c4c76a13a23116 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabiano=20Fid=C3=AAncio?= Date: Tue, 12 Jul 2022 14:50:07 +0000 Subject: [PATCH] versions: Update Cloud Hypervisor to v25.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cloud Hypervisor v25.0 has been released on July 7th, 2022, and brings the following changes: **ch-remote Improvements** The ch-remote command has gained support for creating the VM from a JSON config and support for booting and deleting the VM from the VMM. **VM "Coredump" Support** Under the guest_debug feature flag it is now possible to extract the memory of the guest for use in debugging with e.g. the crash utility. (https://github.com/cloud-hypervisor/cloud-hypervisor/issues/4012) **Notable Bug Fixes** * Always restore console mode on exit (https://github.com/cloud-hypervisor/cloud-hypervisor/issues/4249, https://github.com/cloud-hypervisor/cloud-hypervisor/issues/4248) * Restore vCPUs in numerical order which fixes aarch64 snapshot/restore (https://github.com/cloud-hypervisor/cloud-hypervisor/issues/4244) * Don't try and configure IFF_RUNNING on TAP devices (https://github.com/cloud-hypervisor/cloud-hypervisor/issues/4279) * Propagate configured queue size through to vhost-user backend (https://github.com/cloud-hypervisor/cloud-hypervisor/issues/4286) * Always Program vCPU CPUID before running the vCPU to fix running on Linux 5.16 (https://github.com/cloud-hypervisor/cloud-hypervisor/issues/4156) * Enable ACPI MADT "Online Capable" flag for hotpluggable vCPUs to fix newer Linux guest **Removals** The following functionality has been removed: * The mergeable option from the virtio-pmem support has been removed (https://github.com/cloud-hypervisor/cloud-hypervisor/issues/3968) * The dax option from the virtio-fs support has been removed (https://github.com/cloud-hypervisor/cloud-hypervisor/issues/3889) Fixes: #4641 Signed-off-by: Fabiano FidĂȘncio --- src/runtime/virtcontainers/clh.go | 5 +- .../client/.openapi-generator/FILES | 2 + .../pkg/cloud-hypervisor/client/README.md | 2 + .../cloud-hypervisor/client/api/openapi.yaml | 194 +++++++++--------- .../cloud-hypervisor/client/api_default.go | 100 +++++++++ .../client/docs/CpusConfig.md | 26 +++ .../client/docs/DefaultApi.md | 65 +++++- .../cloud-hypervisor/client/docs/FsConfig.md | 44 +--- .../client/docs/PmemConfig.md | 26 --- .../client/docs/VmCoredumpData.md | 56 +++++ .../client/model_cpus_config.go | 40 ++++ .../client/model_fs_config.go | 62 +----- .../client/model_pmem_config.go | 40 ---- .../client/model_vm_coredump_data.go | 113 ++++++++++ .../cloud-hypervisor/cloud-hypervisor.yaml | 39 ++-- versions.yaml | 2 +- 16 files changed, 533 insertions(+), 283 deletions(-) create mode 100644 src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/VmCoredumpData.md create mode 100644 src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_vm_coredump_data.go diff --git a/src/runtime/virtcontainers/clh.go b/src/runtime/virtcontainers/clh.go index 73e09cfe6..82c03fa02 100644 --- a/src/runtime/virtcontainers/clh.go +++ b/src/runtime/virtcontainers/clh.go @@ -1499,15 +1499,12 @@ func (clh *cloudHypervisor) addVolume(volume types.Volume) error { return err } - // disable DAX if VirtioFSCacheSize is 0 - dax := clh.config.VirtioFSCacheSize != 0 - // numQueues and queueSize are required, let's use the // default values defined by cloud-hypervisor numQueues := int32(1) queueSize := int32(1024) - fs := chclient.NewFsConfig(volume.MountTag, vfsdSockPath, numQueues, queueSize, dax, int64(clh.config.VirtioFSCacheSize<<20)) + fs := chclient.NewFsConfig(volume.MountTag, vfsdSockPath, numQueues, queueSize) clh.vmconfig.Fs = &[]chclient.FsConfig{*fs} clh.Logger().Debug("Adding share volume to hypervisor: ", volume.MountTag) diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/.openapi-generator/FILES b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/.openapi-generator/FILES index 7eb679fb2..0208bab30 100644 --- a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/.openapi-generator/FILES +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/.openapi-generator/FILES @@ -39,6 +39,7 @@ docs/TokenBucket.md docs/VdpaConfig.md docs/VmAddDevice.md docs/VmConfig.md +docs/VmCoredumpData.md docs/VmInfo.md docs/VmRemoveDevice.md docs/VmResize.md @@ -81,6 +82,7 @@ model_token_bucket.go model_vdpa_config.go model_vm_add_device.go model_vm_config.go +model_vm_coredump_data.go model_vm_info.go model_vm_remove_device.go model_vm_resize.go diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/README.md b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/README.md index 2e12b424c..ad0b5ec5c 100644 --- a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/README.md +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/README.md @@ -94,6 +94,7 @@ Class | Method | HTTP request | Description *DefaultApi* | [**VmAddPmemPut**](docs/DefaultApi.md#vmaddpmemput) | **Put** /vm.add-pmem | Add a new pmem device to the VM *DefaultApi* | [**VmAddVdpaPut**](docs/DefaultApi.md#vmaddvdpaput) | **Put** /vm.add-vdpa | Add a new vDPA device to the VM *DefaultApi* | [**VmAddVsockPut**](docs/DefaultApi.md#vmaddvsockput) | **Put** /vm.add-vsock | Add a new vsock device to the VM +*DefaultApi* | [**VmCoredumpPut**](docs/DefaultApi.md#vmcoredumpput) | **Put** /vm.coredump | Takes a VM coredump. *DefaultApi* | [**VmCountersGet**](docs/DefaultApi.md#vmcountersget) | **Get** /vm.counters | Get counters from the VM *DefaultApi* | [**VmInfoGet**](docs/DefaultApi.md#vminfoget) | **Get** /vm.info | Returns general information about the cloud-hypervisor Virtual Machine (VM) instance. *DefaultApi* | [**VmReceiveMigrationPut**](docs/DefaultApi.md#vmreceivemigrationput) | **Put** /vm.receive-migration | Receive a VM migration from URL @@ -140,6 +141,7 @@ Class | Method | HTTP request | Description - [VdpaConfig](docs/VdpaConfig.md) - [VmAddDevice](docs/VmAddDevice.md) - [VmConfig](docs/VmConfig.md) + - [VmCoredumpData](docs/VmCoredumpData.md) - [VmInfo](docs/VmInfo.md) - [VmRemoveDevice](docs/VmRemoveDevice.md) - [VmResize](docs/VmResize.md) diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/api/openapi.yaml b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/api/openapi.yaml index 4687c425e..a99e14a74 100644 --- a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/api/openapi.yaml +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/api/openapi.yaml @@ -347,6 +347,23 @@ paths: description: The VM instance could not be snapshotted because it is not booted. summary: Returns a VM snapshot. + /vm.coredump: + put: + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/VmCoredumpData' + description: The coredump configuration + required: true + responses: + "204": + description: The VM instance was successfully coredumped. + "404": + description: The VM instance could not be coredumped because it is not created. + "405": + description: The VM instance could not be coredumped because it is not booted. + summary: Takes a VM coredump. /vm.restore: put: requestBody: @@ -408,7 +425,7 @@ components: VmInfo: description: Virtual Machine information example: - memory_actual_size: 7 + memory_actual_size: 3 state: Created config: console: @@ -496,6 +513,7 @@ components: cpus: features: amx: true + kvm_hyperv: false topology: dies_per_package: 5 threads_per_core: 1 @@ -514,58 +532,58 @@ components: - 3 - 3 devices: - - pci_segment: 3 + - pci_segment: 6 path: path iommu: false id: id - - pci_segment: 3 + - pci_segment: 6 path: path iommu: false id: id kernel: path: path vdpa: - - pci_segment: 7 + - pci_segment: 3 path: path num_queues: 3 iommu: false id: id - - pci_segment: 7 + - pci_segment: 3 path: path num_queues: 3 iommu: false id: id numa: - distances: - - distance: 7 - destination: 8 - - distance: 7 - destination: 8 + - distance: 8 + destination: 4 + - distance: 8 + destination: 4 cpus: - - 4 - - 4 + - 0 + - 0 sgx_epc_sections: - sgx_epc_sections - sgx_epc_sections memory_zones: - memory_zones - memory_zones - guest_numa_id: 0 + guest_numa_id: 6 - distances: - - distance: 7 - destination: 8 - - distance: 7 - destination: 8 + - distance: 8 + destination: 4 + - distance: 8 + destination: 4 cpus: - - 4 - - 4 + - 0 + - 0 sgx_epc_sections: - sgx_epc_sections - sgx_epc_sections memory_zones: - memory_zones - memory_zones - guest_numa_id: 0 + guest_numa_id: 6 tdx: firmware: firmware rng: @@ -573,30 +591,26 @@ components: src: /dev/urandom sgx_epc: - prefault: false - size: 6 + size: 7 id: id - prefault: false - size: 6 + size: 7 id: id fs: - pci_segment: 6 num_queues: 1 queue_size: 2 - cache_size: 6 - dax: true tag: tag socket: socket id: id - pci_segment: 6 num_queues: 1 queue_size: 2 - cache_size: 6 - dax: true tag: tag socket: socket id: id vsock: - pci_segment: 7 + pci_segment: 0 iommu: false socket: socket id: id @@ -605,20 +619,18 @@ components: iommu_segments: - 3 - 3 - num_pci_segments: 3 + num_pci_segments: 7 serial_number: serial_number pmem: - - pci_segment: 6 - mergeable: false + - pci_segment: 5 file: file - size: 5 + size: 6 iommu: false id: id discard_writes: false - - pci_segment: 6 - mergeable: false + - pci_segment: 5 file: file - size: 5 + size: 6 iommu: false id: id discard_writes: false @@ -839,6 +851,7 @@ components: cpus: features: amx: true + kvm_hyperv: false topology: dies_per_package: 5 threads_per_core: 1 @@ -857,58 +870,58 @@ components: - 3 - 3 devices: - - pci_segment: 3 + - pci_segment: 6 path: path iommu: false id: id - - pci_segment: 3 + - pci_segment: 6 path: path iommu: false id: id kernel: path: path vdpa: - - pci_segment: 7 + - pci_segment: 3 path: path num_queues: 3 iommu: false id: id - - pci_segment: 7 + - pci_segment: 3 path: path num_queues: 3 iommu: false id: id numa: - distances: - - distance: 7 - destination: 8 - - distance: 7 - destination: 8 + - distance: 8 + destination: 4 + - distance: 8 + destination: 4 cpus: - - 4 - - 4 + - 0 + - 0 sgx_epc_sections: - sgx_epc_sections - sgx_epc_sections memory_zones: - memory_zones - memory_zones - guest_numa_id: 0 + guest_numa_id: 6 - distances: - - distance: 7 - destination: 8 - - distance: 7 - destination: 8 + - distance: 8 + destination: 4 + - distance: 8 + destination: 4 cpus: - - 4 - - 4 + - 0 + - 0 sgx_epc_sections: - sgx_epc_sections - sgx_epc_sections memory_zones: - memory_zones - memory_zones - guest_numa_id: 0 + guest_numa_id: 6 tdx: firmware: firmware rng: @@ -916,30 +929,26 @@ components: src: /dev/urandom sgx_epc: - prefault: false - size: 6 + size: 7 id: id - prefault: false - size: 6 + size: 7 id: id fs: - pci_segment: 6 num_queues: 1 queue_size: 2 - cache_size: 6 - dax: true tag: tag socket: socket id: id - pci_segment: 6 num_queues: 1 queue_size: 2 - cache_size: 6 - dax: true tag: tag socket: socket id: id vsock: - pci_segment: 7 + pci_segment: 0 iommu: false socket: socket id: id @@ -948,20 +957,18 @@ components: iommu_segments: - 3 - 3 - num_pci_segments: 3 + num_pci_segments: 7 serial_number: serial_number pmem: - - pci_segment: 6 - mergeable: false + - pci_segment: 5 file: file - size: 5 + size: 6 iommu: false id: id discard_writes: false - - pci_segment: 6 - mergeable: false + - pci_segment: 5 file: file - size: 5 + size: 6 iommu: false id: id discard_writes: false @@ -1125,6 +1132,7 @@ components: example: features: amx: true + kvm_hyperv: false topology: dies_per_package: 5 threads_per_core: 1 @@ -1153,6 +1161,9 @@ components: type: integer topology: $ref: '#/components/schemas/CpuTopology' + kvm_hyperv: + default: false + type: boolean max_phys_bits: type: integer affinity: @@ -1170,7 +1181,7 @@ components: iommu_segments: - 3 - 3 - num_pci_segments: 3 + num_pci_segments: 7 serial_number: serial_number properties: num_pci_segments: @@ -1538,8 +1549,6 @@ components: pci_segment: 6 num_queues: 1 queue_size: 2 - cache_size: 6 - dax: true tag: tag socket: socket id: id @@ -1554,20 +1563,12 @@ components: queue_size: default: 1024 type: integer - dax: - default: true - type: boolean - cache_size: - format: int64 - type: integer pci_segment: format: int16 type: integer id: type: string required: - - cache_size - - dax - num_queues - queue_size - socket @@ -1575,10 +1576,9 @@ components: type: object PmemConfig: example: - pci_segment: 6 - mergeable: false + pci_segment: 5 file: file - size: 5 + size: 6 iommu: false id: id discard_writes: false @@ -1591,9 +1591,6 @@ components: iommu: default: false type: boolean - mergeable: - default: false - type: boolean discard_writes: default: false type: boolean @@ -1629,7 +1626,7 @@ components: type: object DeviceConfig: example: - pci_segment: 3 + pci_segment: 6 path: path iommu: false id: id @@ -1649,7 +1646,7 @@ components: type: object VdpaConfig: example: - pci_segment: 7 + pci_segment: 3 path: path num_queues: 3 iommu: false @@ -1674,7 +1671,7 @@ components: type: object VsockConfig: example: - pci_segment: 7 + pci_segment: 0 iommu: false socket: socket id: id @@ -1703,7 +1700,7 @@ components: SgxEpcConfig: example: prefault: false - size: 6 + size: 7 id: id properties: id: @@ -1731,8 +1728,8 @@ components: type: object NumaDistance: example: - distance: 7 - destination: 8 + distance: 8 + destination: 4 properties: destination: format: int32 @@ -1747,20 +1744,20 @@ components: NumaConfig: example: distances: - - distance: 7 - destination: 8 - - distance: 7 - destination: 8 + - distance: 8 + destination: 4 + - distance: 8 + destination: 4 cpus: - - 4 - - 4 + - 0 + - 0 sgx_epc_sections: - sgx_epc_sections - sgx_epc_sections memory_zones: - memory_zones - memory_zones - guest_numa_id: 0 + guest_numa_id: 6 properties: guest_numa_id: format: int32 @@ -1843,6 +1840,13 @@ components: destination_url: type: string type: object + VmCoredumpData: + example: + destination_url: destination_url + properties: + destination_url: + type: string + type: object RestoreConfig: example: prefault: true diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/api_default.go b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/api_default.go index 183bac46b..ad96f6b42 100644 --- a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/api_default.go +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/api_default.go @@ -1607,6 +1607,106 @@ func (a *DefaultApiService) VmAddVsockPutExecute(r ApiVmAddVsockPutRequest) (Pci return localVarReturnValue, localVarHTTPResponse, nil } +type ApiVmCoredumpPutRequest struct { + ctx _context.Context + ApiService *DefaultApiService + vmCoredumpData *VmCoredumpData +} + +// The coredump configuration +func (r ApiVmCoredumpPutRequest) VmCoredumpData(vmCoredumpData VmCoredumpData) ApiVmCoredumpPutRequest { + r.vmCoredumpData = &vmCoredumpData + return r +} + +func (r ApiVmCoredumpPutRequest) Execute() (*_nethttp.Response, error) { + return r.ApiService.VmCoredumpPutExecute(r) +} + +/* +VmCoredumpPut Takes a VM coredump. + + @param ctx _context.Context - for authentication, logging, cancellation, deadlines, tracing, etc. Passed from http.Request or context.Background(). + @return ApiVmCoredumpPutRequest +*/ +func (a *DefaultApiService) VmCoredumpPut(ctx _context.Context) ApiVmCoredumpPutRequest { + return ApiVmCoredumpPutRequest{ + ApiService: a, + ctx: ctx, + } +} + +// Execute executes the request +func (a *DefaultApiService) VmCoredumpPutExecute(r ApiVmCoredumpPutRequest) (*_nethttp.Response, error) { + var ( + localVarHTTPMethod = _nethttp.MethodPut + localVarPostBody interface{} + localVarFormFileName string + localVarFileName string + localVarFileBytes []byte + ) + + localBasePath, err := a.client.cfg.ServerURLWithContext(r.ctx, "DefaultApiService.VmCoredumpPut") + if err != nil { + return nil, GenericOpenAPIError{error: err.Error()} + } + + localVarPath := localBasePath + "/vm.coredump" + + localVarHeaderParams := make(map[string]string) + localVarQueryParams := _neturl.Values{} + localVarFormParams := _neturl.Values{} + if r.vmCoredumpData == nil { + return nil, reportError("vmCoredumpData is required and must be specified") + } + + // 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 = r.vmCoredumpData + req, err := a.client.prepareRequest(r.ctx, localVarPath, localVarHTTPMethod, localVarPostBody, localVarHeaderParams, localVarQueryParams, localVarFormParams, localVarFormFileName, localVarFileName, localVarFileBytes) + if err != nil { + return nil, err + } + + localVarHTTPResponse, err := a.client.callAPI(req) + if err != nil || localVarHTTPResponse == nil { + return localVarHTTPResponse, err + } + + localVarBody, err := _ioutil.ReadAll(localVarHTTPResponse.Body) + localVarHTTPResponse.Body.Close() + localVarHTTPResponse.Body = _ioutil.NopCloser(bytes.NewBuffer(localVarBody)) + if err != nil { + return localVarHTTPResponse, err + } + + if localVarHTTPResponse.StatusCode >= 300 { + newErr := GenericOpenAPIError{ + body: localVarBody, + error: localVarHTTPResponse.Status, + } + return localVarHTTPResponse, newErr + } + + return localVarHTTPResponse, nil +} + type ApiVmCountersGetRequest struct { ctx _context.Context ApiService *DefaultApiService diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/CpusConfig.md b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/CpusConfig.md index 8514e696f..ca5571d95 100644 --- a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/CpusConfig.md +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/CpusConfig.md @@ -7,6 +7,7 @@ Name | Type | Description | Notes **BootVcpus** | **int32** | | [default to 1] **MaxVcpus** | **int32** | | [default to 1] **Topology** | Pointer to [**CpuTopology**](CpuTopology.md) | | [optional] +**KvmHyperv** | Pointer to **bool** | | [optional] [default to false] **MaxPhysBits** | Pointer to **int32** | | [optional] **Affinity** | Pointer to [**[]CpuAffinity**](CpuAffinity.md) | | [optional] **Features** | Pointer to [**CpuFeatures**](CpuFeatures.md) | | [optional] @@ -95,6 +96,31 @@ SetTopology sets Topology field to given value. HasTopology returns a boolean if a field has been set. +### GetKvmHyperv + +`func (o *CpusConfig) GetKvmHyperv() bool` + +GetKvmHyperv returns the KvmHyperv field if non-nil, zero value otherwise. + +### GetKvmHypervOk + +`func (o *CpusConfig) GetKvmHypervOk() (*bool, bool)` + +GetKvmHypervOk returns a tuple with the KvmHyperv field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetKvmHyperv + +`func (o *CpusConfig) SetKvmHyperv(v bool)` + +SetKvmHyperv sets KvmHyperv field to given value. + +### HasKvmHyperv + +`func (o *CpusConfig) HasKvmHyperv() bool` + +HasKvmHyperv returns a boolean if a field has been set. + ### GetMaxPhysBits `func (o *CpusConfig) GetMaxPhysBits() int32` diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/DefaultApi.md b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/DefaultApi.md index b6e339559..8f5b8e76d 100644 --- a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/DefaultApi.md +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/DefaultApi.md @@ -20,6 +20,7 @@ Method | HTTP request | Description [**VmAddPmemPut**](DefaultApi.md#VmAddPmemPut) | **Put** /vm.add-pmem | Add a new pmem device to the VM [**VmAddVdpaPut**](DefaultApi.md#VmAddVdpaPut) | **Put** /vm.add-vdpa | Add a new vDPA device to the VM [**VmAddVsockPut**](DefaultApi.md#VmAddVsockPut) | **Put** /vm.add-vsock | Add a new vsock device to the VM +[**VmCoredumpPut**](DefaultApi.md#VmCoredumpPut) | **Put** /vm.coredump | Takes a VM coredump. [**VmCountersGet**](DefaultApi.md#VmCountersGet) | **Get** /vm.counters | Get counters from the VM [**VmInfoGet**](DefaultApi.md#VmInfoGet) | **Get** /vm.info | Returns general information about the cloud-hypervisor Virtual Machine (VM) instance. [**VmReceiveMigrationPut**](DefaultApi.md#VmReceiveMigrationPut) | **Put** /vm.receive-migration | Receive a VM migration from URL @@ -698,7 +699,7 @@ import ( ) func main() { - fsConfig := *openapiclient.NewFsConfig("Tag_example", "Socket_example", int32(123), int32(123), false, int64(123)) // FsConfig | The details of the new virtio-fs + fsConfig := *openapiclient.NewFsConfig("Tag_example", "Socket_example", int32(123), int32(123)) // FsConfig | The details of the new virtio-fs configuration := openapiclient.NewConfiguration() api_client := openapiclient.NewAPIClient(configuration) @@ -999,6 +1000,68 @@ No authorization required [[Back to README]](../README.md) +## VmCoredumpPut + +> VmCoredumpPut(ctx).VmCoredumpData(vmCoredumpData).Execute() + +Takes a VM coredump. + +### Example + +```go +package main + +import ( + "context" + "fmt" + "os" + openapiclient "./openapi" +) + +func main() { + vmCoredumpData := *openapiclient.NewVmCoredumpData() // VmCoredumpData | The coredump configuration + + configuration := openapiclient.NewConfiguration() + api_client := openapiclient.NewAPIClient(configuration) + resp, r, err := api_client.DefaultApi.VmCoredumpPut(context.Background()).VmCoredumpData(vmCoredumpData).Execute() + if err != nil { + fmt.Fprintf(os.Stderr, "Error when calling `DefaultApi.VmCoredumpPut``: %v\n", err) + fmt.Fprintf(os.Stderr, "Full HTTP response: %v\n", r) + } +} +``` + +### Path Parameters + + + +### Other Parameters + +Other parameters are passed through a pointer to a apiVmCoredumpPutRequest struct via the builder pattern + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **vmCoredumpData** | [**VmCoredumpData**](VmCoredumpData.md) | The coredump 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) + + ## VmCountersGet > map[string]map[string]int64 VmCountersGet(ctx).Execute() diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/FsConfig.md b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/FsConfig.md index daf24d2bc..6979bf128 100644 --- a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/FsConfig.md +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/FsConfig.md @@ -8,8 +8,6 @@ Name | Type | Description | Notes **Socket** | **string** | | **NumQueues** | **int32** | | [default to 1] **QueueSize** | **int32** | | [default to 1024] -**Dax** | **bool** | | [default to true] -**CacheSize** | **int64** | | **PciSegment** | Pointer to **int32** | | [optional] **Id** | Pointer to **string** | | [optional] @@ -17,7 +15,7 @@ Name | Type | Description | Notes ### NewFsConfig -`func NewFsConfig(tag string, socket string, numQueues int32, queueSize int32, dax bool, cacheSize int64, ) *FsConfig` +`func NewFsConfig(tag string, socket string, numQueues int32, queueSize int32, ) *FsConfig` NewFsConfig instantiates a new FsConfig object This constructor will assign default values to properties that have it defined, @@ -112,46 +110,6 @@ and a boolean to check if the value has been set. SetQueueSize sets QueueSize field to given value. -### GetDax - -`func (o *FsConfig) GetDax() bool` - -GetDax returns the Dax field if non-nil, zero value otherwise. - -### GetDaxOk - -`func (o *FsConfig) GetDaxOk() (*bool, bool)` - -GetDaxOk returns a tuple with the Dax field if it's non-nil, zero value otherwise -and a boolean to check if the value has been set. - -### SetDax - -`func (o *FsConfig) SetDax(v bool)` - -SetDax sets Dax field to given value. - - -### GetCacheSize - -`func (o *FsConfig) GetCacheSize() int64` - -GetCacheSize returns the CacheSize field if non-nil, zero value otherwise. - -### GetCacheSizeOk - -`func (o *FsConfig) GetCacheSizeOk() (*int64, bool)` - -GetCacheSizeOk returns a tuple with the CacheSize field if it's non-nil, zero value otherwise -and a boolean to check if the value has been set. - -### SetCacheSize - -`func (o *FsConfig) SetCacheSize(v int64)` - -SetCacheSize sets CacheSize field to given value. - - ### GetPciSegment `func (o *FsConfig) GetPciSegment() int32` diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/PmemConfig.md b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/PmemConfig.md index 82f206551..f15170cfb 100644 --- a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/PmemConfig.md +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/PmemConfig.md @@ -7,7 +7,6 @@ Name | Type | Description | Notes **File** | **string** | | **Size** | Pointer to **int64** | | [optional] **Iommu** | Pointer to **bool** | | [optional] [default to false] -**Mergeable** | Pointer to **bool** | | [optional] [default to false] **DiscardWrites** | Pointer to **bool** | | [optional] [default to false] **PciSegment** | Pointer to **int32** | | [optional] **Id** | Pointer to **string** | | [optional] @@ -101,31 +100,6 @@ SetIommu sets Iommu field to given value. HasIommu returns a boolean if a field has been set. -### GetMergeable - -`func (o *PmemConfig) GetMergeable() bool` - -GetMergeable returns the Mergeable field if non-nil, zero value otherwise. - -### GetMergeableOk - -`func (o *PmemConfig) GetMergeableOk() (*bool, bool)` - -GetMergeableOk returns a tuple with the Mergeable field if it's non-nil, zero value otherwise -and a boolean to check if the value has been set. - -### SetMergeable - -`func (o *PmemConfig) SetMergeable(v bool)` - -SetMergeable sets Mergeable field to given value. - -### HasMergeable - -`func (o *PmemConfig) HasMergeable() bool` - -HasMergeable returns a boolean if a field has been set. - ### GetDiscardWrites `func (o *PmemConfig) GetDiscardWrites() bool` diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/VmCoredumpData.md b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/VmCoredumpData.md new file mode 100644 index 000000000..581874940 --- /dev/null +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/docs/VmCoredumpData.md @@ -0,0 +1,56 @@ +# VmCoredumpData + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**DestinationUrl** | Pointer to **string** | | [optional] + +## Methods + +### NewVmCoredumpData + +`func NewVmCoredumpData() *VmCoredumpData` + +NewVmCoredumpData instantiates a new VmCoredumpData object +This constructor will assign default values to properties that have it defined, +and makes sure properties required by API are set, but the set of arguments +will change when the set of required properties is changed + +### NewVmCoredumpDataWithDefaults + +`func NewVmCoredumpDataWithDefaults() *VmCoredumpData` + +NewVmCoredumpDataWithDefaults instantiates a new VmCoredumpData object +This constructor will only assign default values to properties that have it defined, +but it doesn't guarantee that properties required by API are set + +### GetDestinationUrl + +`func (o *VmCoredumpData) GetDestinationUrl() string` + +GetDestinationUrl returns the DestinationUrl field if non-nil, zero value otherwise. + +### GetDestinationUrlOk + +`func (o *VmCoredumpData) GetDestinationUrlOk() (*string, bool)` + +GetDestinationUrlOk returns a tuple with the DestinationUrl field if it's non-nil, zero value otherwise +and a boolean to check if the value has been set. + +### SetDestinationUrl + +`func (o *VmCoredumpData) SetDestinationUrl(v string)` + +SetDestinationUrl sets DestinationUrl field to given value. + +### HasDestinationUrl + +`func (o *VmCoredumpData) HasDestinationUrl() bool` + +HasDestinationUrl returns a boolean if a field has been set. + + +[[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/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_cpus_config.go b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_cpus_config.go index cbcd4e034..9578f2db1 100644 --- a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_cpus_config.go +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_cpus_config.go @@ -19,6 +19,7 @@ type CpusConfig struct { BootVcpus int32 `json:"boot_vcpus"` MaxVcpus int32 `json:"max_vcpus"` Topology *CpuTopology `json:"topology,omitempty"` + KvmHyperv *bool `json:"kvm_hyperv,omitempty"` MaxPhysBits *int32 `json:"max_phys_bits,omitempty"` Affinity *[]CpuAffinity `json:"affinity,omitempty"` Features *CpuFeatures `json:"features,omitempty"` @@ -32,6 +33,8 @@ func NewCpusConfig(bootVcpus int32, maxVcpus int32) *CpusConfig { this := CpusConfig{} this.BootVcpus = bootVcpus this.MaxVcpus = maxVcpus + var kvmHyperv bool = false + this.KvmHyperv = &kvmHyperv return &this } @@ -44,6 +47,8 @@ func NewCpusConfigWithDefaults() *CpusConfig { this.BootVcpus = bootVcpus var maxVcpus int32 = 1 this.MaxVcpus = maxVcpus + var kvmHyperv bool = false + this.KvmHyperv = &kvmHyperv return &this } @@ -127,6 +132,38 @@ func (o *CpusConfig) SetTopology(v CpuTopology) { o.Topology = &v } +// GetKvmHyperv returns the KvmHyperv field value if set, zero value otherwise. +func (o *CpusConfig) GetKvmHyperv() bool { + if o == nil || o.KvmHyperv == nil { + var ret bool + return ret + } + return *o.KvmHyperv +} + +// GetKvmHypervOk returns a tuple with the KvmHyperv field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *CpusConfig) GetKvmHypervOk() (*bool, bool) { + if o == nil || o.KvmHyperv == nil { + return nil, false + } + return o.KvmHyperv, true +} + +// HasKvmHyperv returns a boolean if a field has been set. +func (o *CpusConfig) HasKvmHyperv() bool { + if o != nil && o.KvmHyperv != nil { + return true + } + + return false +} + +// SetKvmHyperv gets a reference to the given bool and assigns it to the KvmHyperv field. +func (o *CpusConfig) SetKvmHyperv(v bool) { + o.KvmHyperv = &v +} + // GetMaxPhysBits returns the MaxPhysBits field value if set, zero value otherwise. func (o *CpusConfig) GetMaxPhysBits() int32 { if o == nil || o.MaxPhysBits == nil { @@ -234,6 +271,9 @@ func (o CpusConfig) MarshalJSON() ([]byte, error) { if o.Topology != nil { toSerialize["topology"] = o.Topology } + if o.KvmHyperv != nil { + toSerialize["kvm_hyperv"] = o.KvmHyperv + } if o.MaxPhysBits != nil { toSerialize["max_phys_bits"] = o.MaxPhysBits } diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_fs_config.go b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_fs_config.go index 7e4399077..0b1bd40c8 100644 --- a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_fs_config.go +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_fs_config.go @@ -20,8 +20,6 @@ type FsConfig struct { Socket string `json:"socket"` NumQueues int32 `json:"num_queues"` QueueSize int32 `json:"queue_size"` - Dax bool `json:"dax"` - CacheSize int64 `json:"cache_size"` PciSegment *int32 `json:"pci_segment,omitempty"` Id *string `json:"id,omitempty"` } @@ -30,14 +28,12 @@ type FsConfig struct { // This constructor will assign default values to properties that have it defined, // and makes sure properties required by API are set, but the set of arguments // will change when the set of required properties is changed -func NewFsConfig(tag string, socket string, numQueues int32, queueSize int32, dax bool, cacheSize int64) *FsConfig { +func NewFsConfig(tag string, socket string, numQueues int32, queueSize int32) *FsConfig { this := FsConfig{} this.Tag = tag this.Socket = socket this.NumQueues = numQueues this.QueueSize = queueSize - this.Dax = dax - this.CacheSize = cacheSize return &this } @@ -50,8 +46,6 @@ func NewFsConfigWithDefaults() *FsConfig { this.NumQueues = numQueues var queueSize int32 = 1024 this.QueueSize = queueSize - var dax bool = true - this.Dax = dax return &this } @@ -151,54 +145,6 @@ func (o *FsConfig) SetQueueSize(v int32) { o.QueueSize = v } -// GetDax returns the Dax field value -func (o *FsConfig) GetDax() bool { - if o == nil { - var ret bool - return ret - } - - return o.Dax -} - -// GetDaxOk returns a tuple with the Dax field value -// and a boolean to check if the value has been set. -func (o *FsConfig) GetDaxOk() (*bool, bool) { - if o == nil { - return nil, false - } - return &o.Dax, true -} - -// SetDax sets field value -func (o *FsConfig) SetDax(v bool) { - o.Dax = v -} - -// GetCacheSize returns the CacheSize field value -func (o *FsConfig) GetCacheSize() int64 { - if o == nil { - var ret int64 - return ret - } - - return o.CacheSize -} - -// GetCacheSizeOk returns a tuple with the CacheSize field value -// and a boolean to check if the value has been set. -func (o *FsConfig) GetCacheSizeOk() (*int64, bool) { - if o == nil { - return nil, false - } - return &o.CacheSize, true -} - -// SetCacheSize sets field value -func (o *FsConfig) SetCacheSize(v int64) { - o.CacheSize = v -} - // GetPciSegment returns the PciSegment field value if set, zero value otherwise. func (o *FsConfig) GetPciSegment() int32 { if o == nil || o.PciSegment == nil { @@ -277,12 +223,6 @@ func (o FsConfig) MarshalJSON() ([]byte, error) { if true { toSerialize["queue_size"] = o.QueueSize } - if true { - toSerialize["dax"] = o.Dax - } - if true { - toSerialize["cache_size"] = o.CacheSize - } if o.PciSegment != nil { toSerialize["pci_segment"] = o.PciSegment } diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_pmem_config.go b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_pmem_config.go index 69f45732f..5a4d77653 100644 --- a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_pmem_config.go +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_pmem_config.go @@ -19,7 +19,6 @@ type PmemConfig struct { File string `json:"file"` Size *int64 `json:"size,omitempty"` Iommu *bool `json:"iommu,omitempty"` - Mergeable *bool `json:"mergeable,omitempty"` DiscardWrites *bool `json:"discard_writes,omitempty"` PciSegment *int32 `json:"pci_segment,omitempty"` Id *string `json:"id,omitempty"` @@ -34,8 +33,6 @@ func NewPmemConfig(file string) *PmemConfig { this.File = file var iommu bool = false this.Iommu = &iommu - var mergeable bool = false - this.Mergeable = &mergeable var discardWrites bool = false this.DiscardWrites = &discardWrites return &this @@ -48,8 +45,6 @@ func NewPmemConfigWithDefaults() *PmemConfig { this := PmemConfig{} var iommu bool = false this.Iommu = &iommu - var mergeable bool = false - this.Mergeable = &mergeable var discardWrites bool = false this.DiscardWrites = &discardWrites return &this @@ -143,38 +138,6 @@ func (o *PmemConfig) SetIommu(v bool) { o.Iommu = &v } -// GetMergeable returns the Mergeable field value if set, zero value otherwise. -func (o *PmemConfig) GetMergeable() bool { - if o == nil || o.Mergeable == nil { - var ret bool - return ret - } - return *o.Mergeable -} - -// GetMergeableOk returns a tuple with the Mergeable field value if set, nil otherwise -// and a boolean to check if the value has been set. -func (o *PmemConfig) GetMergeableOk() (*bool, bool) { - if o == nil || o.Mergeable == nil { - return nil, false - } - return o.Mergeable, true -} - -// HasMergeable returns a boolean if a field has been set. -func (o *PmemConfig) HasMergeable() bool { - if o != nil && o.Mergeable != nil { - return true - } - - return false -} - -// SetMergeable gets a reference to the given bool and assigns it to the Mergeable field. -func (o *PmemConfig) SetMergeable(v bool) { - o.Mergeable = &v -} - // GetDiscardWrites returns the DiscardWrites field value if set, zero value otherwise. func (o *PmemConfig) GetDiscardWrites() bool { if o == nil || o.DiscardWrites == nil { @@ -282,9 +245,6 @@ func (o PmemConfig) MarshalJSON() ([]byte, error) { if o.Iommu != nil { toSerialize["iommu"] = o.Iommu } - if o.Mergeable != nil { - toSerialize["mergeable"] = o.Mergeable - } if o.DiscardWrites != nil { toSerialize["discard_writes"] = o.DiscardWrites } diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_vm_coredump_data.go b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_vm_coredump_data.go new file mode 100644 index 000000000..cdde56585 --- /dev/null +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/client/model_vm_coredump_data.go @@ -0,0 +1,113 @@ +/* +Cloud Hypervisor API + +Local HTTP based API for managing and inspecting a cloud-hypervisor virtual machine. + +API version: 0.3.0 +*/ + +// Code generated by OpenAPI Generator (https://openapi-generator.tech); DO NOT EDIT. + +package openapi + +import ( + "encoding/json" +) + +// VmCoredumpData struct for VmCoredumpData +type VmCoredumpData struct { + DestinationUrl *string `json:"destination_url,omitempty"` +} + +// NewVmCoredumpData instantiates a new VmCoredumpData object +// This constructor will assign default values to properties that have it defined, +// and makes sure properties required by API are set, but the set of arguments +// will change when the set of required properties is changed +func NewVmCoredumpData() *VmCoredumpData { + this := VmCoredumpData{} + return &this +} + +// NewVmCoredumpDataWithDefaults instantiates a new VmCoredumpData object +// This constructor will only assign default values to properties that have it defined, +// but it doesn't guarantee that properties required by API are set +func NewVmCoredumpDataWithDefaults() *VmCoredumpData { + this := VmCoredumpData{} + return &this +} + +// GetDestinationUrl returns the DestinationUrl field value if set, zero value otherwise. +func (o *VmCoredumpData) GetDestinationUrl() string { + if o == nil || o.DestinationUrl == nil { + var ret string + return ret + } + return *o.DestinationUrl +} + +// GetDestinationUrlOk returns a tuple with the DestinationUrl field value if set, nil otherwise +// and a boolean to check if the value has been set. +func (o *VmCoredumpData) GetDestinationUrlOk() (*string, bool) { + if o == nil || o.DestinationUrl == nil { + return nil, false + } + return o.DestinationUrl, true +} + +// HasDestinationUrl returns a boolean if a field has been set. +func (o *VmCoredumpData) HasDestinationUrl() bool { + if o != nil && o.DestinationUrl != nil { + return true + } + + return false +} + +// SetDestinationUrl gets a reference to the given string and assigns it to the DestinationUrl field. +func (o *VmCoredumpData) SetDestinationUrl(v string) { + o.DestinationUrl = &v +} + +func (o VmCoredumpData) MarshalJSON() ([]byte, error) { + toSerialize := map[string]interface{}{} + if o.DestinationUrl != nil { + toSerialize["destination_url"] = o.DestinationUrl + } + return json.Marshal(toSerialize) +} + +type NullableVmCoredumpData struct { + value *VmCoredumpData + isSet bool +} + +func (v NullableVmCoredumpData) Get() *VmCoredumpData { + return v.value +} + +func (v *NullableVmCoredumpData) Set(val *VmCoredumpData) { + v.value = val + v.isSet = true +} + +func (v NullableVmCoredumpData) IsSet() bool { + return v.isSet +} + +func (v *NullableVmCoredumpData) Unset() { + v.value = nil + v.isSet = false +} + +func NewNullableVmCoredumpData(val *VmCoredumpData) *NullableVmCoredumpData { + return &NullableVmCoredumpData{value: val, isSet: true} +} + +func (v NullableVmCoredumpData) MarshalJSON() ([]byte, error) { + return json.Marshal(v.value) +} + +func (v *NullableVmCoredumpData) UnmarshalJSON(src []byte) error { + v.isSet = true + return json.Unmarshal(src, &v.value) +} diff --git a/src/runtime/virtcontainers/pkg/cloud-hypervisor/cloud-hypervisor.yaml b/src/runtime/virtcontainers/pkg/cloud-hypervisor/cloud-hypervisor.yaml index 4c0cff139..705293f1f 100644 --- a/src/runtime/virtcontainers/pkg/cloud-hypervisor/cloud-hypervisor.yaml +++ b/src/runtime/virtcontainers/pkg/cloud-hypervisor/cloud-hypervisor.yaml @@ -366,6 +366,24 @@ paths: 405: description: The VM instance could not be snapshotted because it is not booted. + /vm.coredump: + put: + summary: Takes a VM coredump. + requestBody: + description: The coredump configuration + content: + application/json: + schema: + $ref: '#/components/schemas/VmCoredumpData' + required: true + responses: + 204: + description: The VM instance was successfully coredumped. + 404: + description: The VM instance could not be coredumped because it is not created. + 405: + description: The VM instance could not be coredumped because it is not booted. + /vm.restore: put: summary: Restore a VM from a snapshot. @@ -596,6 +614,9 @@ components: type: integer topology: $ref: '#/components/schemas/CpuTopology' + kvm_hyperv: + type: boolean + default: false max_phys_bits: type: integer affinity: @@ -870,8 +891,6 @@ components: FsConfig: required: - - cache_size - - dax - num_queues - queue_size - socket @@ -888,13 +907,6 @@ components: queue_size: type: integer default: 1024 - dax: - type: boolean - default: true - cache_size: - type: integer - format: int64 - default: 8589934592 pci_segment: type: integer format: int16 @@ -914,9 +926,6 @@ components: iommu: type: boolean default: false - mergeable: - type: boolean - default: false discard_writes: type: boolean default: false @@ -1110,6 +1119,12 @@ components: destination_url: type: string + VmCoredumpData: + type: object + properties: + destination_url: + type: string + RestoreConfig: required: - source_url diff --git a/versions.yaml b/versions.yaml index 2c12d1ee4..b8ffaca12 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: "v24.0" + version: "v25.0" firecracker: description: "Firecracker micro-VMM"