diff --git a/openstack/loadbalancer/v2/loadbalancers/requests.go b/openstack/loadbalancer/v2/loadbalancers/requests.go index 099113c418..94da5ec694 100644 --- a/openstack/loadbalancer/v2/loadbalancers/requests.go +++ b/openstack/loadbalancer/v2/loadbalancers/requests.go @@ -140,6 +140,10 @@ type CreateOpts struct { // Tags is a set of resource tags. Tags []string `json:"tags,omitempty"` + + // The additional ips of the loadbalancer. Subnets must all belong to the same network as the primary VIP. + // New in version 2.26 + AdditionalVIps []AdditionalVip `json:"additional_vips,omitempty"` } // ToLoadBalancerCreateMap builds a request body from CreateOpts. diff --git a/openstack/loadbalancer/v2/loadbalancers/results.go b/openstack/loadbalancer/v2/loadbalancers/results.go index 71f750dd6a..64870d5d39 100644 --- a/openstack/loadbalancer/v2/loadbalancers/results.go +++ b/openstack/loadbalancer/v2/loadbalancers/results.go @@ -77,6 +77,16 @@ type LoadBalancer struct { // Tags is a list of resource tags. Tags are arbitrarily defined strings // attached to the resource. Tags []string `json:"tags"` + + // The additional ips of the loadbalancer. Subnets must all belong to the same network as the primary VIP. + // New in version 2.26 + AdditionalVIps []AdditionalVip `json:"additional_vips"` +} + +// AdditionalVip represent additional ip of a loadbalancer. IpAddress field is optional. +type AdditionalVip struct { + SubnetID string `json:"subnet_id"` + IPAddress string `json:"ip_address,omitempty"` } func (r *LoadBalancer) UnmarshalJSON(b []byte) error { diff --git a/openstack/loadbalancer/v2/loadbalancers/testing/fixtures.go b/openstack/loadbalancer/v2/loadbalancers/testing/fixtures.go index 5a8ce9e362..06e47c7304 100644 --- a/openstack/loadbalancer/v2/loadbalancers/testing/fixtures.go +++ b/openstack/loadbalancer/v2/loadbalancers/testing/fixtures.go @@ -19,7 +19,7 @@ import ( const LoadbalancersListBody = ` { "loadbalancers":[ - { + { "id": "c331058c-6a40-4144-948e-b9fb1df9db4b", "project_id": "54030507-44f7-473c-9342-b4d14a95f692", "created_at": "2019-06-30T04:15:37", @@ -52,7 +52,8 @@ const LoadbalancersListBody = ` "admin_state_up": true, "provisioning_status": "PENDING_CREATE", "operating_status": "OFFLINE", - "tags": ["test", "stage"] + "tags": ["test", "stage"], + "additional_vips": [{"subnet_id": "0d4f6a08-60b7-44ab-8903-f7d76ec54095", "ip_address" : "192.168.10.10"}] } ] } @@ -77,7 +78,8 @@ const SingleLoadbalancerBody = ` "admin_state_up": true, "provisioning_status": "PENDING_CREATE", "operating_status": "OFFLINE", - "tags": ["test", "stage"] + "tags": ["test", "stage"], + "additional_vips": [{"subnet_id": "0d4f6a08-60b7-44ab-8903-f7d76ec54095", "ip_address" : "192.168.10.10"}] } } ` @@ -289,7 +291,12 @@ var ( ProvisioningStatus: "PENDING_CREATE", OperatingStatus: "OFFLINE", Tags: []string{"test", "stage"}, - } + AdditionalVIps: []loadbalancers.AdditionalVip{ + { + SubnetID: "0d4f6a08-60b7-44ab-8903-f7d76ec54095", + IPAddress: "192.168.10.10", + }, + }} LoadbalancerUpdated = loadbalancers.LoadBalancer{ ID: "36e08a3e-a78f-4b40-a229-1e7e23eee1ab", ProjectID: "54030507-44f7-473c-9342-b4d14a95f692", @@ -546,7 +553,8 @@ func HandleLoadbalancerCreationSuccessfully(t *testing.T, response string) { "flavor_id": "bba40eb2-ee8c-11e9-81b4-2a2ae2dbcce4", "provider": "haproxy", "admin_state_up": true, - "tags": ["test", "stage"] + "tags": ["test", "stage"], + "additional_vips": [{"subnet_id": "0d4f6a08-60b7-44ab-8903-f7d76ec54095", "ip_address" : "192.168.10.10"}] } }`) diff --git a/openstack/loadbalancer/v2/loadbalancers/testing/requests_test.go b/openstack/loadbalancer/v2/loadbalancers/testing/requests_test.go index 8a420621bb..1d4831c167 100644 --- a/openstack/loadbalancer/v2/loadbalancers/testing/requests_test.go +++ b/openstack/loadbalancer/v2/loadbalancers/testing/requests_test.go @@ -72,6 +72,12 @@ func TestCreateLoadbalancer(t *testing.T) { FlavorID: "bba40eb2-ee8c-11e9-81b4-2a2ae2dbcce4", Provider: "haproxy", Tags: []string{"test", "stage"}, + AdditionalVIps: []loadbalancers.AdditionalVip{ + { + SubnetID: "0d4f6a08-60b7-44ab-8903-f7d76ec54095", + IPAddress: "192.168.10.10", + }, + }, }).Extract() th.AssertNoErr(t, err)