github.com/vmware/govmomi@v0.37.2/vsan/client_test.go (about)

     1  /*
     2  Copyright (c) 2019-2023 VMware, Inc. All Rights Reserved.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8  http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  package vsan
    17  
    18  import (
    19  	"context"
    20  	"os"
    21  	"testing"
    22  
    23  	"github.com/dougm/pretty"
    24  
    25  	"github.com/vmware/govmomi"
    26  	"github.com/vmware/govmomi/find"
    27  	"github.com/vmware/govmomi/vim25/soap"
    28  	"github.com/vmware/govmomi/vsan/types"
    29  )
    30  
    31  func TestClient(t *testing.T) {
    32  	url := os.Getenv("VC_URL")            // example: export VC_URL='https://username:password@vc-ip/sdk'
    33  	datacenter := os.Getenv("DATACENTER") // example: export DATACENTER='name-of-datacenter'
    34  	if url == "" || datacenter == "" {
    35  		t.Skip("VC_URL or DATACENTER is not set")
    36  	}
    37  
    38  	u, err := soap.ParseURL(url)
    39  	if err != nil {
    40  		t.Fatal(err)
    41  	}
    42  	ctx := context.Background()
    43  
    44  	c, err := govmomi.NewClient(ctx, u, true)
    45  	if err != nil {
    46  		t.Fatal(err)
    47  	}
    48  
    49  	vsanHealthClient, err := NewClient(ctx, c.Client)
    50  	if err != nil {
    51  		t.Fatal(err)
    52  	}
    53  
    54  	finder := find.NewFinder(c.Client, false)
    55  	dc, err := finder.Datacenter(ctx, datacenter)
    56  	if err != nil {
    57  		t.Fatal(err)
    58  	}
    59  	finder.SetDatacenter(dc)
    60  
    61  	clusterComputeResource, err := finder.ClusterComputeResourceList(ctx, "*")
    62  	if err != nil {
    63  		t.Logf("Error occurred while getting clusterComputeResource %+v", err.Error())
    64  		t.Fatal(err)
    65  	}
    66  
    67  	isFileServiceEnabled := false
    68  	var clusterConfigToPrint *types.VsanConfigInfoEx
    69  	for _, cluster := range clusterComputeResource {
    70  		clusterConfig, err := vsanHealthClient.VsanClusterGetConfig(ctx, cluster.Reference())
    71  		if err != nil {
    72  			t.Logf("Error occurred: %+v", err.Error())
    73  			t.Fatal(err)
    74  		}
    75  		if clusterConfig.FileServiceConfig.Enabled {
    76  			clusterConfigToPrint = clusterConfig
    77  			isFileServiceEnabled = true
    78  		}
    79  	}
    80  	if isFileServiceEnabled {
    81  		t.Logf("Printing one of the clusterConfig where file service is enabled:\n %+v", pretty.Sprint(clusterConfigToPrint))
    82  	}
    83  
    84  	hosts, _ := finder.HostSystemList(ctx, "*")
    85  	if err != nil {
    86  		t.Logf("Error occurred while getting hostSystem %+v", err.Error())
    87  		t.Fatal(err)
    88  	}
    89  
    90  	for _, host := range hosts {
    91  		vsanSystem, _ := host.ConfigManager().VsanInternalSystem(ctx)
    92  		if err != nil {
    93  			t.Logf("Error occurred: %+v", err.Error())
    94  			t.Fatal(err)
    95  		}
    96  		hostConfig, err := vsanHealthClient.VsanHostGetConfig(ctx, vsanSystem.Reference())
    97  		if err != nil {
    98  			t.Logf("Error occurred: %+v", err.Error())
    99  			t.Fatal(err)
   100  		}
   101  		t.Logf("Printing hostConfig:\n %+s", pretty.Sprint(hostConfig))
   102  	}
   103  }
   104  
   105  func TestVsanQueryObjectIdentities(t *testing.T) {
   106  	url := os.Getenv("VC_URL")            // example: export VC_URL='https://username:password@vc-ip/sdk'
   107  	datacenter := os.Getenv("DATACENTER") // example: export DATACENTER='name-of-datacenter'
   108  	if url == "" || datacenter == "" {
   109  		t.Skip("VC_URL or DATACENTER is not set")
   110  	}
   111  
   112  	u, err := soap.ParseURL(url)
   113  	if err != nil {
   114  		t.Fatal(err)
   115  	}
   116  	ctx := context.Background()
   117  
   118  	c, err := govmomi.NewClient(ctx, u, true)
   119  	if err != nil {
   120  		t.Fatal(err)
   121  	}
   122  
   123  	vsanHealthClient, err := NewClient(ctx, c.Client)
   124  	if err != nil {
   125  		t.Fatal(err)
   126  	}
   127  
   128  	finder := find.NewFinder(c.Client, false)
   129  	dc, err := finder.Datacenter(ctx, datacenter)
   130  	if err != nil {
   131  		t.Fatal(err)
   132  	}
   133  	finder.SetDatacenter(dc)
   134  
   135  	clusterComputeResource, err := finder.ClusterComputeResourceList(ctx, "*")
   136  
   137  	if err != nil {
   138  		t.Logf("Error occurred while getting clusterComputeResource %+v", err.Error())
   139  		t.Fatal(err)
   140  	}
   141  
   142  	for _, cluster := range clusterComputeResource {
   143  		clusterConfig, err := vsanHealthClient.VsanQueryObjectIdentities(ctx, cluster.Reference())
   144  		if err != nil {
   145  			t.Logf("Error occurred: %+v", err.Error())
   146  			t.Fatal(err)
   147  		}
   148  		t.Logf("Printing clusterConfig:\n %+s", pretty.Sprint(clusterConfig))
   149  	}
   150  
   151  }