mirror of
https://github.com/containers/podman.git
synced 2025-12-02 11:08:36 +08:00
70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
//go:build windows
|
|
// +build windows
|
|
|
|
package hypervctl
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/containers/libhvee/pkg/wmiext"
|
|
)
|
|
|
|
type ScsiControllerSettings struct {
|
|
ResourceSettings
|
|
systemSettings *SystemSettings
|
|
}
|
|
|
|
type driveAssociation interface {
|
|
setParent(parent string)
|
|
setAddressOnParent(address string)
|
|
}
|
|
|
|
func (c *ScsiControllerSettings) AddSyntheticDiskDrive(slot uint) (*SyntheticDiskDriveSettings, error) {
|
|
drive := &SyntheticDiskDriveSettings{}
|
|
if err := c.createSyntheticDriveInternal(slot, drive, SyntheticDiskDriveType); err != nil {
|
|
return nil, err
|
|
}
|
|
drive.systemSettings = c.systemSettings
|
|
drive.controllerSettings = c
|
|
return drive, nil
|
|
}
|
|
|
|
func (c *ScsiControllerSettings) AddSyntheticDvdDrive(slot uint) (*SyntheticDvdDriveSettings, error) {
|
|
drive := &SyntheticDvdDriveSettings{}
|
|
if err := c.createSyntheticDriveInternal(slot, drive, SyntheticDvdDriveType); err != nil {
|
|
return nil, err
|
|
}
|
|
drive.systemSettings = c.systemSettings
|
|
drive.controllerSettings = c
|
|
return drive, nil
|
|
}
|
|
|
|
func (c *ScsiControllerSettings) createSyntheticDriveInternal(slot uint, settings driveAssociation, resourceType string) error {
|
|
var service *wmiext.Service
|
|
var err error
|
|
if service, err = NewLocalHyperVService(); err != nil {
|
|
return err
|
|
}
|
|
defer service.Close()
|
|
|
|
if err = populateDefaults(resourceType, settings); err != nil {
|
|
return err
|
|
}
|
|
|
|
settings.setParent(c.Path())
|
|
settings.setAddressOnParent(fmt.Sprintf("%d", slot))
|
|
|
|
driveResource, err := createResourceSettingGeneric(settings, resourceType)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
path, err := addResource(service, c.systemSettings.Path(), driveResource)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = service.GetObjectAsObject(path, settings)
|
|
return err
|
|
}
|