Sharing IP Adresses with cURL#
These sections walk you through creating a shared IP address and attaching it to two existing servers or two new servers by using cURL.
Once the steps are completed, there will be a shared IP address common to two servers in the control plane. However, you will still need to configure the guest on the servers, perhaps an application like Linux-HA to take advantage of the shared IP during a failover.
If you already have two active servers, start here: Verifying servers share publicIPZoneId (cURL)
If you need to create servers, start here: Creating server A (cURL)
Creating server A (cURL)#
Create the first server by using the standard Nova boot process.
Issue the following cURL command, substituting your own values for the ones shown.
Boot server A with cURL request
$ curl -i -vv https://dfw.servers.api.rackspacecloud.com/v2/$TENANT_ID/servers -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -H "X-Auth-Token: $AUTH_TOKEN" \ -d '{"server": {"name": "serverA", "imageRef": "2f85a777-9ffd-4b49-a60e-1155ceb93a5e", "flavorRef": "4", "max_count": 1, "min_count": 1, "networks": [ {"uuid": "00000000-0000-0000-0000-000000000000"}, {"uuid": "11111111-1111-1111-1111-111111111111"} ]}}' | python -m json.toolBoot server A with cURL response
{ "server": { "OS-DCF:diskConfig": "AUTO", "id": "f387799f-9668-4cc7-9f0f-03c9cfc43af6", "links": [ { "href": "https://dfw.servers.api.rackspacecloud.com/v2/5831008/servers/f387799f-9668-4cc7-9f0f-03c9cfc43af6", "rel": "self" }, { "href": "https://dfw.servers.api.rackspacecloud.com/5831008/servers/f387799f-9668-4cc7-9f0f-03c9cfc43af6", "rel": "bookmark" } ], "adminPass": "27L93SfBWttf" } }
Copy the
idvalue from the output. You will need this value when you performing other related activities. In this example, the ID isf387799f-9668-4cc7-9f0f-03c9cfc43af6, but use the ID from your response.
Getting server A publicIPZoneId (cURL)#
In order to share a public IP address, the servers have to be in the same
publicIPZoneId. To determine the server’s publicIPZoneId, perform the
GET server details operation and find the
RAX-PUBLIC-IP-ZONE-ID:publicIPZoneId attribute.
Note
If you want to share a Cloud Networks (or isolated network) address, the
servers do not need to be in the same publicIPZoneId.
Issue the following cURL command, substituting your own values for the ones shown.
Show server A details with cURL request
$ curl -s https://dfw.servers.api.rackspacecloud.com/v2/$TENANT_ID/servers/f387799f-9668-4cc7-9f0f-03c9cfc43af6 \ -X GET \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -H "X-Auth-Token: $AUTH_TOKEN" | python -m json.toolShow server A details with cURL response
{ "server": { "OS-DCF:diskConfig": "AUTO", "OS-EXT-STS:power_state": 1, "OS-EXT-STS:task_state": null, "OS-EXT-STS:vm_state": "active", "RAX-PUBLIC-IP-ZONE-ID:publicIPZoneId": "85013d5f5100b7b903bc99c3a333d9af01ecd4b4f0df970a2c27a796", "accessIPv4": "166.78.9.96", "accessIPv6": "2001:4800:7810:512:b8bd:1f9c:ff05:339e", ... "id": "f387799f-9668-4cc7-9f0f-03c9cfc43af6", ... } }
Note the server id, in this case
f387799f-9668-4cc7-9f0f-03c9cfc43af6, and theRAX-PUBLIC-IP-ZONE-ID:publicIPZoneIdvalue, in this example85013d5f5100b7b903bc99c3a333d9af01ecd4b4f0df970a2c27a796.
Creating server B (cURL)#
The following step shows you how to create server B in the same
publicIPZoneId as server A, by using a scheduler hint to direct the service
to create server B near to server A (f387799f-9668-4cc7-9f0f-03c9cfc43af6).
Issue the following cURL command, substituting your own values for the ones shown.
Boot server B with cURL request
$ curl -i -vv https://dfw.servers.api.rackspacecloud.com/v2/$TENANT_ID/servers
-X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "X-Auth-Token: $AUTH_TOKEN" \
-d '{"server": {"name": "serverB",
"os:scheduler_hints": {"public_ip_zone:near":
["f387799f-9668-4cc7-9f0f-03c9cfc43af6"]},
"imageRef": "2f85a777-9ffd-4b49-a60e-1155ceb93a5e",
"flavorRef": "4", "max_count": 1, "min_count": 1,
"networks": [
{"uuid": "00000000-0000-0000-0000-000000000000"},
{"uuid": "11111111-1111-1111-1111-111111111111"}
]}}' | python -m json.tool
Boot server B with cURL response
{
"server": {
"OS-DCF:diskConfig": "AUTO",
"id": "1a861bf7-2a5e-40a4-acb3-1fb058cf2a74",
"links": [
{
"href": "https://dfw.servers.api.rackspacecloud.com/v2/5831008/servers/1a861bf7-2a5e-40a4-acb3-1fb058cf2a74",
"rel": "self"
},
{
"href": "https://dfw.servers.api.rackspacecloud.com/5831008/servers/1a861bf7-2a5e-40a4-acb3-1fb058cf2a74",
"rel": "bookmark"
}
],
"adminPass": "42L12DfA13sd"
}
}
Verifying servers share publicIPZoneId (cURL)#
The following steps show you how to verify that both servers are in the same
publicIPZoneId using cURL.
You have already run this command for server A and noted the
RAX-PUBLIC-IP-ZONE-ID:publicIPZoneId. Now, issue the following cURL command, substituting your own Server B id for the server id in the command.Show server B details with cURL request
$ curl -s https://dfw.servers.api.rackspacecloud.com/v2/$TENANT_ID/servers/1a861bf7-2a5e-40a4-acb3-1fb058cf2a74 \ -X GET \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -H "X-Auth-Token: $AUTH_TOKEN" | python -m json.toolShow server B details with cURL response
{ "server": { "OS-DCF:diskConfig": "AUTO", ... "RAX-PUBLIC-IP-ZONE-ID:publicIPZoneId": "85013d5f5100b7b903bc99c3a333d9af01ecd4b4f0df970a2c27a796", ... "id": "1a861bf7-2a5e-40a4-acb3-1fb058cf2a74", ... } }
Make sure the
RAX-PUBLIC-IP-ZONE-ID:publicIPZoneIdvalue is the same for both server A and server B.
Showing server ports (cURL)#
The following step shows you how to boot a server by using the port ID of the port that you configured with dual-stack IP addresses in the second step of this procedure.
Issue the following cURL command for server A, where the value for device_id is your server A ID.
List server A ports with cURL request
$ curl -s $API_ENDPOINT/ports?device_id=f387799f-9668-4cc7-9f0f-03c9cfc43af6 \ -X GET \ -H "Content-Type: application/json" \ -H "User-Agent: python-novaclient" \ -H "Accept: application/json" \ -H "X-Auth-Token: $AUTH_TOKEN" | python -m json.toolPositional arguments
The server A ID. In this example, the ID is
f387799f-9668-4cc7-9f0f-03c9cfc43af6.
List server A ports with cURL response
{ "ports_links": [ { "href": "http://localhost:9696/v2.0/ports?device_id=f387799f-9668-4cc7-9f0f-03c9cfc43af6&marker=ad88326b-b232-45e8-9fe6-ff0618ff5de6&page_reverse=True", "rel": "previous" } ], "ports": [ { "status": "ACTIVE", "name": "", "admin_state_up": true, "network_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "1234567", "device_owner": "compute:None", "mac_address": "BC:76:4E:05:39:80", "fixed_ips": [ { "subnet_id": "00ef42bd-5d9c-45f7-8f8a-07660ca17418", "ip_address": "2001:4800:7818:101:be76:4eff:fe05:3980" }, { "subnet_id": "55a4df37-6aad-4bd7-85b7-7d30a884c595", "ip_address": "104.130.132.199" } ], "id": "ad88326b-b232-45e8-9fe6-ff0618ff5de6", "security_groups": [], "device_id": "f387799f-9668-4cc7-9f0f-03c9cfc43af6" }, { "status": "ACTIVE", "name": "", "admin_state_up": true, "network_id": "11111111-1111-1111-1111-111111111111", "tenant_id": "1234567", "device_owner": "compute:None", "mac_address": "BC:76:4E:05:6E:0D", "fixed_ips": [ { "subnet_id": "aaa8137b-d52e-43ee-887a-7fd066acd127", "ip_address": "10.208.232.222" } ], "id": "098994a6-898b-4d30-a123-31ab5dac220f", "security_groups": [], "device_id": "e2f6b206-278d-40e4-915e-cce62a171ac0" } ] }
Note the id value for the port where the network_id is
00000000-0000-0000-0000-000000000000for future reference. In this example, the ID isad88326b-b232-45e8-9fe6-ff0618ff5de6), but use the ID from your response.Repeat the
GET /portscommand (step 1 in this procedure) for server B, and note the port ID for that server’s public network.
Creating shared IP address (cURL)#
The following steps show you how to create a shared IP address for the Server A and B public network ports identified in the previous step.
Issue the following cURL command, using your port IDs and tenant ID.
Create IP address with cURL request
$ curl -s $API_ENDPOINT/ip_addresses \ -X POST \ -H "Content-Type: application/json" \ -H "User-Agent: python-novaclient" \ -H "Accept: application/json" \ -H "X-Auth-Token: $AUTH_TOKEN" \ -d "{"ip_address":{"network_id": "00000000-0000-0000-0000-000000000000", "port_ids": [ "ad88326b-b232-45e8-9fe6-ff0618ff5de6", "51ca694d-c60a-4162-8070-54b3385a7833" ], "tenant_id": "1234567", "version": 4}}" | python -m json.toolCreate IP address with cURL response
{ "ip_address": { "subnet_id": "2ecd46c2-64a5-4d81-84a9-58536306c851", "version": 4, "address": "23.253.64.51", "network_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "661145", "port_ids": [ "ad88326b-b232-45e8-9fe6-ff0618ff5de6", "51ca694d-c60a-4162-8070-54b3385a7833" ], "type": "shared", "id": "89875b4a-b098-414f-980a-5e9f89078a49" } }
Note the new shared IP ID for future reference. In this example, the ID is
89875b4a-b098-414f-980a-5e9f89078a49), but use the ID from your response.
Associating shared IP address to both servers (cURL)#
The following steps show you how to explicitly associate the new shared IP address to servers A and B.
Issue the following cURL command, using your server A ID and shared IP address ID.
Associate IP address to server A with cURL request
$ curl -s https://dfw.servers.api.rackspacecloud.com/v2/$TENANT_ID/servers/f387799f-9668-4cc7-9f0f-03c9cfc43af6/ip_associations/89875b4a-b098-414f-980a-5e9f89078a49 \ -X PUT \ -H "Content-Type: application/json" \ -H "User-Agent: python-novaclient" \ -H "Accept: application/json" \ -H "X-Auth-Token: $AUTH_TOKEN" | python -m json.toolPositional arguments
The server A ID. In this example, the ID is
f387799f-9668-4cc7-9f0f-03c9cfc43af6.The shared IP address. In this example, the IP address is
89875b4a-b098-414f-980a-5e9f89078a49.
Associate IP address to server A with cURL response
{ "ip_associations": [ { "id": "1", "address": "166.78.9.96" }, { "id": "2", "address": "23.253.64.51" } ] }
Repeat the process for server B.
Issue the following cURL command, using your server B ID and shared IP address ID.
Associate IP address to server B with cURL request
$ curl -s https://dfw.servers.api.rackspacecloud.com/v2/$TENANT_ID/servers/1a861bf7-2a5e-40a4-acb3-1fb058cf2a74/ip_associations/89875b4a-b098-414f-980a-5e9f89078a49 \ -X PUT \ -H "Content-Type: application/json" \ -H "User-Agent: python-novaclient" \ -H "Accept: application/json" \ -H "X-Auth-Token: $AUTH_TOKEN" | python -m json.toolPositional arguments
The server B ID. In this example, the ID is
1a861bf7-2a5e-40a4-acb3-1fb058cf2a74.The shared IP address. In this example, the IP address is
89875b4a-b098-414f-980a-5e9f89078a49.
Associate IP address to server B with cURL response
{ "ip_associations": [ { "id": "1", "address": "162.209.72.242" }, { "id": "2", "address": "23.253.64.51" } ] }
Verifying shared IP address (cURL)#
The following steps show you how to verify that the shared IP address is set for the Server A and B public network ports.
Issue the following cURL command, using your port IDs and tenant ID.
List IP addresses with cURL request
$ curl -s $API_ENDPOINT/ip_addresses \ -X GET \ -H "Content-Type: application/json" \ -H "User-Agent: python-novaclient" \ -H "Accept: application/json" \ -H "X-Auth-Token: $AUTH_TOKEN" | python -m json.toolList IP addresses with cURL response
{ "ip_addresses": [ { "subnet_id": "4707387f-e03d-4026-ab42-a44960e2c25e", "version": 4, "address": "10.182.1.134", "network_id": "11111111-1111-1111-1111-111111111111", "tenant_id": "661145", "port_ids": [ "6899273a-6840-4875-9e26-e6c56c44ef25" ], "type": "fixed", "id": "82bb89ad-89dc-4cf7-a2ca-020869e33c08" }, { "subnet_id": "2ecd46c2-64a5-4d81-84a9-58536306c851", "version": 4, "address": "23.253.64.51", "network_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "661145", "port_ids": [ "96924e21-127e-4460-9a14-8f9a74e4f0b1", "9d0db2d7-62df-4c99-80cb-6f140a5260e8" ], "type": "shared", "id": "89875b4a-b098-414f-980a-5e9f89078a49" }, { "subnet_id": "c27b857f-3765-45bb-8fae-c6bec114259b", "version": 4, "address": "166.78.60.76", "network_id": "00000000-0000-0000-0000-000000000000", "tenant_id": "661145", "port_ids": [ "9d0db2d7-62df-4c99-80cb-6f140a5260e8" ], "type": "fixed", "id": "8fbc0756-470b-4883-be03-4deaf0a6c465" } ] }
Note that both ports show up for the IP address you created. In this case, the shared IP address is
23.253.64.51and both ports are listed.
Next topic: Control Network Access