github.com/vmware/govmomi@v0.51.0/cli/cluster/rule/info.go (about)

     1  // © Broadcom. All Rights Reserved.
     2  // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package rule
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  	"fmt"
    11  
    12  	"github.com/vmware/govmomi/cli"
    13  )
    14  
    15  type info struct {
    16  	*InfoFlag
    17  }
    18  
    19  func init() {
    20  	cli.Register("cluster.rule.info", &info{})
    21  }
    22  
    23  func (cmd *info) Register(ctx context.Context, f *flag.FlagSet) {
    24  	cmd.InfoFlag, ctx = NewInfoFlag(ctx)
    25  	cmd.InfoFlag.Register(ctx, f)
    26  }
    27  
    28  func (cmd *info) Process(ctx context.Context) error {
    29  	return cmd.InfoFlag.Process(ctx)
    30  }
    31  
    32  func (cmd *info) Description() string {
    33  	return `Provides detailed infos about cluster rules, their types and rule members.
    34  
    35  Examples:
    36    govc cluster.rule.info -cluster my_cluster
    37    govc cluster.rule.info -cluster my_cluster -name my_rule`
    38  }
    39  
    40  func (cmd *info) Run(ctx context.Context, f *flag.FlagSet) error {
    41  	var res ruleResult
    42  
    43  	rules, err := cmd.Rules(ctx)
    44  	if err != nil {
    45  		return err
    46  	}
    47  
    48  	for _, rule := range rules {
    49  		ruleName := rule.GetClusterRuleInfo().Name
    50  		ruleInfo := GetExtendedClusterRuleInfo(rule)
    51  		if cmd.name == "" || cmd.name == ruleName {
    52  			res = append(res, fmt.Sprintf("Rule: %s", ruleName))
    53  			res = append(res, fmt.Sprintf("  Type: %s", ruleInfo.ruleType))
    54  			switch ruleInfo.ruleType {
    55  			case "ClusterAffinityRuleSpec", "ClusterAntiAffinityRuleSpec":
    56  				names, err := cmd.Names(ctx, *ruleInfo.refs)
    57  				if err != nil {
    58  					cmd.WriteResult(res)
    59  					return err
    60  				}
    61  
    62  				for _, ref := range *ruleInfo.refs {
    63  					res = append(res, fmt.Sprintf("  VM: %s", names[ref]))
    64  				}
    65  			case "ClusterVmHostRuleInfo":
    66  				res = append(res, fmt.Sprintf("  vmGroupName: %s", ruleInfo.vmGroupName))
    67  				res = append(res, fmt.Sprintf("  affineHostGroupName %s", ruleInfo.affineHostGroupName))
    68  				res = append(res, fmt.Sprintf("  antiAffineHostGroupName %s", ruleInfo.antiAffineHostGroupName))
    69  			case "ClusterDependencyRuleInfo":
    70  				res = append(res, fmt.Sprintf("  VmGroup %s", ruleInfo.VmGroup))
    71  				res = append(res, fmt.Sprintf("  DependsOnVmGroup %s", ruleInfo.DependsOnVmGroup))
    72  			default:
    73  				res = append(res, "unknown rule type, no further rule details known")
    74  			}
    75  		}
    76  
    77  	}
    78  
    79  	return cmd.WriteResult(res)
    80  }