github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/firewall/listrules.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package firewall 5 6 import ( 7 "github.com/juju/cmd" 8 "github.com/juju/errors" 9 "github.com/juju/gnuflag" 10 11 "github.com/juju/juju/api/firewallrules" 12 "github.com/juju/juju/apiserver/params" 13 jujucmd "github.com/juju/juju/cmd" 14 "github.com/juju/juju/cmd/modelcmd" 15 ) 16 17 var listRulesHelpSummary = ` 18 Prints the firewall rules.`[1:] 19 20 var listRulesHelpDetails = ` 21 Lists the firewall rules which control ingress to well known services 22 within a Juju model. 23 24 Examples: 25 juju list-firewall-rules 26 juju firewall-rules 27 28 See also: 29 set-firewall-rule` 30 31 // NewListFirewallRulesCommand returns a command to list firewall rules. 32 func NewListFirewallRulesCommand() cmd.Command { 33 cmd := &listFirewallRulesCommand{} 34 cmd.newAPIFunc = func() (ListFirewallRulesAPI, error) { 35 root, err := cmd.NewAPIRoot() 36 if err != nil { 37 return nil, errors.Trace(err) 38 } 39 return firewallrules.NewClient(root), nil 40 41 } 42 return modelcmd.Wrap(cmd) 43 } 44 45 type listFirewallRulesCommand struct { 46 modelcmd.ModelCommandBase 47 modelcmd.IAASOnlyCommand 48 out cmd.Output 49 50 newAPIFunc func() (ListFirewallRulesAPI, error) 51 } 52 53 // Info implements cmd.Command. 54 func (c *listFirewallRulesCommand) Info() *cmd.Info { 55 return jujucmd.Info(&cmd.Info{ 56 Name: "list-firewall-rules", 57 Purpose: listRulesHelpSummary, 58 Doc: listRulesHelpDetails, 59 Aliases: []string{"firewall-rules"}, 60 }) 61 } 62 63 // SetFlags implements cmd.Command. 64 func (c *listFirewallRulesCommand) SetFlags(f *gnuflag.FlagSet) { 65 c.out.AddFlags(f, "tabular", map[string]cmd.Formatter{ 66 "yaml": cmd.FormatYaml, 67 "json": cmd.FormatJson, 68 "tabular": formatListTabular, 69 }) 70 } 71 72 // Init implements cmd.Command. 73 func (c *listFirewallRulesCommand) Init(args []string) (err error) { 74 return cmd.CheckEmpty(args) 75 } 76 77 // ListFirewallRulesAPI defines the API methods that the list firewall rules command uses. 78 type ListFirewallRulesAPI interface { 79 Close() error 80 ListFirewallRules() ([]params.FirewallRule, error) 81 } 82 83 // Run implements cmd.Command. 84 func (c *listFirewallRulesCommand) Run(ctx *cmd.Context) error { 85 client, err := c.newAPIFunc() 86 if err != nil { 87 return err 88 } 89 defer client.Close() 90 rulesResult, err := client.ListFirewallRules() 91 if err != nil { 92 return err 93 } 94 95 rules := make([]firewallRule, len(rulesResult)) 96 for i, r := range rulesResult { 97 rules[i] = firewallRule{ 98 KnownService: string(r.KnownService), 99 WhitelistCIDRS: r.WhitelistCIDRS, 100 } 101 } 102 return c.out.Write(ctx, rules) 103 }