diff --git a/vendor/github.com/gophercloud/gophercloud/FAQ.md b/vendor/github.com/gophercloud/gophercloud/FAQ.md new file mode 100644 index 0000000000..88a366a288 --- /dev/null +++ b/vendor/github.com/gophercloud/gophercloud/FAQ.md @@ -0,0 +1,148 @@ +# Tips + +## Implementing default logging and re-authentication attempts + +You can implement custom logging and/or limit re-auth attempts by creating a custom HTTP client +like the following and setting it as the provider client's HTTP Client (via the +`gophercloud.ProviderClient.HTTPClient` field): + +```go +//... + +// LogRoundTripper satisfies the http.RoundTripper interface and is used to +// customize the default Gophercloud RoundTripper to allow for logging. +type LogRoundTripper struct { + rt http.RoundTripper + numReauthAttempts int +} + +// newHTTPClient return a custom HTTP client that allows for logging relevant +// information before and after the HTTP request. +func newHTTPClient() http.Client { + return http.Client{ + Transport: &LogRoundTripper{ + rt: http.DefaultTransport, + }, + } +} + +// RoundTrip performs a round-trip HTTP request and logs relevant information about it. +func (lrt *LogRoundTripper) RoundTrip(request *http.Request) (*http.Response, error) { + glog.Infof("Request URL: %s\n", request.URL) + + response, err := lrt.rt.RoundTrip(request) + if response == nil { + return nil, err + } + + if response.StatusCode == http.StatusUnauthorized { + if lrt.numReauthAttempts == 3 { + return response, fmt.Errorf("Tried to re-authenticate 3 times with no success.") + } + lrt.numReauthAttempts++ + } + + glog.Debugf("Response Status: %s\n", response.Status) + + return response, nil +} + +endpoint := "https://127.0.0.1/auth" +pc := openstack.NewClient(endpoint) +pc.HTTPClient = newHTTPClient() + +//... +``` + + +## Implementing custom objects + +OpenStack request/response objects may differ among variable names or types. + +### Custom request objects + +To pass custom options to a request, implement the desired `OptsBuilder` interface. For +example, to pass in + +```go +type MyCreateServerOpts struct { + Name string + Size int +} +``` + +to `servers.Create`, simply implement the `servers.CreateOptsBuilder` interface: + +```go +func (o MyCreateServeropts) ToServerCreateMap() (map[string]interface{}, error) { + return map[string]interface{}{ + "name": o.Name, + "size": o.Size, + }, nil +} +``` + +create an instance of your custom options object, and pass it to `servers.Create`: + +```go +// ... +myOpts := MyCreateServerOpts{ + Name: "s1", + Size: "100", +} +server, err := servers.Create(computeClient, myOpts).Extract() +// ... +``` + +### Custom response objects + +Some OpenStack services have extensions. Extensions that are supported in Gophercloud can be +combined to create a custom object: + +```go +// ... +type MyVolume struct { + volumes.Volume + tenantattr.VolumeExt +} + +var v struct { + MyVolume `json:"volume"` +} + +err := volumes.Get(client, volID).ExtractInto(&v) +// ... +``` + +## Overriding default `UnmarshalJSON` method + +For some response objects, a field may be a custom type or may be allowed to take on +different types. In these cases, overriding the default `UnmarshalJSON` method may be +necessary. To do this, declare the JSON `struct` field tag as "-" and create an `UnmarshalJSON` +method on the type: + +```go +// ... +type MyVolume struct { + ID string `json: "id"` + TimeCreated time.Time `json: "-"` +} + +func (r *MyVolume) UnmarshalJSON(b []byte) error { + type tmp MyVolume + var s struct { + tmp + TimeCreated gophercloud.JSONRFC3339MilliNoZ `json:"created_at"` + } + err := json.Unmarshal(b, &s) + if err != nil { + return err + } + *r = Volume(s.tmp) + + r.TimeCreated = time.Time(s.CreatedAt) + + return err +} +// ... +``` diff --git a/vendor/github.com/gophercloud/gophercloud/README.md b/vendor/github.com/gophercloud/gophercloud/README.md index 0e1fe0630f..8d8d0a5c64 100644 --- a/vendor/github.com/gophercloud/gophercloud/README.md +++ b/vendor/github.com/gophercloud/gophercloud/README.md @@ -125,6 +125,10 @@ The above code sample creates a new server with the parameters, and embodies the new resource in the `server` variable (a [`servers.Server`](http://godoc.org/github.com/gophercloud/gophercloud) struct). +## Advanced Usage + +Have a look at the [FAQ](./FAQ.md) for some tips on customizing the way Gophercloud works. + ## Backwards-Compatibility Guarantees None. Vendor it and write tests covering the parts you use. diff --git a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/floatingips/results.go b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/floatingips/results.go index 753f3afa75..2f5b33844e 100644 --- a/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/floatingips/results.go +++ b/vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/floatingips/results.go @@ -1,6 +1,9 @@ package floatingips import ( + "encoding/json" + "strconv" + "github.com/gophercloud/gophercloud" "github.com/gophercloud/gophercloud/pagination" ) @@ -8,7 +11,7 @@ import ( // A FloatingIP is an IP that can be associated with an instance type FloatingIP struct { // ID is a unique ID of the Floating IP - ID string `json:"id"` + ID string `json:"-"` // FixedIP is the IP of the instance related to the Floating IP FixedIP string `json:"fixed_ip,omitempty"` @@ -23,6 +26,29 @@ type FloatingIP struct { Pool string `json:"pool"` } +func (r *FloatingIP) UnmarshalJSON(b []byte) error { + type tmp FloatingIP + var s struct { + tmp + ID interface{} `json:"id"` + } + err := json.Unmarshal(b, &s) + if err != nil { + return err + } + + *r = FloatingIP(s.tmp) + + switch t := s.ID.(type) { + case float64: + r.ID = strconv.FormatFloat(t, 'f', -1, 64) + case string: + r.ID = t + } + + return err +} + // FloatingIPPage stores a single, only page of FloatingIPs // results from a List call. type FloatingIPPage struct { 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 0ec5b0fdbf..c79a6e6f6b 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 @@ -160,7 +160,7 @@ type CreateOpts struct { // Personality includes files to inject into the server at launch. // Create will base64-encode file contents for you. - Personality Personality `json:"-"` + Personality Personality `json:"personality,omitempty"` // ConfigDrive enables metadata injection through a configuration drive. ConfigDrive *bool `json:"config_drive,omitempty"` diff --git a/vendor/vendor.json b/vendor/vendor.json index 226e293bdd..328edd8f58 100644 --- a/vendor/vendor.json +++ b/vendor/vendor.json @@ -1316,268 +1316,268 @@ "revisionTime": "2016-11-07T00:24:06Z" }, { - "checksumSHA1": "DkbpYqirk9i+2YDR5Ujzpot/oAg=", + "checksumSHA1": "t8C0jff5naj/d2EYrUqdKus8lGY=", "path": "github.com/gophercloud/gophercloud", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "S3zTth9INyj1RfyHkQEvJAvRWvw=", "path": "github.com/gophercloud/gophercloud/openstack", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "XAKLUSwXSMGtbp+U874qU4MzT/A=", "path": "github.com/gophercloud/gophercloud/openstack/blockstorage/extensions/volumeactions", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "PFD8SEqhArAy/6jRbIlYb5lp64k=", "path": "github.com/gophercloud/gophercloud/openstack/blockstorage/v1/volumes", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "B4IXSmq364HcBruvvV0QjDFxZgc=", "path": "github.com/gophercloud/gophercloud/openstack/blockstorage/v2/volumes", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "w2wHF5eEBE89ZYlkS9GAJsSIq9U=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/bootfromvolume", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { - "checksumSHA1": "pUlKsepGmWDd4PqPaK4W85pHsRU=", + "checksumSHA1": "e7AW3YDVYJPKUjpqsB4AL9RRlTw=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/floatingips", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "RWwUliHD65cWApdEo4ckOcPSArg=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/keypairs", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "tOmntqlmZ/r8aObUChNloddLhwk=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/schedulerhints", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "jNrUTQf+9dYfaD7YqvKwC+kGvyY=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/secgroups", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "ci4gzd7Uy9JC4NcQ2ms19pjtW6s=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/servergroups", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "qBpGbX7LQMPATdO8XyQmU7IXDiI=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/startstop", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "5JuziAp9BSRA/z+8pTjVLTWeTw4=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/tenantnetworks", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "2VNgU0F9PDax5VKClvMLmbzuksw=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/extensions/volumeattach", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "a9xDFPigDjHlPlthknKlBduGvKY=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/flavors", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "UGeqrw3KdPNRwDxl315MAYyy/uY=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/images", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { - "checksumSHA1": "efmzF4m/gZ8nKJ5B9RcdQfgCy/o=", + "checksumSHA1": "S8zR7Y8Yf6dz5+m5jyWYu5ar+vk=", "path": "github.com/gophercloud/gophercloud/openstack/compute/v2/servers", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "1sVqsZBZBNhDXLY9XzjMkcOkcbg=", "path": "github.com/gophercloud/gophercloud/openstack/identity/v2/tenants", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "AvUU5En9YpG25iLlcAPDgcQODjI=", "path": "github.com/gophercloud/gophercloud/openstack/identity/v2/tokens", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "ZKyEbJuIlvuZ9aUushINCXJHF4w=", "path": "github.com/gophercloud/gophercloud/openstack/identity/v3/tokens", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "aTHxjMlfNXFJ3l2TZyvIwqt/3kM=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/firewalls", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "14ZhP0wE/WCL/6oujcML755AaH4=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/policies", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "sYET5A7WTyJ7dpuxR/VXYoReldw=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/fwaas/rules", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "0UcU/7oQbhlnYKoT+I+T403U8MQ=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/floatingips", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "Mjt7GwFygyqPxygY8xZZnUasHmk=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/layer3/routers", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "mCTz2rnyVfhjJ+AD/WihCNcYWiY=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/members", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "B2mtHvADREtFLam72wyijyQh/Ds=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/monitors", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "pTr22CKKJ26yvhgd0SRxFF4jkEs=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/pools", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "E7/Z7g5O9o+ge+8YklheTpKgWNw=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas/vips", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "mhpwj5tPv7Uw5aUfC55fhLPBcKo=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/listeners", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "5efJz6UH7JCFeav5ZCCzicXCFTU=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/loadbalancers", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "TVFgBTz7B6bb1R4TWdgAkbE1/fk=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/monitors", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "xirjw9vJIN6rmkT3T56bfPfOLUM=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/lbaas_v2/pools", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "FKwSMrpQf7b3TcCOQfh+ovoBShA=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/groups", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "CsS/kI3VeLcSHzMKviFVDwqwgvk=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/extensions/security/rules", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "zKOhFTL5BDZPMC58ZzZkryjskno=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/networks", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "BE+CO3QrEGpIgv3Ee2ANZp1WtSo=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/ports", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "wY0MY7RpX0Z2Y0rMmrAuYS6cHYA=", "path": "github.com/gophercloud/gophercloud/openstack/networking/v2/subnets", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "LtdQKIKKRKe6FOGdBvrBz/bg1Gc=", "path": "github.com/gophercloud/gophercloud/openstack/objectstorage/v1/accounts", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "1lwXcRrM5A7iCfekbn3bpfNLe3g=", "path": "github.com/gophercloud/gophercloud/openstack/objectstorage/v1/containers", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "dotTh+ZsNiyv8e9Z4e0chPEZDKE=", "path": "github.com/gophercloud/gophercloud/openstack/objectstorage/v1/objects", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "roxPPVwS2CjJhf0CApHNQxAX7EA=", "path": "github.com/gophercloud/gophercloud/openstack/objectstorage/v1/swauth", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "TDOZnaS0TO0NirpxV1QwPerAQTY=", "path": "github.com/gophercloud/gophercloud/openstack/utils", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "pmpLcbUZ+EgLUmTbzMtGRq3haOU=", "path": "github.com/gophercloud/gophercloud/pagination", - "revision": "368deee20062b2c7a043f792d7d998abe621872e", - "revisionTime": "2017-01-12T21:19:23Z" + "revision": "ed2f96ce05eb76a9fe89e671467ebf1818f49234", + "revisionTime": "2017-01-20T19:02:54Z" }, { "checksumSHA1": "6tvhO5ieOvX9R6o0vtl19s0lr8E=",