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  }