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 }