Interoute VDC API 101 Hello Cloud Computing: 10 steps to cloud automation throughout Europe! Jonathan.graham@interoute.com
API 101 Interoute VDC API RESTful (jclouds compliant) web service. 10 steps to cloud automation throughout Europe (London, Amsterdam, Berlin, Geneva, Paris._! 1. [ Steps 1-6] Determine resource IDs for VDC, Template Repositories and Templates 2. [Steps 7-10] Create Appliances; create VMs inside the VApps and deploy them. d 1
1] API Username, Password & Enterprise Ensure that your VDC account has been enabled (by your VDC Administrator) with API access From the Hub you will need to know the Enterprise ID and login credentials Write these down they will be needed later 2
2] Get VirtualDatacenters API command to query the VDCs provisioned and available to create cloud environments in. USE API credentials Output includes virtualdatacenters id curl --verbose -X GET -u username:password\ -H 'Accept: application/vnd.abiquo.virtualdatacenters+xml;version=2.0' \ -H 'Content-Type: application/vnd.abiquo.virtualdatacenters+xml;version=2.0' \ 'http://vdcbridge.interoute.com/jclouds/api/cloud/virtualdatacenters' 3
3] Get VirtualDatacenter API Command to query an individual virtualdatacenter Specify virtualdatacenters ID curl --verbose -X GET -u username:password\ -H 'Accept: application/vnd.abiquo.virtualdatacenter+xml;version=2.0' \ -H 'Content-Type: application/vnd.abiquo.virtualdatacenter+xml;version=2.0' \ 'http://vdcbridge.interoute.com/jclouds/api/cloud/virtualdatacenters/205' 4
4] Get Virtual Data Center Repositories API Command to determine an enterprises repository (where VM templates are stored) Specify enterprises ID (determined from Hub and recorded from earlier) Output includes datacenterrepositories ID on a per geography basis (e.g. 6 for London, 12 for Amsterdam) curl --verbose -X GET -u username:password\ -H 'Accept: application/vnd.abiquo.datacenterrepositories+xml;version=2.0' \ -H 'Content-Type: application/vnd.abiquo.datacenterrepositories+xml;version=2.0' \ 'http://vdcbridge.interoute.com/jclouds/api/admin/enterprises/137/datacenterreposito ries' 5
5] Get Virtual Machine Templates API Command to determine VM templates available in an enterprises repository Specify enterprises ID and datacenterrepositories ID Output includes virtualmachinetemplatesid (e.g. UBUNTU-10.04-LTS_LAMP is 231) curl --verbose -X GET -u username:password\ -H 'Accept: application/vnd.abiquo.virtualmachinetemplates+xml;version=2.0' \ -H 'Content-Type: application/vnd.abiquo.virtualmachinetemplates+xml;version=2.0' \ 'http://vdcbridge.interoute.com/jclouds/api/admin/enterprises/137/datacenterreposito ries/6/virtualmachinetemplates' 6
6] Get Virtual Machine Template API Command to determine specific VM template properties Specify enterprises ID, datacenterrepositories ID and virtualmachinetemplatesid curl --verbose -X GET -u username:password\ -H 'Accept: application/vnd.abiquo.virtualmachinetemplate+xml;version=2.0' \ -H 'Content-Type: application/vnd.abiquo.virtualmachinetemplate+xml;version=2.0' \ 'http://vdcbridge.interoute.com/jclouds/api/admin/enterprises/137/datacenterreposito ries/6/virtualmachinetemplates/318' 7
7] Post Virtual Appliance API Command to create VDC Virtual Appliance Specify virtualdatacenters ID and virtualappliance name curl --verbose -X POST -u username:password\ -H 'Accept: application/vnd.abiquo.virtualappliance+xml;version=2.0' \ -H 'Content-Type: application/vnd.abiquo.virtualappliance+xml;version=2.0' \ 'http://vdcbridge.interoute.com/jclouds/api/cloud/virtualdatacenters/200/virtualappl iances' \ -d '<virtualappliance><name>jgmagic</name></virtualappliance>' -H 'Content-Length: 999' 8
D dd kj a; dj ka sd j 8] Post Virtual Machine API Command to create VDC Virtual Machine (as part of Virtual Appliance) Specify virtualdatacenters ID, virtualappliance ID, virtualmachinetemplates ID and VM name Output includes virtualmachine ID (e.g. 1189) curl --verbose -X POST -u username:password\ -H 'Accept: application/vnd.abiquo.virtualmachine+xml;version=2.0' \ -H 'Content-Type: application/vnd.abiquo.virtualmachine+xml;version=2.0' \ 'http://vdcbridge.interoute.com/jclouds/api/cloud/virtualdatacenters/200/virtualappl iances/1643/virtualmachines' \ -d '<virtualmachine><link href="http://vdcmgmt.interoute,com/api/admin/enterprises/137/datacenterrepositories/6/virtualmachine templates/318" rel="virtualmachinetemplate" title="interoute_centos_6.0_web_server_(sparse)"/><name>hellocloudcomputing</name></ virtualmachine>' -H 'Content-Length: 999' 9
9] Post Virtual Machine Action Deploy API Command to deploy VDC Virtual Machine Specify virtualdatacenters ID, virtualappliance ID, virtualmachinetemplates ID and virtualmachines ID curl -X POST -u username:password\ -H 'Accept: application/vnd.abiquo.acceptedrequest+xml;version=2.0' \ -H 'Content-Type: application/vnd.abiquo.acceptedrequest+xml;version=2.0' \ 'http://vdcbridge.interoute.com/jclouds/api/cloud/virtualdatacenters/200/virtualappl iances/1643/virtualmachines/1189/action/deploy' \ -H 'Content-Length: 0' 10
Beyond the basics Geo aware Auto Scaling echo -e "\n Determining External [FW] IP address" MYIP=$(curl ifconfig.me) echo "$MYIP" echo -e "\n Determining GEO location from IP \n" MYLOC=$(curl -D - "http://freegeoip.net/xml/"$myip"" grep -E -m 1 -o "<CountryCode>(.*)</CountryCode>" sed -e 's,.*<countrycode>\([^<]*\)</countrycode>.*,\1,g') echo "$MYLOC" if [ $MYLOC == "GB" ] then echo -e "\n" "Your IP address is $MYIP. Your location is $MYLOC." "\n echo -e "\n" "London VDC is closest." "\n JGVM1=$(curl -X POST -u username:password \ -H 'Accept: application/vnd.abiquo.virtualmachine+xml;version=2.0' \ -H 'Content-Type: application/vnd.abiquo.virtualmachine+xml;version=2.0' \ 'http://vdcbridge.interoute.com/jclouds/api/cloud/virtualdatacenters/200/virtualappliances/1643/virtualmachines' \ -d '<virtualmachine><link href="http://vdc-mgmt.interoute.com/api/admin/enterprises/137/datacenterrepositories/6/virtualmachinetemplates/108" rel="virtualmachinetemplate" title="ubuntu 10.04 LTS LAMP"/><name>Hello</name></virtualMachine>') JGIDVM1=$(echo $JGVM1 grep -E -m 1 -o "<id>(.*)</id>") JGIDVM1RAW=$(echo $JGIDVM1 sed -e 's,.*<id>\([^<]*\)</id>.*,\1,g') curl -X POST -u username:password \ -H 'Accept: application/vnd.abiquo.acceptedrequest+xml;version=2.0' \ -H 'Content-Type: application/vnd.abiquo.acceptedrequest+xml;version=2.0' \ 'http://vdcbridge.interoute.com/jclouds/api/cloud/virtualdatacenters/200/virtualappliances/1643/virtualmachines/'$jgidvm1raw'/action/deploy' \ -H 'Content-Length: 0' 11
Further information Free VDC trial http://interoute.com/vdc Online wiki and tutorials including API detail http://kc.interoute.com http://kc.interoute.com/library/articles/help-topics/vdc-apis Contact: vdcsales@interoute.com 12