From 2a136ef09ba9bf952cdb70f085a86f3f6d7ec9b2 Mon Sep 17 00:00:00 2001 From: Joe Topjian Date: Fri, 10 Mar 2017 04:58:48 -0700 Subject: [PATCH] vendor: Updating Gophercloud for OpenStack (#12577) --- .../extensions/volumeactions/requests.go | 37 ++++ .../extensions/volumeactions/results.go | 5 + .../extensions/volumeactions/urls.go | 4 + .../gophercloud/openstack/client.go | 13 ++ .../openstack/compute/v2/flavors/requests.go | 41 ++++ .../openstack/compute/v2/flavors/results.go | 47 ++-- .../openstack/compute/v2/flavors/urls.go | 4 + .../openstack/compute/v2/images/results.go | 4 +- .../openstack/compute/v2/servers/requests.go | 3 +- .../openstack/compute/v2/servers/results.go | 22 +- .../imageservice/v2/images/requests.go | 2 +- .../extensions/layer3/floatingips/requests.go | 1 + .../extensions/layer3/floatingips/results.go | 3 + .../gophercloud/pagination/pager.go | 21 +- vendor/vendor.json | 200 +++++++++--------- 15 files changed, 257 insertions(+), 150 deletions(-) diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/requests.go b/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/requests.go index 1aff4942a..e3c7df304 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/requests.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/requests.go @@ -214,3 +214,40 @@ func ExtendSize(client *gophercloud.ServiceClient, id string, opts ExtendSizeOpt }) return } + +// UploadImageOptsBuilder allows extensions to add additional parameters to the +// UploadImage request. +type UploadImageOptsBuilder interface { + ToVolumeUploadImageMap() (map[string]interface{}, error) +} + +// UploadImageOpts contains options for uploading a Volume to image storage. +type UploadImageOpts struct { + // Container format, may be bare, ofv, ova, etc. + ContainerFormat string `json:"container_format,omitempty"` + // Disk format, may be raw, qcow2, vhd, vdi, vmdk, etc. + DiskFormat string `json:"disk_format,omitempty"` + // The name of image that will be stored in glance + ImageName string `json:"image_name,omitempty"` + // Force image creation, usable if volume attached to instance + Force bool `json:"force,omitempty"` +} + +// ToVolumeUploadImageMap assembles a request body based on the contents of a +// UploadImageOpts. +func (opts UploadImageOpts) ToVolumeUploadImageMap() (map[string]interface{}, error) { + return gophercloud.BuildRequestBody(opts, "os-volume_upload_image") +} + +// UploadImage will upload image base on the values in UploadImageOptsBuilder +func UploadImage(client *gophercloud.ServiceClient, id string, opts UploadImageOptsBuilder) (r UploadImageResult) { + b, err := opts.ToVolumeUploadImageMap() + if err != nil { + r.Err = err + return + } + _, r.Err = client.Post(uploadURL(client, id), b, nil, &gophercloud.RequestOpts{ + OkCodes: []int{202}, + }) + return +} diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/results.go b/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/results.go index b5695b765..634b04d8d 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/results.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/results.go @@ -17,6 +17,11 @@ type DetachResult struct { gophercloud.ErrResult } +// UploadImageResult contains the response body and error from a UploadImage request. +type UploadImageResult struct { + gophercloud.ErrResult +} + // ReserveResult contains the response body and error from a Get request. type ReserveResult struct { gophercloud.ErrResult diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/urls.go b/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/urls.go index a172549bf..5efd2b25c 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/urls.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions/urls.go @@ -14,6 +14,10 @@ func detachURL(c *gophercloud.ServiceClient, id string) string { return attachURL(c, id) } +func uploadURL(c *gophercloud.ServiceClient, id string) string { + return attachURL(c, id) +} + func reserveURL(c *gophercloud.ServiceClient, id string) string { return attachURL(c, id) } diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/client.go b/vendor/github.com/gophercloud/gophercloud/openstack/client.go index 6e61944a1..2d30cc60a 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/client.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/client.go @@ -310,6 +310,19 @@ func NewDBV1(client *gophercloud.ProviderClient, eo gophercloud.EndpointOpts) (* return &gophercloud.ServiceClient{ProviderClient: client, Endpoint: url}, nil } +// NewDNSV2 creates a ServiceClient that may be used to access the v2 DNS service. +func NewDNSV2(client *gophercloud.ProviderClient, eo gophercloud.EndpointOpts) (*gophercloud.ServiceClient, error) { + eo.ApplyDefaults("dns") + url, err := client.EndpointLocator(eo) + if err != nil { + return nil, err + } + return &gophercloud.ServiceClient{ + ProviderClient: client, + Endpoint: url, + ResourceBase: url + "v2/"}, nil +} + // NewImageServiceV2 creates a ServiceClient that may be used to access the v2 image service. func NewImageServiceV2(client *gophercloud.ProviderClient, eo gophercloud.EndpointOpts) (*gophercloud.ServiceClient, error) { eo.ApplyDefaults("image") diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/requests.go b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/requests.go index ef133ff80..d5d571c3d 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/requests.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/requests.go @@ -54,6 +54,47 @@ func ListDetail(client *gophercloud.ServiceClient, opts ListOptsBuilder) paginat }) } +type CreateOptsBuilder interface { + ToFlavorCreateMap() (map[string]interface{}, error) +} + +// CreateOpts is passed to Create to create a flavor +// Source: +// https://github.com/openstack/nova/blob/stable/newton/nova/api/openstack/compute/schemas/flavor_manage.py#L20 +type CreateOpts struct { + Name string `json:"name" required:"true"` + // memory size, in MBs + RAM int `json:"ram" required:"true"` + VCPUs int `json:"vcpus" required:"true"` + // disk size, in GBs + Disk *int `json:"disk" required:"true"` + ID string `json:"id,omitempty"` + // non-zero, positive + Swap *int `json:"swap,omitempty"` + RxTxFactor float64 `json:"rxtx_factor,omitempty"` + IsPublic *bool `json:"os-flavor-access:is_public,omitempty"` + // ephemeral disk size, in GBs, non-zero, positive + Ephemeral *int `json:"OS-FLV-EXT-DATA:ephemeral,omitempty"` +} + +// ToFlavorCreateMap satisfies the CreateOptsBuilder interface +func (opts *CreateOpts) ToFlavorCreateMap() (map[string]interface{}, error) { + return gophercloud.BuildRequestBody(opts, "flavor") +} + +// Create a flavor +func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) { + b, err := opts.ToFlavorCreateMap() + if err != nil { + r.Err = err + return + } + _, r.Err = client.Post(createURL(client), b, &r.Body, &gophercloud.RequestOpts{ + OkCodes: []int{200, 201}, + }) + return +} + // Get instructs OpenStack to provide details on a single flavor, identified by its ID. // Use ExtractFlavor to convert its result into a Flavor. func Get(client *gophercloud.ServiceClient, id string) (r GetResult) { diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/results.go b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/results.go index a49de0da7..18b843405 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/results.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/results.go @@ -8,13 +8,21 @@ import ( "github.com/gophercloud/gophercloud/pagination" ) -// GetResult temporarily holds the response from a Get call. -type GetResult struct { +type commonResult struct { gophercloud.Result } -// Extract provides access to the individual Flavor returned by the Get function. -func (r GetResult) Extract() (*Flavor, error) { +type CreateResult struct { + commonResult +} + +// GetResult temporarily holds the response from a Get call. +type GetResult struct { + commonResult +} + +// Extract provides access to the individual Flavor returned by the Get and Create functions. +func (r commonResult) Extract() (*Flavor, error) { var s struct { Flavor *Flavor `json:"flavor"` } @@ -40,41 +48,32 @@ type Flavor struct { VCPUs int `json:"vcpus"` } -func (f *Flavor) UnmarshalJSON(b []byte) error { - var flavor struct { - ID string `json:"id"` - Disk int `json:"disk"` - RAM int `json:"ram"` - Name string `json:"name"` - RxTxFactor float64 `json:"rxtx_factor"` - Swap interface{} `json:"swap"` - VCPUs int `json:"vcpus"` +func (r *Flavor) UnmarshalJSON(b []byte) error { + type tmp Flavor + var s struct { + tmp + Swap interface{} `json:"swap"` } - err := json.Unmarshal(b, &flavor) + err := json.Unmarshal(b, &s) if err != nil { return err } - f.ID = flavor.ID - f.Disk = flavor.Disk - f.RAM = flavor.RAM - f.Name = flavor.Name - f.RxTxFactor = flavor.RxTxFactor - f.VCPUs = flavor.VCPUs + *r = Flavor(s.tmp) - switch t := flavor.Swap.(type) { + switch t := s.Swap.(type) { case float64: - f.Swap = int(t) + r.Swap = int(t) case string: switch t { case "": - f.Swap = 0 + r.Swap = 0 default: swap, err := strconv.ParseFloat(t, 64) if err != nil { return err } - f.Swap = int(swap) + r.Swap = int(swap) } } diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/urls.go b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/urls.go index ee0dfdbe3..2fc21796f 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/urls.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/flavors/urls.go @@ -11,3 +11,7 @@ func getURL(client *gophercloud.ServiceClient, id string) string { func listURL(client *gophercloud.ServiceClient) string { return client.ServiceURL("flavors", "detail") } + +func createURL(client *gophercloud.ServiceClient) string { + return client.ServiceURL("flavors") +} diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/images/results.go b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/images/results.go index a55b8f160..f9ebc69e9 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/images/results.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/images/results.go @@ -45,8 +45,8 @@ type Image struct { Status string Updated string - - Metadata map[string]string + + Metadata map[string]interface{} } // ImagePage contains a single page of results from a List operation. diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/requests.go b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/requests.go index c79a6e6f6..961863731 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/requests.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/requests.go @@ -401,11 +401,10 @@ type RebuildOptsBuilder interface { // operation type RebuildOpts struct { // The server's admin password - AdminPass string `json:"adminPass" required:"true"` + AdminPass string `json:"adminPass,omitempty"` // The ID of the image you want your server to be provisioned on ImageID string `json:"imageRef"` ImageName string `json:"-"` - //ImageName string `json:"-"` // Name to set the server to Name string `json:"name,omitempty"` // AccessIPv4 [optional] provides a new IPv4 address for the instance. diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/results.go b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/results.go index c121a6be7..1ae1e91c7 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/results.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/results.go @@ -19,11 +19,17 @@ type serverResult struct { // Extract interprets any serverResult as a Server, if possible. func (r serverResult) Extract() (*Server, error) { - var s struct { - Server *Server `json:"server"` - } + var s Server err := r.ExtractInto(&s) - return s.Server, err + return &s, err +} + +func (r serverResult) ExtractInto(v interface{}) error { + return r.Result.ExtractIntoStructPtr(v, "server") +} + +func ExtractServersInto(r pagination.Page, v interface{}) error { + return r.(ServerPage).Result.ExtractIntoSlicePtr(v, "servers") } // CreateResult temporarily contains the response from a Create call. @@ -221,11 +227,9 @@ func (r ServerPage) NextPageURL() (string, error) { // ExtractServers interprets the results of a single page from a List() call, producing a slice of Server entities. func ExtractServers(r pagination.Page) ([]Server, error) { - var s struct { - Servers []Server `json:"servers"` - } - err := (r.(ServerPage)).ExtractInto(&s) - return s.Servers, err + var s []Server + err := ExtractServersInto(r, &s) + return s, err } // MetadataResult contains the result of a call for (potentially) multiple key-value pairs. diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/imageservice/v2/images/requests.go b/vendor/github.com/gophercloud/gophercloud/openstack/imageservice/v2/images/requests.go index 32f09ee95..044b5cb95 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/imageservice/v2/images/requests.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/imageservice/v2/images/requests.go @@ -99,7 +99,7 @@ type CreateOpts struct { // properties is a set of properties, if any, that // are associated with the image. - Properties map[string]string `json:"-,omitempty"` + Properties map[string]string `json:"-"` } // ToImageCreateMap assembles a request body based on the contents of diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips/requests.go b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips/requests.go index 21a3b266c..83930874c 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips/requests.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips/requests.go @@ -21,6 +21,7 @@ type ListOpts struct { Marker string `q:"marker"` SortKey string `q:"sort_key"` SortDir string `q:"sort_dir"` + RouterID string `q:"router_id"` } // List returns a Pager which allows you to iterate over a collection of diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips/results.go b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips/results.go index 838ca2ca6..29d5b5662 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips/results.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips/results.go @@ -34,6 +34,9 @@ type FloatingIP struct { // The condition of the API resource. Status string `json:"status"` + + //The ID of the router used for this Floating-IP + RouterID string `json:"router_id"` } type commonResult struct { diff --git a/vendor/github.com/gophercloud/gophercloud/pagination/pager.go b/vendor/github.com/gophercloud/gophercloud/pagination/pager.go index 1b5192ad6..6f1609ef2 100644 --- a/vendor/github.com/gophercloud/gophercloud/pagination/pager.go +++ b/vendor/github.com/gophercloud/gophercloud/pagination/pager.go @@ -145,27 +145,24 @@ func (p Pager) AllPages() (Page, error) { // Switch on the page body type. Recognized types are `map[string]interface{}`, // `[]byte`, and `[]interface{}`. - switch testPage.GetBody().(type) { + switch pb := testPage.GetBody().(type) { case map[string]interface{}: // key is the map key for the page body if the body type is `map[string]interface{}`. var key string // Iterate over the pages to concatenate the bodies. err = p.EachPage(func(page Page) (bool, error) { b := page.GetBody().(map[string]interface{}) - for k := range b { + for k, v := range b { // If it's a linked page, we don't want the `links`, we want the other one. if !strings.HasSuffix(k, "links") { - key = k + // check the field's type. we only want []interface{} (which is really []map[string]interface{}) + switch vt := v.(type) { + case []interface{}: + key = k + pagesSlice = append(pagesSlice, vt...) + } } } - switch keyType := b[key].(type) { - case map[string]interface{}: - pagesSlice = append(pagesSlice, keyType) - case []interface{}: - pagesSlice = append(pagesSlice, b[key].([]interface{})...) - default: - return false, fmt.Errorf("Unsupported page body type: %+v", keyType) - } return true, nil }) if err != nil { @@ -216,7 +213,7 @@ func (p Pager) AllPages() (Page, error) { default: err := gophercloud.ErrUnexpectedType{} err.Expected = "map[string]interface{}/[]byte/[]interface{}" - err.Actual = fmt.Sprintf("%v", reflect.TypeOf(testPage.GetBody())) + err.Actual = fmt.Sprintf("%T", pb) return nil, err } diff --git a/vendor/vendor.json b/vendor/vendor.json index 4b86696b6..bc1e145d5 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -1490,278 +1490,278 @@ { "checksumSHA1": "xKB/9qxVhWxAERkjZLYfuUBR4P8=", "path": "github.com/gophercloud/gophercloud", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { - "checksumSHA1": "S3zTth9INyj1RfyHkQEvJAvRWvw=", + "checksumSHA1": "0KdIjTH5IO8hlIl8kdfI6313GiY=", "path": "github.com/gophercloud/gophercloud/openstack", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { - "checksumSHA1": "XAKLUSwXSMGtbp+U874qU4MzT/A=", + "checksumSHA1": "f2hdkOhYmmO2ljNtr+OThK8VAEI=", "path": "github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "9DTfNt/B4aZWXEmTNqXU5rNrrDc=", "path": "github.com/gophercloud/gophercloud/openstack/blockstorage/v1/volumes", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "B4IXSmq364HcBruvvV0QjDFxZgc=", "path": "github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "w2wHF5eEBE89ZYlkS9GAJsSIq9U=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/bootfromvolume", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "e7AW3YDVYJPKUjpqsB4AL9RRlTw=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/floatingips", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "RWwUliHD65cWApdEo4ckOcPSArg=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "tOmntqlmZ/r8aObUChNloddLhwk=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/schedulerhints", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "jNrUTQf+9dYfaD7YqvKwC+kGvyY=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/secgroups", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "ci4gzd7Uy9JC4NcQ2ms19pjtW6s=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "qBpGbX7LQMPATdO8XyQmU7IXDiI=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/startstop", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "5JuziAp9BSRA/z+8pTjVLTWeTw4=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/tenantnetworks", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "2VNgU0F9PDax5VKClvMLmbzuksw=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { - "checksumSHA1": "a9xDFPigDjHlPlthknKlBduGvKY=", + "checksumSHA1": "S1BV3o8Pa0aM5RaUuRYXY7LnPIc=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/flavors", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { - "checksumSHA1": "UGeqrw3KdPNRwDxl315MAYyy/uY=", + "checksumSHA1": "Rnzx2YgOD41k8KoPA08tR992PxQ=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/images", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { - "checksumSHA1": "S8zR7Y8Yf6dz5+m5jyWYu5ar+vk=", + "checksumSHA1": "IjCvcaNnRW++hclt21WUkMYinaA=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/servers", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "1sVqsZBZBNhDXLY9XzjMkcOkcbg=", "path": "github.com/gophercloud/gophercloud/openstack/identity/v2/tenants", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "AvUU5En9YpG25iLlcAPDgcQODjI=", "path": "github.com/gophercloud/gophercloud/openstack/identity/v2/tokens", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "ZKyEbJuIlvuZ9aUushINCXJHF4w=", "path": "github.com/gophercloud/gophercloud/openstack/identity/v3/tokens", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "5+wNKnxGvSGV8lHS+7km0ZiNEts=", "path": "github.com/gophercloud/gophercloud/openstack/imageservice/v2/imagedata", - "revision": "f47ca3a2d457dd4601b823eb17ecc3094baf5fab", - "revisionTime": "2017-02-17T17:23:12Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { - "checksumSHA1": "TG1z1hNllqjUgBpNnqZTxHqXBTs=", + "checksumSHA1": "fyXTcJg3obtp3n+99WOGtUiMelg=", "path": "github.com/gophercloud/gophercloud/openstack/imageservice/v2/images", - "revision": "f47ca3a2d457dd4601b823eb17ecc3094baf5fab", - "revisionTime": "2017-02-17T17:23:12Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "aTHxjMlfNXFJ3l2TZyvIwqt/3kM=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/firewalls", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "14ZhP0wE/WCL/6oujcML755AaH4=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/policies", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "sYET5A7WTyJ7dpuxR/VXYoReldw=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/rules", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { - "checksumSHA1": "0UcU/7oQbhlnYKoT+I+T403U8MQ=", + "checksumSHA1": "CHmnyRSFPivC+b/ojgfeEIY5ReM=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "Mjt7GwFygyqPxygY8xZZnUasHmk=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "mCTz2rnyVfhjJ+AD/WihCNcYWiY=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/members", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "B2mtHvADREtFLam72wyijyQh/Ds=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/monitors", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "pTr22CKKJ26yvhgd0SRxFF4jkEs=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/pools", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "E7/Z7g5O9o+ge+8YklheTpKgWNw=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/vips", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "mhpwj5tPv7Uw5aUfC55fhLPBcKo=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "5efJz6UH7JCFeav5ZCCzicXCFTU=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/loadbalancers", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "TVFgBTz7B6bb1R4TWdgAkbE1/fk=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "xirjw9vJIN6rmkT3T56bfPfOLUM=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "FKwSMrpQf7b3TcCOQfh+ovoBShA=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "CsS/kI3VeLcSHzMKviFVDwqwgvk=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "zKOhFTL5BDZPMC58ZzZkryjskno=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/networks", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "Lx257Qaf6y2weNwHTx6lm3OY7a8=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/ports", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "wY0MY7RpX0Z2Y0rMmrAuYS6cHYA=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/subnets", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "LtdQKIKKRKe6FOGdBvrBz/bg1Gc=", "path": "github.com/gophercloud/gophercloud/openstack/objectstorage/v1/accounts", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "1lwXcRrM5A7iCfekbn3bpfNLe3g=", "path": "github.com/gophercloud/gophercloud/openstack/objectstorage/v1/containers", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "dotTh+ZsNiyv8e9Z4e0chPEZDKE=", "path": "github.com/gophercloud/gophercloud/openstack/objectstorage/v1/objects", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "roxPPVwS2CjJhf0CApHNQxAX7EA=", "path": "github.com/gophercloud/gophercloud/openstack/objectstorage/v1/swauth", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "TDOZnaS0TO0NirpxV1QwPerAQTY=", "path": "github.com/gophercloud/gophercloud/openstack/utils", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { - "checksumSHA1": "pmpLcbUZ+EgLUmTbzMtGRq3haOU=", + "checksumSHA1": "FNy075ydQZXvnL2bNNIOCmy/ghs=", "path": "github.com/gophercloud/gophercloud/pagination", - "revision": "b06120d13e262ceaf890ef38ee30898813696af0", - "revisionTime": "2017-02-14T04:36:15Z" + "revision": "0f64da0e36de86a0ca1a8f2fc1b0570a0d3f7504", + "revisionTime": "2017-03-10T01:59:53Z" }, { "checksumSHA1": "6tvhO5ieOvX9R6o0vtl19s0lr8E=",