mirror of
https://github.com/containers/podman.git
synced 2025-06-25 12:20:42 +08:00
Merge pull request #17949 from baude/hypervset
implement podman machine set for hyperv
This commit is contained in:
@ -283,7 +283,67 @@ func (m *HyperVMachine) Remove(_ string, opts machine.RemoveOptions) (string, fu
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *HyperVMachine) Set(name string, opts machine.SetOptions) ([]error, error) {
|
func (m *HyperVMachine) Set(name string, opts machine.SetOptions) ([]error, error) {
|
||||||
return nil, machine.ErrNotImplemented
|
var (
|
||||||
|
cpuChanged, memoryChanged bool
|
||||||
|
setErrors []error
|
||||||
|
)
|
||||||
|
vmm := hypervctl.NewVirtualMachineManager()
|
||||||
|
// Considering this a hard return if we cannot lookup the machine
|
||||||
|
vm, err := vmm.GetMachine(m.Name)
|
||||||
|
if err != nil {
|
||||||
|
return setErrors, err
|
||||||
|
}
|
||||||
|
if vm.State() != hypervctl.Disabled {
|
||||||
|
return nil, errors.New("unable to change settings unless vm is stopped")
|
||||||
|
}
|
||||||
|
|
||||||
|
if opts.Rootful != nil && m.Rootful != *opts.Rootful {
|
||||||
|
setErrors = append(setErrors, hypervctl.ErrNotImplemented)
|
||||||
|
}
|
||||||
|
if opts.DiskSize != nil && m.DiskSize != *opts.DiskSize {
|
||||||
|
setErrors = append(setErrors, hypervctl.ErrNotImplemented)
|
||||||
|
}
|
||||||
|
if opts.CPUs != nil && m.CPUs != *opts.CPUs {
|
||||||
|
m.CPUs = *opts.CPUs
|
||||||
|
cpuChanged = true
|
||||||
|
}
|
||||||
|
if opts.Memory != nil && m.Memory != *opts.Memory {
|
||||||
|
m.Memory = *opts.Memory
|
||||||
|
memoryChanged = true
|
||||||
|
}
|
||||||
|
|
||||||
|
if !cpuChanged && !memoryChanged {
|
||||||
|
switch len(setErrors) {
|
||||||
|
case 0:
|
||||||
|
return nil, nil
|
||||||
|
case 1:
|
||||||
|
return nil, setErrors[0]
|
||||||
|
default:
|
||||||
|
return setErrors[1:], setErrors[0]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Write the new JSON out
|
||||||
|
// considering this a hard return if we cannot write the JSON file.
|
||||||
|
b, err := json.MarshalIndent(m, "", " ")
|
||||||
|
if err != nil {
|
||||||
|
return setErrors, err
|
||||||
|
}
|
||||||
|
if err := os.WriteFile(m.ConfigPath.GetPath(), b, 0644); err != nil {
|
||||||
|
return setErrors, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return setErrors, vm.UpdateProcessorMemSettings(func(ps *hypervctl.ProcessorSettings) {
|
||||||
|
if cpuChanged {
|
||||||
|
ps.VirtualQuantity = m.CPUs
|
||||||
|
}
|
||||||
|
}, func(ms *hypervctl.MemorySettings) {
|
||||||
|
if memoryChanged {
|
||||||
|
ms.DynamicMemoryEnabled = false
|
||||||
|
ms.VirtualQuantity = m.Memory
|
||||||
|
ms.Limit = m.Memory
|
||||||
|
ms.Reservation = m.Memory
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *HyperVMachine) SSH(name string, opts machine.SSHOptions) error {
|
func (m *HyperVMachine) SSH(name string, opts machine.SSHOptions) error {
|
||||||
|
Reference in New Issue
Block a user