github.com/vmware/govmomi@v0.51.0/cli/cluster/rule/ls.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 "io" 12 13 "github.com/vmware/govmomi/cli" 14 ) 15 16 type ls struct { 17 *InfoFlag 18 } 19 20 func init() { 21 cli.Register("cluster.rule.ls", &ls{}) 22 } 23 24 func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) { 25 cmd.InfoFlag, ctx = NewInfoFlag(ctx) 26 cmd.InfoFlag.Register(ctx, f) 27 } 28 29 func (cmd *ls) Process(ctx context.Context) error { 30 return cmd.InfoFlag.Process(ctx) 31 } 32 33 func (cmd *ls) Description() string { 34 return `List cluster rules and rule members. 35 36 Examples: 37 govc cluster.rule.ls -cluster my_cluster 38 govc cluster.rule.ls -cluster my_cluster -name my_rule 39 govc cluster.rule.ls -cluster my_cluster -l 40 govc cluster.rule.ls -cluster my_cluster -name my_rule -l` 41 } 42 43 type ruleResult []string 44 45 func (r ruleResult) Write(w io.Writer) error { 46 for i := range r { 47 fmt.Fprintln(w, r[i]) 48 } 49 50 return nil 51 } 52 53 func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error { 54 var res ruleResult 55 56 if cmd.name == "" { 57 rules, err := cmd.Rules(ctx) 58 if err != nil { 59 return err 60 } 61 62 for _, g := range rules { 63 ruleName := g.GetClusterRuleInfo().Name 64 if cmd.Long { 65 ruleTypeInfo := GetExtendedClusterRuleInfo(g).ruleType 66 res = append(res, fmt.Sprintf("%s (%s)", ruleName, ruleTypeInfo)) 67 } else { 68 res = append(res, ruleName) 69 } 70 } 71 } else { 72 rule, err := cmd.Rule(ctx) 73 if err != nil { 74 return err 75 } 76 77 switch rule.ruleType { 78 case "ClusterAffinityRuleSpec", "ClusterAntiAffinityRuleSpec": 79 names, err := cmd.Names(ctx, *rule.refs) 80 if err != nil { 81 cmd.WriteResult(res) 82 return err 83 } 84 85 for _, ref := range *rule.refs { 86 res = extendedAppend(res, cmd.Long, names[ref], "VM") 87 } 88 case "ClusterVmHostRuleInfo": 89 res = extendedAppend(res, cmd.Long, rule.vmGroupName, "vmGroupName") 90 res = extendedAppend(res, cmd.Long, rule.affineHostGroupName, "affineHostGroupName") 91 res = extendedAppend(res, cmd.Long, rule.antiAffineHostGroupName, "antiAffineHostGroupName") 92 case "ClusterDependencyRuleInfo": 93 res = extendedAppend(res, cmd.Long, rule.VmGroup, "VmGroup") 94 res = extendedAppend(res, cmd.Long, rule.DependsOnVmGroup, "DependsOnVmGroup") 95 default: 96 res = append(res, "unknown rule type, no further rule details known") 97 } 98 99 } 100 101 return cmd.WriteResult(res) 102 } 103 104 func extendedAppend(res ruleResult, long bool, entryValue string, entryType string) ruleResult { 105 var newres ruleResult 106 if long { 107 newres = append(res, fmt.Sprintf("%s (%s)", entryValue, entryType)) 108 } else { 109 newres = append(res, entryValue) 110 } 111 return newres 112 }