virtual_disk_manager.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. /*
  2. Copyright (c) 2015 VMware, Inc. All Rights Reserved.
  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. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License.
  12. */
  13. package object
  14. import (
  15. "context"
  16. "github.com/vmware/govmomi/vim25"
  17. "github.com/vmware/govmomi/vim25/methods"
  18. "github.com/vmware/govmomi/vim25/types"
  19. )
  20. type VirtualDiskManager struct {
  21. Common
  22. }
  23. func NewVirtualDiskManager(c *vim25.Client) *VirtualDiskManager {
  24. m := VirtualDiskManager{
  25. Common: NewCommon(c, *c.ServiceContent.VirtualDiskManager),
  26. }
  27. return &m
  28. }
  29. // CopyVirtualDisk copies a virtual disk, performing conversions as specified in the spec.
  30. func (m VirtualDiskManager) CopyVirtualDisk(
  31. ctx context.Context,
  32. sourceName string, sourceDatacenter *Datacenter,
  33. destName string, destDatacenter *Datacenter,
  34. destSpec *types.VirtualDiskSpec, force bool) (*Task, error) {
  35. req := types.CopyVirtualDisk_Task{
  36. This: m.Reference(),
  37. SourceName: sourceName,
  38. DestName: destName,
  39. DestSpec: destSpec,
  40. Force: types.NewBool(force),
  41. }
  42. if sourceDatacenter != nil {
  43. ref := sourceDatacenter.Reference()
  44. req.SourceDatacenter = &ref
  45. }
  46. if destDatacenter != nil {
  47. ref := destDatacenter.Reference()
  48. req.DestDatacenter = &ref
  49. }
  50. res, err := methods.CopyVirtualDisk_Task(ctx, m.c, &req)
  51. if err != nil {
  52. return nil, err
  53. }
  54. return NewTask(m.c, res.Returnval), nil
  55. }
  56. // CreateVirtualDisk creates a new virtual disk.
  57. func (m VirtualDiskManager) CreateVirtualDisk(
  58. ctx context.Context,
  59. name string, datacenter *Datacenter,
  60. spec types.BaseVirtualDiskSpec) (*Task, error) {
  61. req := types.CreateVirtualDisk_Task{
  62. This: m.Reference(),
  63. Name: name,
  64. Spec: spec,
  65. }
  66. if datacenter != nil {
  67. ref := datacenter.Reference()
  68. req.Datacenter = &ref
  69. }
  70. res, err := methods.CreateVirtualDisk_Task(ctx, m.c, &req)
  71. if err != nil {
  72. return nil, err
  73. }
  74. return NewTask(m.c, res.Returnval), nil
  75. }
  76. // MoveVirtualDisk moves a virtual disk.
  77. func (m VirtualDiskManager) MoveVirtualDisk(
  78. ctx context.Context,
  79. sourceName string, sourceDatacenter *Datacenter,
  80. destName string, destDatacenter *Datacenter,
  81. force bool) (*Task, error) {
  82. req := types.MoveVirtualDisk_Task{
  83. This: m.Reference(),
  84. SourceName: sourceName,
  85. DestName: destName,
  86. Force: types.NewBool(force),
  87. }
  88. if sourceDatacenter != nil {
  89. ref := sourceDatacenter.Reference()
  90. req.SourceDatacenter = &ref
  91. }
  92. if destDatacenter != nil {
  93. ref := destDatacenter.Reference()
  94. req.DestDatacenter = &ref
  95. }
  96. res, err := methods.MoveVirtualDisk_Task(ctx, m.c, &req)
  97. if err != nil {
  98. return nil, err
  99. }
  100. return NewTask(m.c, res.Returnval), nil
  101. }
  102. // DeleteVirtualDisk deletes a virtual disk.
  103. func (m VirtualDiskManager) DeleteVirtualDisk(ctx context.Context, name string, dc *Datacenter) (*Task, error) {
  104. req := types.DeleteVirtualDisk_Task{
  105. This: m.Reference(),
  106. Name: name,
  107. }
  108. if dc != nil {
  109. ref := dc.Reference()
  110. req.Datacenter = &ref
  111. }
  112. res, err := methods.DeleteVirtualDisk_Task(ctx, m.c, &req)
  113. if err != nil {
  114. return nil, err
  115. }
  116. return NewTask(m.c, res.Returnval), nil
  117. }
  118. // InflateVirtualDisk inflates a virtual disk.
  119. func (m VirtualDiskManager) InflateVirtualDisk(ctx context.Context, name string, dc *Datacenter) (*Task, error) {
  120. req := types.InflateVirtualDisk_Task{
  121. This: m.Reference(),
  122. Name: name,
  123. }
  124. if dc != nil {
  125. ref := dc.Reference()
  126. req.Datacenter = &ref
  127. }
  128. res, err := methods.InflateVirtualDisk_Task(ctx, m.c, &req)
  129. if err != nil {
  130. return nil, err
  131. }
  132. return NewTask(m.c, res.Returnval), nil
  133. }
  134. // ShrinkVirtualDisk shrinks a virtual disk.
  135. func (m VirtualDiskManager) ShrinkVirtualDisk(ctx context.Context, name string, dc *Datacenter, copy *bool) (*Task, error) {
  136. req := types.ShrinkVirtualDisk_Task{
  137. This: m.Reference(),
  138. Name: name,
  139. Copy: copy,
  140. }
  141. if dc != nil {
  142. ref := dc.Reference()
  143. req.Datacenter = &ref
  144. }
  145. res, err := methods.ShrinkVirtualDisk_Task(ctx, m.c, &req)
  146. if err != nil {
  147. return nil, err
  148. }
  149. return NewTask(m.c, res.Returnval), nil
  150. }
  151. // Queries virtual disk uuid
  152. func (m VirtualDiskManager) QueryVirtualDiskUuid(ctx context.Context, name string, dc *Datacenter) (string, error) {
  153. req := types.QueryVirtualDiskUuid{
  154. This: m.Reference(),
  155. Name: name,
  156. }
  157. if dc != nil {
  158. ref := dc.Reference()
  159. req.Datacenter = &ref
  160. }
  161. res, err := methods.QueryVirtualDiskUuid(ctx, m.c, &req)
  162. if err != nil {
  163. return "", err
  164. }
  165. if res == nil {
  166. return "", nil
  167. }
  168. return res.Returnval, nil
  169. }
  170. func (m VirtualDiskManager) SetVirtualDiskUuid(ctx context.Context, name string, dc *Datacenter, uuid string) error {
  171. req := types.SetVirtualDiskUuid{
  172. This: m.Reference(),
  173. Name: name,
  174. Uuid: uuid,
  175. }
  176. if dc != nil {
  177. ref := dc.Reference()
  178. req.Datacenter = &ref
  179. }
  180. _, err := methods.SetVirtualDiskUuid(ctx, m.c, &req)
  181. return err
  182. }