device.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package esxi
  15. import (
  16. "reflect"
  17. "strings"
  18. "github.com/vmware/govmomi/vim25/types"
  19. )
  20. type SVirtualDevice struct {
  21. vm *SVirtualMachine
  22. dev types.BaseVirtualDevice
  23. index int
  24. }
  25. func NewVirtualDevice(vm *SVirtualMachine, dev types.BaseVirtualDevice, index int) SVirtualDevice {
  26. return SVirtualDevice{
  27. vm: vm,
  28. dev: dev,
  29. index: index,
  30. }
  31. }
  32. func (dev *SVirtualDevice) getKey() int32 {
  33. return dev.dev.GetVirtualDevice().Key
  34. }
  35. func (dev *SVirtualDevice) getControllerKey() int32 {
  36. return dev.dev.GetVirtualDevice().ControllerKey
  37. }
  38. func (dev *SVirtualDevice) GetIndex() int {
  39. return dev.index
  40. }
  41. func (dev *SVirtualDevice) getLabel() string {
  42. return dev.dev.GetVirtualDevice().DeviceInfo.GetDescription().Label
  43. }
  44. func (dev *SVirtualDevice) GetDriver() string {
  45. return getDevName(dev.dev)
  46. }
  47. func getDevName(device types.BaseVirtualDevice) string {
  48. val := reflect.Indirect(reflect.ValueOf(device))
  49. driver := strings.ToLower(val.Type().Name())
  50. if strings.Contains(driver, "virtualmachine") {
  51. return strings.Replace(driver, "virtualmachine", "", -1)
  52. } else if strings.Contains(driver, "virtual") {
  53. return strings.Replace(driver, "virtual", "", -1)
  54. } else {
  55. return driver
  56. }
  57. }
  58. type SVirtualVGA struct {
  59. SVirtualDevice
  60. }
  61. func NewVirtualVGA(vm *SVirtualMachine, dev types.BaseVirtualDevice, index int) SVirtualVGA {
  62. return SVirtualVGA{
  63. NewVirtualDevice(vm, dev, index),
  64. }
  65. }
  66. func (vga *SVirtualVGA) getVirtualMachineVideoCard() *types.VirtualMachineVideoCard {
  67. return vga.dev.(*types.VirtualMachineVideoCard)
  68. }
  69. func (vga *SVirtualVGA) GetEnable3D() bool {
  70. p3d := vga.getVirtualMachineVideoCard().Enable3DSupport
  71. return p3d != nil && *p3d
  72. }
  73. func (vga *SVirtualVGA) GetRamSizeMB() int {
  74. return int(vga.getVirtualMachineVideoCard().VideoRamSizeInKB / 1024)
  75. }
  76. func (vga *SVirtualVGA) String() string {
  77. return vga.getVirtualMachineVideoCard().DeviceInfo.GetDescription().Summary
  78. }
  79. type SVirtualCdrom struct {
  80. SVirtualDevice
  81. }
  82. func NewVirtualCdrom(vm *SVirtualMachine, dev types.BaseVirtualDevice, index int) SVirtualCdrom {
  83. return SVirtualCdrom{
  84. NewVirtualDevice(vm, dev, index),
  85. }
  86. }
  87. func (cdrom *SVirtualCdrom) getVirtualCdrom() *types.VirtualCdrom {
  88. return cdrom.dev.(*types.VirtualCdrom)
  89. }