github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/cmd/juju/firewall/listformatter.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  	"io"
     8  	"sort"
     9  	"strings"
    10  
    11  	"github.com/juju/errors"
    12  
    13  	"github.com/juju/juju/cmd/output"
    14  )
    15  
    16  type firewallRule struct {
    17  	KnownService   string   `yaml:"known-service" json:"known-service"`
    18  	WhitelistCIDRS []string `yaml:"whitelist-subnets,omitempty" json:"whitelist-subnets,omitempty"`
    19  }
    20  
    21  type firewallRules []firewallRule
    22  
    23  func (o firewallRules) Len() int      { return len(o) }
    24  func (o firewallRules) Swap(i, j int) { o[i], o[j] = o[j], o[i] }
    25  func (o firewallRules) Less(i, j int) bool {
    26  	return o[i].KnownService < o[j].KnownService
    27  }
    28  
    29  func formatListTabular(writer io.Writer, value interface{}) error {
    30  	rules, ok := value.([]firewallRule)
    31  	if !ok {
    32  		return errors.Errorf("expected value of type %T, got %T", rules, value)
    33  	}
    34  	formatFirewallRulesTabular(writer, firewallRules(rules))
    35  	return nil
    36  }
    37  
    38  // formatFirewallRulesTabular returns a tabular summary of firewall rules.
    39  func formatFirewallRulesTabular(writer io.Writer, rules firewallRules) {
    40  	tw := output.TabWriter(writer)
    41  	w := output.Wrapper{tw}
    42  
    43  	sort.Sort(rules)
    44  
    45  	w.Println("Service", "Whitelist subnets")
    46  	for _, rule := range rules {
    47  		w.Println(rule.KnownService, strings.Join(rule.WhitelistCIDRS, ","))
    48  	}
    49  	tw.Flush()
    50  }