github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/api/firewallrules/client.go (about) 1 // Copyright 2017 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package firewallrules 5 6 import ( 7 "github.com/juju/errors" 8 9 "github.com/juju/juju/api/base" 10 "github.com/juju/juju/apiserver/params" 11 ) 12 13 // Client allows access to the firewall rules API end point. 14 type Client struct { 15 base.ClientFacade 16 st base.APICallCloser 17 facade base.FacadeCaller 18 } 19 20 // NewClient creates a new client for accessing the firewall rules api. 21 func NewClient(st base.APICallCloser) *Client { 22 frontend, backend := base.NewClientFacade(st, "FirewallRules") 23 return &Client{ClientFacade: frontend, st: st, facade: backend} 24 } 25 26 // SetFirewallRule creates or updates a firewall rule. 27 func (c *Client) SetFirewallRule(service string, whiteListCidrs []string) error { 28 serviceValue := params.KnownServiceValue(service) 29 if err := serviceValue.Validate(); err != nil { 30 return errors.Trace(err) 31 } 32 33 args := params.FirewallRuleArgs{ 34 Args: []params.FirewallRule{ 35 { 36 KnownService: serviceValue, 37 WhitelistCIDRS: whiteListCidrs, 38 }}, 39 } 40 var results params.ErrorResults 41 if err := c.facade.FacadeCall("SetFirewallRules", args, &results); err != nil { 42 return errors.Trace(err) 43 } 44 return results.OneError() 45 } 46 47 // ListFirewallRules returns all the firewall rules. 48 func (c *Client) ListFirewallRules() ([]params.FirewallRule, error) { 49 var results params.ListFirewallRulesResults 50 if err := c.facade.FacadeCall("ListFirewallRules", nil, &results); err != nil { 51 return nil, errors.Trace(err) 52 } 53 return results.Rules, nil 54 }