123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package networks
- import (
- "devel.mephi.ru/iacherepanov/openstack-gophercloud"
- "devel.mephi.ru/iacherepanov/openstack-gophercloud/pagination"
- )
- type commonResult struct {
- gophercloud.Result
- }
- // Extract is a function that accepts a result and extracts a network resource.
- func (r commonResult) Extract() (*Network, error) {
- var s Network
- err := r.ExtractInto(&s)
- return &s, err
- }
- func (r commonResult) ExtractInto(v interface{}) error {
- return r.Result.ExtractIntoStructPtr(v, "network")
- }
- // CreateResult represents the result of a create operation. Call its Extract
- // method to interpret it as a Network.
- type CreateResult struct {
- commonResult
- }
- // GetResult represents the result of a get operation. Call its Extract
- // method to interpret it as a Network.
- type GetResult struct {
- commonResult
- }
- // UpdateResult represents the result of an update operation. Call its Extract
- // method to interpret it as a Network.
- type UpdateResult struct {
- commonResult
- }
- // DeleteResult represents the result of a delete operation. Call its
- // ExtractErr method to determine if the request succeeded or failed.
- type DeleteResult struct {
- gophercloud.ErrResult
- }
- // Network represents, well, a network.
- type Network struct {
- // UUID for the network
- ID string `json:"id"`
- // Human-readable name for the network. Might not be unique.
- Name string `json:"name"`
- // The administrative state of network. If false (down), the network does not
- // forward packets.
- AdminStateUp bool `json:"admin_state_up"`
- // Indicates whether network is currently operational. Possible values include
- // `ACTIVE', `DOWN', `BUILD', or `ERROR'. Plug-ins might define additional
- // values.
- Status string `json:"status"`
- // Subnets associated with this network.
- Subnets []string `json:"subnets"`
- // TenantID is the project owner of the network.
- TenantID string `json:"tenant_id"`
- // ProjectID is the project owner of the network.
- ProjectID string `json:"project_id"`
- // Specifies whether the network resource can be accessed by any tenant.
- Shared bool `json:"shared"`
- // Availability zone hints groups network nodes that run services like DHCP, L3, FW, and others.
- // Used to make network resources highly available.
- AvailabilityZoneHints []string `json:"availability_zone_hints"`
- }
- // NetworkPage is the page returned by a pager when traversing over a
- // collection of networks.
- type NetworkPage struct {
- pagination.LinkedPageBase
- }
- // NextPageURL is invoked when a paginated collection of networks has reached
- // the end of a page and the pager seeks to traverse over a new one. In order
- // to do this, it needs to construct the next page's URL.
- func (r NetworkPage) NextPageURL() (string, error) {
- var s struct {
- Links []gophercloud.Link `json:"networks_links"`
- }
- err := r.ExtractInto(&s)
- if err != nil {
- return "", err
- }
- return gophercloud.ExtractNextURL(s.Links)
- }
- // IsEmpty checks whether a NetworkPage struct is empty.
- func (r NetworkPage) IsEmpty() (bool, error) {
- is, err := ExtractNetworks(r)
- return len(is) == 0, err
- }
- // ExtractNetworks accepts a Page struct, specifically a NetworkPage struct,
- // and extracts the elements into a slice of Network structs. In other words,
- // a generic collection is mapped into a relevant slice.
- func ExtractNetworks(r pagination.Page) ([]Network, error) {
- var s []Network
- err := ExtractNetworksInto(r, &s)
- return s, err
- }
- func ExtractNetworksInto(r pagination.Page, v interface{}) error {
- return r.(NetworkPage).Result.ExtractIntoSlicePtr(v, "networks")
- }
|