vendor: Updates to Gophercloud (#11318)
This update fixes two upstream bugs: * Instance Personality was broke * Instance Floating IPs could not be unmarshaled in certain situations
This commit is contained in:
parent
4887844302
commit
7838bbb598
|
@ -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 `<ACTION>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
|
||||
}
|
||||
// ...
|
||||
```
|
|
@ -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.
|
||||
|
|
|
@ -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 {
|
||||
|
|
2
vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/requests.go
generated
vendored
2
vendor/github.com/gophercloud/gophercloud/openstack/compute/v2/servers/requests.go
generated
vendored
|
@ -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"`
|
||||
|
|
|
@ -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=",
|
||||
|
|
Loading…
Reference in New Issue