Files
cloudpods/pkg/multicloud/esxi/device.go

110 lines
2.8 KiB
Go

// Copyright 2019 Yunion
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package esxi
import (
"reflect"
"strings"
"github.com/vmware/govmomi/vim25/types"
)
type SVirtualDevice struct {
vm *SVirtualMachine
dev types.BaseVirtualDevice
index int
}
func NewVirtualDevice(vm *SVirtualMachine, dev types.BaseVirtualDevice, index int) SVirtualDevice {
return SVirtualDevice{
vm: vm,
dev: dev,
index: index,
}
}
func (dev *SVirtualDevice) getKey() int32 {
return dev.dev.GetVirtualDevice().Key
}
func (dev *SVirtualDevice) getControllerKey() int32 {
return dev.dev.GetVirtualDevice().ControllerKey
}
func (dev *SVirtualDevice) GetIndex() int {
return dev.index
}
func (dev *SVirtualDevice) getLabel() string {
return dev.dev.GetVirtualDevice().DeviceInfo.GetDescription().Label
}
func (dev *SVirtualDevice) GetDriver() string {
return getDevName(dev.dev)
}
func getDevName(device types.BaseVirtualDevice) string {
val := reflect.Indirect(reflect.ValueOf(device))
driver := strings.ToLower(val.Type().Name())
if strings.Contains(driver, "virtualmachine") {
return strings.Replace(driver, "virtualmachine", "", -1)
} else if strings.Contains(driver, "virtual") {
return strings.Replace(driver, "virtual", "", -1)
} else {
return driver
}
}
type SVirtualVGA struct {
SVirtualDevice
}
func NewVirtualVGA(vm *SVirtualMachine, dev types.BaseVirtualDevice, index int) SVirtualVGA {
return SVirtualVGA{
NewVirtualDevice(vm, dev, index),
}
}
func (vga *SVirtualVGA) getVirtualMachineVideoCard() *types.VirtualMachineVideoCard {
return vga.dev.(*types.VirtualMachineVideoCard)
}
func (vga *SVirtualVGA) GetEnable3D() bool {
p3d := vga.getVirtualMachineVideoCard().Enable3DSupport
return p3d != nil && *p3d
}
func (vga *SVirtualVGA) GetRamSizeMB() int {
return int(vga.getVirtualMachineVideoCard().VideoRamSizeInKB / 1024)
}
func (vga *SVirtualVGA) String() string {
return vga.getVirtualMachineVideoCard().DeviceInfo.GetDescription().Summary
}
type SVirtualCdrom struct {
SVirtualDevice
}
func NewVirtualCdrom(vm *SVirtualMachine, dev types.BaseVirtualDevice, index int) SVirtualCdrom {
return SVirtualCdrom{
NewVirtualDevice(vm, dev, index),
}
}
func (cdrom *SVirtualCdrom) getVirtualCdrom() *types.VirtualCdrom {
return cdrom.dev.(*types.VirtualCdrom)
}