versions: Update Cloud Hypervisor to v25.0

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 <fabiano.fidencio@intel.com>
This commit is contained in:
Fabiano Fidêncio 2022-07-12 14:33:57 +00:00
parent 9f0e4bb775
commit dc3b6f6592
16 changed files with 533 additions and 283 deletions

View File

@ -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)

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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`

View File

@ -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()

View File

@ -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`

View File

@ -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`

View File

@ -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)

View File

@ -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
}

View File

@ -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
}

View File

@ -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
}

View File

@ -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)
}

View File

@ -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

View File

@ -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"