Difference between revisions of "Rackspace API/Cloud Networks"
(New page: This article will show various examples and techniques for working with Rackspace's [http://www.rackspace.com/cloud/networks Cloud Networks] (NaaS) RESTful API. ==HOWTO: create a Cloud Ne...) |
|||
Line 1: | Line 1: | ||
+ | <div style="margin: 10px; padding: 5px; border: 2px solid red; text-align: center">'''NOTE:''' This article was written in 2014 and is no longer maintained.</div> | ||
+ | |||
This article will show various examples and techniques for working with Rackspace's [http://www.rackspace.com/cloud/networks Cloud Networks] (NaaS) RESTful API. | This article will show various examples and techniques for working with Rackspace's [http://www.rackspace.com/cloud/networks Cloud Networks] (NaaS) RESTful API. | ||
Latest revision as of 17:29, 19 September 2019
This article will show various examples and techniques for working with Rackspace's Cloud Networks (NaaS) RESTful API.
HOWTO: create a Cloud Network and attach it to a Cloud Server
NOTE: This section will only cover the OpenStack Nova-Network API, not the new OpenStack Neutron API (see: "Networking: Neutron versus Nova-Network" for details on the difference).
- Step #0: Setup your environment variables (and authenticate to receive your 24-hour valid token):
$ ACCOUNT=<RAX_ACCOUNT> $ USERNAME=<RAX_USERNAME> $ APIKEY=<RAX_API_KEY> $ TOKEN=`curl -sXPOST https://identity.api.rackspacecloud.com/v2.0/tokens \ -d'{"auth":{"RAX-KSKEY:apiKeyCredentials": "username":"'$USERNAME'","apiKey":"'$APIKEY'"}}}' \ -H"Content-type:application/json" | \ python -c 'import sys,json;data=json.loads(sys.stdin.read());print data["access"]["token"]["id"]'`
- Step #1: Gather the Cloud Server details:
You first need the "server_id
" (aka the UUID of the Cloud Server you wish to attach a Cloud Network). You can either obtain the UUID of the server in question, or you can query the API like so:
$ REGION=dfw $ ENDPOINT=https://${REGION}.servers.api.rackspacecloud.com/v2/${ACCOUNT} $ # Get a list of all of your Cloud Servers: $ curl -sH "X-Auth-Token: $TOKEN" \ -H "Accept: application/json" \ "$ENDPOINT/servers" |\ python -mjson.tool $ # Or, get only UUID of the Cloud Server in question by using the server's name: $ SERVER_NAME="my-server-name" $ SERVER_ID=`curl -sH "X-Auth-Token: $TOKEN" -H "Content-Type: application/json"\ -H "Accept: application/json" "${ENDPOINT}/servers"|\ python -c 'import sys,json;data=json.loads(sys.stdin.read());\ print [i["id"] for i in data["servers"]\ if i["name"]=="'$SERVER_NAME'"][0]'`
- Step #2: Create a Cloud Network:
$ NETWORK_NAME="my-network-name" $ CIDR="192.168.0.0/24" $ curl -XPOST \ -H "X-Auth-Token: $TOKEN" \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ "${ENDPOINT}/os-networksv2" \ -d '{\"network\": {\"cidr\": \"$CIDR\", "label": "\$NETWORK_NAME\"}}' |\ python -m json.tool
Grab your new Cloud Network's UUID ("id") from the above output, or capture it with the following command:
$ NETWORK_ID=`curl -sH "X-Auth-Token: $TOKEN" -H "Content-Type: application/json"\ -H "Accept: application/json" "${ENDPOINT}/os-networksv2"|\ python -c 'import sys,json;data=json.loads(sys.stdin.read());\ print [i["id"] for i in data["networks"]\ if i["label"]=="'$NETWORK_NAME'"][0]'`
- Step #3: Attach your Cloud Network to your Cloud Server:
$ # List attached networks (before): $ curl -H "Content-Type:application/json" \ -H "X-Auth-Token: $TOKEN" \ "$ENDPOINT/servers/${SERVER_ID}/os-virtual-interfacesv2" |\ python -mjson.tool $ # Attach a Cloud Network: $ curl -XPOST \ -H "Content-Type:application/json" \ -H "X-Auth-Token: $TOKEN" \ "$ENDPOINT/servers/${SERVER_ID}/os-virtual-interfacesv2" \ -d "{\"virtual_interface\":{\"network_id\": \"$NETWORK_ID\"}}" $ # List attached networks (after): $ curl -H "Content-Type:application/json" \ -H "X-Auth-Token: $TOKEN" \ "$ENDPOINT/servers/${SERVER_ID}/os-virtual-interfacesv2" |\ python -mjson.tool
Note: If you are logged into your Cloud Server (via SSH; as root), you can watch the Cloud Network being attached by leaving the following command running from within the Cloud Server while you are attaching the Cloud Network:
$ xenstore-watch vm-data
The output of the above command before, during, and after attaching the Cloud Network will look something like the following:
vm-data vm-data/meta vm-data/networking/BC764EFFFFFF # <- Cloud Network attached vm-data/networking/BC764EFFFFFF vm-data/networking/BC764EFFFFFF
As a side note, you might have noticed that all NextGen virtual interfaces (PublicNet, PrivateNet, and Cloud Networks) on Cloud Servers have the same first three octets in their MAC addresses: "BC:76:4E". This is Rackspace's Organizationally Unique Identifier (OUI), so all of your virtual interfaces should match that (and something might have gone wrong if they do not). If you have Wireshark installed on your Cloud Server, you can get Rackspace's OUI with:
$ grep Rackspace /usr/share/wireshark/manuf BC:76:4E Rackspac # Rackspace US, Inc.
- Step #4: Test your new Cloud Network:
The new Cloud Network's configuration settings will be stored in the following file (it might not be "eth2" on your server):
/etc/sysconfig/network-scripts/ifcfg-eth2 # Red Hat-based systems
Checking your server network
$ ifconfig $ #~OR~ $ ip a show
should report the new virtual interface for your new Cloud Network.
You can also check your local XenStore data by running either of the following commands from within your Cloud Server (run as root):
$ xenstore-ls vm-data/networking $ xenstore-read vm-data/networking/BC764EFFFFFF
Finally, you can attach this same Cloud Network to another Cloud Server (in the same region/data centre) and make sure these two servers can communicate with each other on this private Cloud Network.