I have succeeded in putting together a basic script documenting exactly how API works and for adding node(s), listing the nods behind the LB, as well as updating the nodes (such as DRAINING, DISABLED, ENABLED).
Use update node to set one of your nodes to gracefully drain (not accept new connections, wait for present connections to die). Naturally, you will want to put the secondary server in behind the load balancer first, with addnode.sh.
Once new node is added as enabled, set the old node to ‘DRAINING’. This will gracefully switch over the server.
# List Load Balancers
#!/bin/bash USERNAME='yourmycloudusernamegoeshere' APIKEY='apikeygoeshere' LB_ID='157089' CUSTOMER_ID='10017858' TOKEN=`curl https://identity.api.rackspacecloud.com/v2.0/tokens -X POST -d '{ "auth":{"RAX-KSKEY:apiKeyCredentials": { "username":"'$USERNAME'", "apiKey": "'$APIKEY'" }} }' -H "Content-type: application/json" | python -mjson.tool | grep -A5 token | grep id | cut -d '"' -f4` curl -v -H "X-Auth-Token: $TOKEN" -H "content-type: application/json" -X GET "https://lon.loadbalancers.api.rackspacecloud.com/v1.0/$CUSTOMER_ID/loadbalancers/$LB_ID"
#
# Add Node(s) addnode.sh
#!/bin/bash USERNAME='yourmycloudusernamegoeshere' APIKEY='apikeygoeshere' LB_ID='157089' CUSTOMER_ID='10017858' TOKEN=`curl https://identity.api.rackspacecloud.com/v2.0/tokens -X POST -d '{ "auth":{"RAX-KSKEY:apiKeyCredentials": { "username":"'$USERNAME'", "apiKey": "'$APIKEY'" }} }' -H "Content-type: application/json" | python -mjson.tool | grep -A5 token | grep id | cut -d '"' -f4` # Add Node curl -v -H "X-Auth-Token: $TOKEN" -d @addnode.json -H "content-type: application/json" -X POST "https://lon.loadbalancers.api.rackspacecloud.com/v1.0/$CUSTOMER_ID/loadbalancers/$LB_ID/nodes" ## For the addnode script you require a file, called addnode.json that file must contain the snet ip's you wish to add
# # addnode.json {"nodes": [ { "address": "10.0.0.1", "port": 80, "condition": "ENABLED", "type":"PRIMARY" } ] }
##
##
# updatenode.sh
#!/bin/bash USERNAME='yourmycloudusernamegoeshere' APIKEY='apikeygoeshere' LB_ID='157089' CUSTOMER_ID='100101010' NODE_ID=719425 TOKEN=`curl https://identity.api.rackspacecloud.com/v2.0/tokens -X POST -d '{ "auth":{"RAX-KSKEY:apiKeyCredentials": { "username":"'$USERNAME'", "apiKey": "'$APIKEY'" }} }' -H "Content-type: applic # Update Node curl -v -H "X-Auth-Token: $TOKEN" -d @updatenode.json -H "content-type: application/json" -X PUT "https://lon.loadbalancers.api.rackspacecloud.com/v1.0/$CUSTOMER_ID/loadbalancers/$LB_ID/nodes/$NODE_ID"
##
##
## updatenode.json
{"node":{ "condition": "DISABLED", "type":"PRIMARY" } }
Naturally, you will be able to change condition to ENABLED, DISABLED, or DRAINING.
I recommend to use DRAINING, since it will gracefully remove the cloud-server, and any existing connections will be waited on, before removing the server from LB.