host_config_manager.go 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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. "fmt"
  17. "github.com/vmware/govmomi/vim25"
  18. "github.com/vmware/govmomi/vim25/types"
  19. )
  20. type HostConfigManager struct {
  21. Common
  22. }
  23. func NewHostConfigManager(c *vim25.Client, ref types.ManagedObjectReference) *HostConfigManager {
  24. return &HostConfigManager{
  25. Common: NewCommon(c, ref),
  26. }
  27. }
  28. // reference returns the ManagedObjectReference for the given HostConfigManager property name.
  29. // An error is returned if the field is nil, of type ErrNotSupported if versioned is true.
  30. func (m HostConfigManager) reference(ctx context.Context, name string, versioned ...bool) (types.ManagedObjectReference, error) {
  31. prop := "configManager." + name
  32. var content []types.ObjectContent
  33. err := m.Properties(ctx, m.Reference(), []string{prop}, &content)
  34. if err != nil {
  35. return types.ManagedObjectReference{}, err
  36. }
  37. for _, c := range content {
  38. for _, p := range c.PropSet {
  39. if p.Name != prop {
  40. continue
  41. }
  42. if ref, ok := p.Val.(types.ManagedObjectReference); ok {
  43. return ref, nil
  44. }
  45. }
  46. }
  47. err = fmt.Errorf("%s %s is nil", m.Reference(), prop)
  48. if len(versioned) == 1 && versioned[0] {
  49. err = ErrNotSupported
  50. }
  51. return types.ManagedObjectReference{}, err
  52. }
  53. func (m HostConfigManager) DatastoreSystem(ctx context.Context) (*HostDatastoreSystem, error) {
  54. ref, err := m.reference(ctx, "datastoreSystem")
  55. if err != nil {
  56. return nil, err
  57. }
  58. return NewHostDatastoreSystem(m.c, ref), nil
  59. }
  60. func (m HostConfigManager) NetworkSystem(ctx context.Context) (*HostNetworkSystem, error) {
  61. ref, err := m.reference(ctx, "networkSystem")
  62. if err != nil {
  63. return nil, err
  64. }
  65. return NewHostNetworkSystem(m.c, ref), nil
  66. }
  67. func (m HostConfigManager) FirewallSystem(ctx context.Context) (*HostFirewallSystem, error) {
  68. ref, err := m.reference(ctx, "firewallSystem")
  69. if err != nil {
  70. return nil, err
  71. }
  72. return NewHostFirewallSystem(m.c, ref), nil
  73. }
  74. func (m HostConfigManager) StorageSystem(ctx context.Context) (*HostStorageSystem, error) {
  75. ref, err := m.reference(ctx, "storageSystem")
  76. if err != nil {
  77. return nil, err
  78. }
  79. return NewHostStorageSystem(m.c, ref), nil
  80. }
  81. func (m HostConfigManager) VirtualNicManager(ctx context.Context) (*HostVirtualNicManager, error) {
  82. ref, err := m.reference(ctx, "virtualNicManager")
  83. if err != nil {
  84. return nil, err
  85. }
  86. return NewHostVirtualNicManager(m.c, ref, m.Reference()), nil
  87. }
  88. func (m HostConfigManager) VsanSystem(ctx context.Context) (*HostVsanSystem, error) {
  89. ref, err := m.reference(ctx, "vsanSystem", true) // Added in 5.5
  90. if err != nil {
  91. return nil, err
  92. }
  93. return NewHostVsanSystem(m.c, ref), nil
  94. }
  95. func (m HostConfigManager) VsanInternalSystem(ctx context.Context) (*HostVsanInternalSystem, error) {
  96. ref, err := m.reference(ctx, "vsanInternalSystem", true) // Added in 5.5
  97. if err != nil {
  98. return nil, err
  99. }
  100. return NewHostVsanInternalSystem(m.c, ref), nil
  101. }
  102. func (m HostConfigManager) AccountManager(ctx context.Context) (*HostAccountManager, error) {
  103. ref, err := m.reference(ctx, "accountManager", true) // Added in 5.5
  104. if err != nil {
  105. if err == ErrNotSupported {
  106. // Versions < 5.5 can use the ServiceContent ref,
  107. // but only when connected directly to ESX.
  108. if m.c.ServiceContent.AccountManager == nil {
  109. return nil, err
  110. }
  111. ref = *m.c.ServiceContent.AccountManager
  112. } else {
  113. return nil, err
  114. }
  115. }
  116. return NewHostAccountManager(m.c, ref), nil
  117. }
  118. func (m HostConfigManager) OptionManager(ctx context.Context) (*OptionManager, error) {
  119. ref, err := m.reference(ctx, "advancedOption")
  120. if err != nil {
  121. return nil, err
  122. }
  123. return NewOptionManager(m.c, ref), nil
  124. }
  125. func (m HostConfigManager) ServiceSystem(ctx context.Context) (*HostServiceSystem, error) {
  126. ref, err := m.reference(ctx, "serviceSystem")
  127. if err != nil {
  128. return nil, err
  129. }
  130. return NewHostServiceSystem(m.c, ref), nil
  131. }
  132. func (m HostConfigManager) CertificateManager(ctx context.Context) (*HostCertificateManager, error) {
  133. ref, err := m.reference(ctx, "certificateManager", true) // Added in 6.0
  134. if err != nil {
  135. return nil, err
  136. }
  137. return NewHostCertificateManager(m.c, ref, m.Reference()), nil
  138. }
  139. func (m HostConfigManager) DateTimeSystem(ctx context.Context) (*HostDateTimeSystem, error) {
  140. ref, err := m.reference(ctx, "dateTimeSystem")
  141. if err != nil {
  142. return nil, err
  143. }
  144. return NewHostDateTimeSystem(m.c, ref), nil
  145. }