Merge branch 'master' into add-router-type
diff --git a/openstack/networking/v2/extensions/layer3/routers/requests.go b/openstack/networking/v2/extensions/layer3/routers/requests.go
index 1ffc136..ed0ea07 100644
--- a/openstack/networking/v2/extensions/layer3/routers/requests.go
+++ b/openstack/networking/v2/extensions/layer3/routers/requests.go
@@ -49,6 +49,7 @@
AdminStateUp *bool
Distributed *bool
TenantID string
+ DriverOpts map[string]string
GatewayInfo *GatewayInfo
}
@@ -61,29 +62,41 @@
// an external network (it is external if its `router:external' field is set to
// true).
func Create(c *gophercloud.ServiceClient, opts CreateOpts) CreateResult {
- type router struct {
- Name *string `json:"name,omitempty"`
- AdminStateUp *bool `json:"admin_state_up,omitempty"`
- Distributed *bool `json:"distributed,omitempty"`
- TenantID *string `json:"tenant_id,omitempty"`
- GatewayInfo *GatewayInfo `json:"external_gateway_info,omitempty"`
- }
type request struct {
- Router router `json:"router"`
+ Router map[string]interface{} `json:"router"`
}
- reqBody := request{Router: router{
- Name: gophercloud.MaybeString(opts.Name),
- AdminStateUp: opts.AdminStateUp,
- Distributed: opts.Distributed,
- TenantID: gophercloud.MaybeString(opts.TenantID),
- }}
+ routerMap := make(map[string]interface{})
+
+ if gophercloud.MaybeString(opts.Name) != nil {
+ routerMap["name"] = opts.Name
+ }
+
+ if opts.AdminStateUp != nil {
+ routerMap["admin_state_up"] = opts.AdminStateUp
+ }
+
+ if opts.Distributed != nil {
+ routerMap["distributed"] = opts.Distributed
+ }
+
+ if gophercloud.MaybeString(opts.TenantID) != nil {
+ routerMap["tenant_id"] = opts.TenantID
+ }
if opts.GatewayInfo != nil {
- reqBody.Router.GatewayInfo = opts.GatewayInfo
+ routerMap["external_gateway_info"] = opts.GatewayInfo
}
+ if opts.DriverOpts != nil {
+ for k, v := range opts.DriverOpts {
+ routerMap[k] = v
+ }
+ }
+
+ reqBody := request{Router: routerMap}
+
var res CreateResult
_, res.Err = c.Post(rootURL(c), reqBody, &res.Body, nil)
return res
diff --git a/openstack/networking/v2/extensions/layer3/routers/results.go b/openstack/networking/v2/extensions/layer3/routers/results.go
index 4534123..9b811cb 100644
--- a/openstack/networking/v2/extensions/layer3/routers/results.go
+++ b/openstack/networking/v2/extensions/layer3/routers/results.go
@@ -48,6 +48,9 @@
// other than its own.
TenantID string `json:"tenant_id" mapstructure:"tenant_id"`
+ // Whether router is Exclusive or Shared.
+ RouterType string `json:"router_type" mapstructure:"router_type"`
+
Routes []Route `json:"routes" mapstructure:"routes"`
}