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 }