| package acl |
| |
| import ( |
| "github.com/mitchellh/mapstructure" |
| |
| "github.com/rackspace/gophercloud" |
| "github.com/rackspace/gophercloud/pagination" |
| ) |
| |
| // AccessList represents the rules of network access to a particular load |
| // balancer. |
| type AccessList []NetworkItem |
| |
| // NetworkItem describes how an IP address or entire subnet may interact with a |
| // load balancer. |
| type NetworkItem struct { |
| // The IP address or subnet (CIDR) that defines the network item. |
| Address string |
| |
| // The numeric unique ID for this item. |
| ID int |
| |
| // Either ALLOW or DENY. |
| Type Type |
| } |
| |
| // Type defines how an item may connect to the load balancer. |
| type Type string |
| |
| // Convenience consts. |
| const ( |
| ALLOW Type = "ALLOW" |
| DENY Type = "DENY" |
| ) |
| |
| // AccessListPage is the page returned by a pager when traversing over a collection of |
| // network items in an access list. |
| type AccessListPage struct { |
| pagination.SinglePageBase |
| } |
| |
| // IsEmpty checks whether an AccessListPage struct is empty. |
| func (p AccessListPage) IsEmpty() (bool, error) { |
| is, err := ExtractAccessList(p) |
| if err != nil { |
| return true, nil |
| } |
| return len(is) == 0, nil |
| } |
| |
| // ExtractAccessList accepts a Page struct, specifically an AccessListPage |
| // struct, and extracts the elements into a slice of NetworkItem structs. In |
| // other words, a generic collection is mapped into a relevant slice. |
| func ExtractAccessList(page pagination.Page) (AccessList, error) { |
| var resp struct { |
| List AccessList `mapstructure:"accessList" json:"accessList"` |
| } |
| |
| err := mapstructure.Decode(page.(AccessListPage).Body, &resp) |
| |
| return resp.List, err |
| } |
| |
| // CreateResult represents the result of a create operation. |
| type CreateResult struct { |
| gophercloud.ErrResult |
| } |
| |
| // DeleteResult represents the result of a delete operation. |
| type DeleteResult struct { |
| gophercloud.ErrResult |
| } |