Add DriverOpts for routers
diff --git a/openstack/networking/v2/extensions/layer3/routers/requests.go b/openstack/networking/v2/extensions/layer3/routers/requests.go
index 8b6e73d..a5f2644 100644
--- a/openstack/networking/v2/extensions/layer3/routers/requests.go
+++ b/openstack/networking/v2/extensions/layer3/routers/requests.go
@@ -18,6 +18,7 @@
AdminStateUp *bool `q:"admin_state_up"`
Status string `q:"status"`
TenantID string `q:"tenant_id"`
+ RouterType string `q:"router_type"`
Limit int `q:"limit"`
Marker string `q:"marker"`
SortKey string `q:"sort_key"`
@@ -47,6 +48,7 @@
Name string
AdminStateUp *bool
TenantID string
+ DriverOpts map[string]string
GatewayInfo *GatewayInfo
}
@@ -59,27 +61,37 @@
// 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"`
- 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,
- 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 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/requests_test.go b/openstack/networking/v2/extensions/layer3/routers/requests_test.go
index 1981733..1bb0745 100644
--- a/openstack/networking/v2/extensions/layer3/routers/requests_test.go
+++ b/openstack/networking/v2/extensions/layer3/routers/requests_test.go
@@ -37,6 +37,7 @@
"name": "second_routers",
"admin_state_up": true,
"tenant_id": "6b96ff0cb17a4b859e1e575d221683d3",
+ "router_type": "shared",
"id": "7177abc4-5ae9-4bb7-b0d4-89e94a4abf3b"
},
{
@@ -47,6 +48,7 @@
"name": "router1",
"admin_state_up": true,
"tenant_id": "33a40233088643acb66ff6eb0ebea679",
+ "router_type": "shared",
"id": "a9254bdb-2613-4a13-ac4c-adc581fba50d"
}
]
@@ -72,6 +74,7 @@
Name: "second_routers",
ID: "7177abc4-5ae9-4bb7-b0d4-89e94a4abf3b",
TenantID: "6b96ff0cb17a4b859e1e575d221683d3",
+ RouterType: "shared",
},
Router{
Status: "ACTIVE",
@@ -80,6 +83,7 @@
Name: "router1",
ID: "a9254bdb-2613-4a13-ac4c-adc581fba50d",
TenantID: "33a40233088643acb66ff6eb0ebea679",
+ RouterType: "shared",
},
}
@@ -127,6 +131,7 @@
"name": "foo_router",
"admin_state_up": false,
"tenant_id": "6b96ff0cb17a4b859e1e575d221683d3",
+ "router_type": "shared",
"id": "8604a0de-7f6b-409a-a47c-a1cc7bc77b2e"
}
}
@@ -176,6 +181,7 @@
"name": "router1",
"admin_state_up": true,
"tenant_id": "d6554fe62e2f41efbb6e026fad5c1542",
+ "router_type": "shared",
"id": "a07eea83-7710-4860-931b-5fe220fae533"
}
}
@@ -233,6 +239,7 @@
"name": "new_name",
"admin_state_up": true,
"tenant_id": "6b96ff0cb17a4b859e1e575d221683d3",
+ "router_type": "shared",
"id": "8604a0de-7f6b-409a-a47c-a1cc7bc77b2e",
"routes": [
{
@@ -287,6 +294,7 @@
"name": "name",
"admin_state_up": true,
"tenant_id": "6b96ff0cb17a4b859e1e575d221683d3",
+ "router_type": "shared",
"id": "8604a0de-7f6b-409a-a47c-a1cc7bc77b2e",
"routes": []
}
diff --git a/openstack/networking/v2/extensions/layer3/routers/results.go b/openstack/networking/v2/extensions/layer3/routers/results.go
index 5e297ab..b65a8bc 100644
--- a/openstack/networking/v2/extensions/layer3/routers/results.go
+++ b/openstack/networking/v2/extensions/layer3/routers/results.go
@@ -45,6 +45,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"`
}