github.com/vmware/govmomi@v0.51.0/cli/library/policy/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 policy 6 7 import ( 8 "context" 9 "flag" 10 "fmt" 11 "io" 12 "text/tabwriter" 13 14 "github.com/vmware/govmomi/cli" 15 "github.com/vmware/govmomi/cli/flags" 16 "github.com/vmware/govmomi/vapi/library" 17 ) 18 19 type ls struct { 20 *flags.ClientFlag 21 *flags.OutputFlag 22 } 23 24 func init() { 25 cli.Register("library.policy.ls", &ls{}) 26 } 27 28 func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) { 29 cmd.ClientFlag, ctx = flags.NewClientFlag(ctx) 30 cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx) 31 cmd.ClientFlag.Register(ctx, f) 32 cmd.OutputFlag.Register(ctx, f) 33 } 34 35 func (cmd *ls) Process(ctx context.Context) error { 36 if err := cmd.ClientFlag.Process(ctx); err != nil { 37 return err 38 } 39 return nil 40 } 41 42 func (cmd *ls) Description() string { 43 return `List security policies for content libraries. 44 45 Examples: 46 govc library.policy.ls 47 ` 48 } 49 50 type lsResultsWriter struct { 51 Policies []library.ContentSecurityPoliciesInfo `json:"policies,omitempty"` 52 } 53 54 func (r lsResultsWriter) Write(w io.Writer) error { 55 tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0) 56 57 if len(r.Policies) == 0 { 58 _, _ = fmt.Fprintln(tw, "No Policies found") 59 return tw.Flush() 60 } 61 62 for _, p := range r.Policies { 63 if _, err := fmt.Fprintf(tw, "Name:\t%s\n", p.Name); err != nil { 64 return err 65 } 66 if _, err := fmt.Fprintf(tw, "Policy ID:\t%s\n", p.Policy); err != nil { 67 return err 68 } 69 if err := writeItemRules(tw, p); err != nil { 70 return err 71 } 72 } 73 74 return tw.Flush() 75 } 76 77 func (r lsResultsWriter) Dump() any { 78 return r.Policies 79 } 80 81 func writeItemRules(w io.Writer, policy library.ContentSecurityPoliciesInfo) error { 82 tw := tabwriter.NewWriter(w, 2, 0, 4, ' ', 0) 83 if _, err := fmt.Fprintln(w, "Rules:"); err != nil { 84 return err 85 } 86 for k, v := range policy.ItemTypeRules { 87 if _, err := fmt.Fprintf(tw, "\tItem: %s\n", k); err != nil { 88 return err 89 } 90 if _, err := fmt.Fprintf(tw, "\tRule: %s\n", v); err != nil { 91 return err 92 } 93 } 94 return tw.Flush() 95 } 96 97 func (cmd *ls) Run(ctx context.Context, _ *flag.FlagSet) error { 98 c, err := cmd.RestClient() 99 if err != nil { 100 return err 101 } 102 103 m := library.NewManager(c) 104 policies, err := m.ListSecurityPolicies(ctx) 105 if err != nil { 106 return err 107 } 108 return cmd.WriteResult(&lsResultsWriter{policies}) 109 }