You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltacloud.apache.org by cc...@apache.org on 2010/08/13 16:30:26 UTC
svn commit: r985209 [1/11] - in /incubator/deltacloud/trunk/site: ./
Scripts/ css/ css/blueprint/ css/blueprint/plugins/
css/blueprint/plugins/buttons/ css/blueprint/plugins/buttons/icons/
css/blueprint/plugins/fancy-type/ css/blueprint/plugins/link-ic...
Author: cctrieloff
Date: Fri Aug 13 14:30:21 2010
New Revision: 985209
URL: http://svn.apache.org/viewvc?rev=985209&view=rev
Log:
Initial site checkin from mfojtik
Added:
incubator/deltacloud/trunk/site/
incubator/deltacloud/trunk/site/Clear_Skin_1.swf (with props)
incubator/deltacloud/trunk/site/FLVPlayer_Progressive.swf (with props)
incubator/deltacloud/trunk/site/Scripts/
incubator/deltacloud/trunk/site/Scripts/expressInstall.swf (with props)
incubator/deltacloud/trunk/site/Scripts/swfobject_modified.js
incubator/deltacloud/trunk/site/api.html
incubator/deltacloud/trunk/site/client-ruby.html
incubator/deltacloud/trunk/site/contribute.html
incubator/deltacloud/trunk/site/css/
incubator/deltacloud/trunk/site/css/blueprint/
incubator/deltacloud/trunk/site/css/blueprint/ie.css
incubator/deltacloud/trunk/site/css/blueprint/plugins/
incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/
incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/icons/
incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/icons/cross.png (with props)
incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/icons/key.png (with props)
incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/icons/tick.png (with props)
incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/readme.txt
incubator/deltacloud/trunk/site/css/blueprint/plugins/buttons/screen.css
incubator/deltacloud/trunk/site/css/blueprint/plugins/fancy-type/
incubator/deltacloud/trunk/site/css/blueprint/plugins/fancy-type/readme.txt
incubator/deltacloud/trunk/site/css/blueprint/plugins/fancy-type/screen.css
incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/
incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/
incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/doc.png (with props)
incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/email.png (with props)
incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/external.png (with props)
incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/feed.png (with props)
incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/im.png (with props)
incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/pdf.png (with props)
incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/visited.png (with props)
incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/icons/xls.png (with props)
incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/readme.txt
incubator/deltacloud/trunk/site/css/blueprint/plugins/link-icons/screen.css
incubator/deltacloud/trunk/site/css/blueprint/plugins/rtl/
incubator/deltacloud/trunk/site/css/blueprint/plugins/rtl/readme.txt
incubator/deltacloud/trunk/site/css/blueprint/plugins/rtl/screen.css
incubator/deltacloud/trunk/site/css/blueprint/print.css
incubator/deltacloud/trunk/site/css/blueprint/screen.css
incubator/deltacloud/trunk/site/css/blueprint/src/
incubator/deltacloud/trunk/site/css/blueprint/src/forms.css
incubator/deltacloud/trunk/site/css/blueprint/src/grid.css
incubator/deltacloud/trunk/site/css/blueprint/src/grid.png (with props)
incubator/deltacloud/trunk/site/css/blueprint/src/ie.css
incubator/deltacloud/trunk/site/css/blueprint/src/print.css
incubator/deltacloud/trunk/site/css/blueprint/src/reset.css
incubator/deltacloud/trunk/site/css/blueprint/src/typography.css
incubator/deltacloud/trunk/site/css/coderay.css
incubator/deltacloud/trunk/site/css/site.css
incubator/deltacloud/trunk/site/dcloud-demo.html
incubator/deltacloud/trunk/site/dcloud.html
incubator/deltacloud/trunk/site/doc/
incubator/deltacloud/trunk/site/doc/DeltaCloud/
incubator/deltacloud/trunk/site/doc/DeltaCloud.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/API/
incubator/deltacloud/trunk/site/doc/DeltaCloud/API.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/API/HardwareProfile.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/API/Image.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/API/Instance.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/API/Realm.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/API/StorageSnapshot.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/API/StorageVolume.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/Documentation/
incubator/deltacloud/trunk/site/doc/DeltaCloud/Documentation.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/Documentation/OperationParameter.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/HWP/
incubator/deltacloud/trunk/site/doc/DeltaCloud/HWP.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/HWP/FloatProperty.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/HWP/Property.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/InstanceState/
incubator/deltacloud/trunk/site/doc/DeltaCloud/InstanceState.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/InstanceState/State.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/InstanceState/Transition.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/
incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/
incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/Base.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/HardwareProfile.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/Image.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/Instance.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/Realm.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/StorageSnapshot.html
incubator/deltacloud/trunk/site/doc/DeltaCloud/PlainFormatter/FormatObject/StorageVolume.html
incubator/deltacloud/trunk/site/doc/String.html
incubator/deltacloud/trunk/site/doc/class_list.html
incubator/deltacloud/trunk/site/doc/css/
incubator/deltacloud/trunk/site/doc/css/common.css
incubator/deltacloud/trunk/site/doc/css/full_list.css
incubator/deltacloud/trunk/site/doc/css/style.css
incubator/deltacloud/trunk/site/doc/file.README.html
incubator/deltacloud/trunk/site/doc/file_list.html
incubator/deltacloud/trunk/site/doc/frames.html
incubator/deltacloud/trunk/site/doc/index.html
incubator/deltacloud/trunk/site/doc/js/
incubator/deltacloud/trunk/site/doc/js/app.js
incubator/deltacloud/trunk/site/doc/js/full_list.js
incubator/deltacloud/trunk/site/doc/js/jquery.js
incubator/deltacloud/trunk/site/doc/method_list.html
incubator/deltacloud/trunk/site/doc/top-level-namespace.html
incubator/deltacloud/trunk/site/documentation.html
incubator/deltacloud/trunk/site/download.html
incubator/deltacloud/trunk/site/drivers.html
incubator/deltacloud/trunk/site/framework.html
incubator/deltacloud/trunk/site/image-builder.html
incubator/deltacloud/trunk/site/index.html
incubator/deltacloud/trunk/site/jquery.fancybox/
incubator/deltacloud/trunk/site/jquery.fancybox/blank.gif (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_close.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_loading.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_nav_left.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_nav_right.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_e.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_n.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_ne.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_nw.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_s.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_se.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_sw.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_shadow_w.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_title_left.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_title_main.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_title_over.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancy_title_right.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancybox-x.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancybox-y.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/fancybox.png (with props)
incubator/deltacloud/trunk/site/jquery.fancybox/jquery-1.3.2.min.js
incubator/deltacloud/trunk/site/jquery.fancybox/jquery.easing-1.3.pack.js
incubator/deltacloud/trunk/site/jquery.fancybox/jquery.fancybox-1.3.1.css
incubator/deltacloud/trunk/site/jquery.fancybox/jquery.fancybox-1.3.1.pack.js
incubator/deltacloud/trunk/site/styles/
incubator/deltacloud/trunk/site/styles/backup/
incubator/deltacloud/trunk/site/styles/backup/callout-bg.png (with props)
incubator/deltacloud/trunk/site/styles/backup/definition.png (with props)
incubator/deltacloud/trunk/site/styles/backup/introbg.png (with props)
incubator/deltacloud/trunk/site/styles/backup/introbg2.png (with props)
incubator/deltacloud/trunk/site/styles/backup/logo-banner.png (with props)
incubator/deltacloud/trunk/site/styles/backup/logo.png (with props)
incubator/deltacloud/trunk/site/styles/backup/navbarbg.png (with props)
incubator/deltacloud/trunk/site/styles/backup/topbar-bg.png (with props)
incubator/deltacloud/trunk/site/styles/backup/topbar-bg_2.png (with props)
incubator/deltacloud/trunk/site/styles/basic-relationships.png (with props)
incubator/deltacloud/trunk/site/styles/bullet.png (with props)
incubator/deltacloud/trunk/site/styles/colbg.png (with props)
incubator/deltacloud/trunk/site/styles/dcloud-soa-1.png (with props)
incubator/deltacloud/trunk/site/styles/dcloud.css
incubator/deltacloud/trunk/site/styles/debug.css
incubator/deltacloud/trunk/site/styles/default-debug.css
incubator/deltacloud/trunk/site/styles/default.css
incubator/deltacloud/trunk/site/styles/diagram-soa.png (with props)
incubator/deltacloud/trunk/site/styles/et_logo.png (with props)
incubator/deltacloud/trunk/site/styles/fade.png (with props)
incubator/deltacloud/trunk/site/styles/favicon.ico (with props)
incubator/deltacloud/trunk/site/styles/firstpage.css
incubator/deltacloud/trunk/site/styles/footer_corner.png (with props)
incubator/deltacloud/trunk/site/styles/footer_pattern.png (with props)
incubator/deltacloud/trunk/site/styles/framework.png (with props)
incubator/deltacloud/trunk/site/styles/generic.css
incubator/deltacloud/trunk/site/styles/introbg.png (with props)
incubator/deltacloud/trunk/site/styles/logo-wide.png (with props)
incubator/deltacloud/trunk/site/styles/logo.png (with props)
incubator/deltacloud/trunk/site/styles/navbarbg.png (with props)
incubator/deltacloud/trunk/site/styles/newsbullet.png (with props)
incubator/deltacloud/trunk/site/styles/subnav-bg.png (with props)
incubator/deltacloud/trunk/site/styles/subnav-pointer.png (with props)
incubator/deltacloud/trunk/site/styles/topbar-bg.png (with props)
incubator/deltacloud/trunk/site/styles/wikibar-bg.png (with props)
incubator/deltacloud/trunk/site/video/
incubator/deltacloud/trunk/site/video/DCloud.png (with props)
incubator/deltacloud/trunk/site/video/DCloud300.png (with props)
incubator/deltacloud/trunk/site/video/DCloud_Demo.png (with props)
incubator/deltacloud/trunk/site/video/DCloud_Demo300.png (with props)
Added: incubator/deltacloud/trunk/site/Clear_Skin_1.swf
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/Clear_Skin_1.swf?rev=985209&view=auto
==============================================================================
Binary file - no diff available.
Propchange: incubator/deltacloud/trunk/site/Clear_Skin_1.swf
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: incubator/deltacloud/trunk/site/FLVPlayer_Progressive.swf
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/FLVPlayer_Progressive.swf?rev=985209&view=auto
==============================================================================
Binary file - no diff available.
Propchange: incubator/deltacloud/trunk/site/FLVPlayer_Progressive.swf
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: incubator/deltacloud/trunk/site/Scripts/expressInstall.swf
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/Scripts/expressInstall.swf?rev=985209&view=auto
==============================================================================
Binary file - no diff available.
Propchange: incubator/deltacloud/trunk/site/Scripts/expressInstall.swf
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: incubator/deltacloud/trunk/site/Scripts/swfobject_modified.js
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/Scripts/swfobject_modified.js?rev=985209&view=auto
==============================================================================
--- incubator/deltacloud/trunk/site/Scripts/swfobject_modified.js (added)
+++ incubator/deltacloud/trunk/site/Scripts/swfobject_modified.js Fri Aug 13 14:30:21 2010
@@ -0,0 +1,669 @@
+/*! SWFObject v2.0 <http://code.google.com/p/swfobject/>
+ Copyright (c) 2007 Geoff Stearns, Michael Williams, and Bobby van der Sluis
+ This software is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
+*/
+
+var swfobject = function() {
+
+ var UNDEF = "undefined",
+ OBJECT = "object",
+ SHOCKWAVE_FLASH = "Shockwave Flash",
+ SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
+ FLASH_MIME_TYPE = "application/x-shockwave-flash",
+ EXPRESS_INSTALL_ID = "SWFObjectExprInst",
+
+ win = window,
+ doc = document,
+ nav = navigator,
+
+ domLoadFnArr = [],
+ regObjArr = [],
+ timer = null,
+ storedAltContent = null,
+ storedAltContentId = null,
+ isDomLoaded = false,
+ isExpressInstallActive = false;
+
+ /* Centralized function for browser feature detection
+ - Proprietary feature detection (conditional compiling) is used to detect Internet Explorer's features
+ - User agent string detection is only used when no alternative is possible
+ - Is executed directly for optimal performance
+ */
+ var ua = function() {
+ var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF && typeof doc.appendChild != UNDEF && typeof doc.replaceChild != UNDEF && typeof doc.removeChild != UNDEF && typeof doc.cloneNode != UNDEF,
+ playerVersion = [0,0,0],
+ d = null;
+ if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
+ d = nav.plugins[SHOCKWAVE_FLASH].description;
+ if (d) {
+ d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
+ playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
+ playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
+ playerVersion[2] = /r/.test(d) ? parseInt(d.replace(/^.*r(.*)$/, "$1"), 10) : 0;
+ }
+ }
+ else if (typeof win.ActiveXObject != UNDEF) {
+ var a = null, fp6Crash = false;
+ try {
+ a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".7");
+ }
+ catch(e) {
+ try {
+ a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".6");
+ playerVersion = [6,0,21];
+ a.AllowScriptAccess = "always"; // Introduced in fp6.0.47
+ }
+ catch(e) {
+ if (playerVersion[0] == 6) {
+ fp6Crash = true;
+ }
+ }
+ if (!fp6Crash) {
+ try {
+ a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
+ }
+ catch(e) {}
+ }
+ }
+ if (!fp6Crash && a) { // a will return null when ActiveX is disabled
+ try {
+ d = a.GetVariable("$version"); // Will crash fp6.0.21/23/29
+ if (d) {
+ d = d.split(" ")[1].split(",");
+ playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
+ }
+ }
+ catch(e) {}
+ }
+ }
+ var u = nav.userAgent.toLowerCase(),
+ p = nav.platform.toLowerCase(),
+ webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
+ ie = false,
+ windows = p ? /win/.test(p) : /win/.test(u),
+ mac = p ? /mac/.test(p) : /mac/.test(u);
+ /*@cc_on
+ ie = true;
+ @if (@_win32)
+ windows = true;
+ @elif (@_mac)
+ mac = true;
+ @end
+ @*/
+ return { w3cdom:w3cdom, pv:playerVersion, webkit:webkit, ie:ie, win:windows, mac:mac };
+ }();
+
+ /* Cross-browser onDomLoad
+ - Based on Dean Edwards' solution: http://dean.edwards.name/weblog/2006/06/again/
+ - Will fire an event as soon as the DOM of a page is loaded (supported by Gecko based browsers - like Firefox -, IE, Opera9+, Safari)
+ */
+ var onDomLoad = function() {
+ if (!ua.w3cdom) {
+ return;
+ }
+ addDomLoadEvent(main);
+ if (ua.ie && ua.win) {
+ try { // Avoid a possible Operation Aborted error
+ doc.write("<scr" + "ipt id=__ie_ondomload defer=true src=//:></scr" + "ipt>"); // String is split into pieces to avoid Norton AV to add code that can cause errors
+ var s = getElementById("__ie_ondomload");
+ if (s) {
+ s.onreadystatechange = function() {
+ if (this.readyState == "complete") {
+ this.parentNode.removeChild(this);
+ callDomLoadFunctions();
+ }
+ };
+ }
+ }
+ catch(e) {}
+ }
+ if (ua.webkit && typeof doc.readyState != UNDEF) {
+ timer = setInterval(function() { if (/loaded|complete/.test(doc.readyState)) { callDomLoadFunctions(); }}, 10);
+ }
+ if (typeof doc.addEventListener != UNDEF) {
+ doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, null);
+ }
+ addLoadEvent(callDomLoadFunctions);
+ }();
+
+ function callDomLoadFunctions() {
+ if (isDomLoaded) {
+ return;
+ }
+ if (ua.ie && ua.win) { // Test if we can really add elements to the DOM; we don't want to fire it too early
+ var s = createElement("span");
+ try { // Avoid a possible Operation Aborted error
+ var t = doc.getElementsByTagName("body")[0].appendChild(s);
+ t.parentNode.removeChild(t);
+ }
+ catch (e) {
+ return;
+ }
+ }
+ isDomLoaded = true;
+ if (timer) {
+ clearInterval(timer);
+ timer = null;
+ }
+ var dl = domLoadFnArr.length;
+ for (var i = 0; i < dl; i++) {
+ domLoadFnArr[i]();
+ }
+ }
+
+ function addDomLoadEvent(fn) {
+ if (isDomLoaded) {
+ fn();
+ }
+ else {
+ domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
+ }
+ }
+
+ /* Cross-browser onload
+ - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
+ - Will fire an event as soon as a web page including all of its assets are loaded
+ */
+ function addLoadEvent(fn) {
+ if (typeof win.addEventListener != UNDEF) {
+ win.addEventListener("load", fn, false);
+ }
+ else if (typeof doc.addEventListener != UNDEF) {
+ doc.addEventListener("load", fn, false);
+ }
+ else if (typeof win.attachEvent != UNDEF) {
+ win.attachEvent("onload", fn);
+ }
+ else if (typeof win.onload == "function") {
+ var fnOld = win.onload;
+ win.onload = function() {
+ fnOld();
+ fn();
+ };
+ }
+ else {
+ win.onload = fn;
+ }
+ }
+
+ /* Main function
+ - Will preferably execute onDomLoad, otherwise onload (as a fallback)
+ */
+ function main() { // Static publishing only
+ var rl = regObjArr.length;
+ for (var i = 0; i < rl; i++) { // For each registered object element
+ var id = regObjArr[i].id;
+ if (ua.pv[0] > 0) {
+ var obj = getElementById(id);
+ if (obj) {
+ regObjArr[i].width = obj.getAttribute("width") ? obj.getAttribute("width") : "0";
+ regObjArr[i].height = obj.getAttribute("height") ? obj.getAttribute("height") : "0";
+ if (hasPlayerVersion(regObjArr[i].swfVersion)) { // Flash plug-in version >= Flash content version: Houston, we have a match!
+ if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore the object element's nested param elements
+ fixParams(obj);
+ }
+ setVisibility(id, true);
+ }
+ else if (regObjArr[i].expressInstall && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) { // Show the Adobe Express Install dialog if set by the web page author and if supported (fp6.0.65+ on Win/Mac OS only)
+ showExpressInstall(regObjArr[i]);
+ }
+ else { // Flash plug-in and Flash content version mismatch: display alternative content instead of Flash content
+ displayAltContent(obj);
+ }
+ }
+ }
+ else { // If no fp is installed, we let the object element do its job (show alternative content)
+ setVisibility(id, true);
+ }
+ }
+ }
+
+ /* Fix nested param elements, which are ignored by older webkit engines
+ - This includes Safari up to and including version 1.2.2 on Mac OS 10.3
+ - Fall back to the proprietary embed element
+ */
+ function fixParams(obj) {
+ var nestedObj = obj.getElementsByTagName(OBJECT)[0];
+ if (nestedObj) {
+ var e = createElement("embed"), a = nestedObj.attributes;
+ if (a) {
+ var al = a.length;
+ for (var i = 0; i < al; i++) {
+ if (a[i].nodeName.toLowerCase() == "data") {
+ e.setAttribute("src", a[i].nodeValue);
+ }
+ else {
+ e.setAttribute(a[i].nodeName, a[i].nodeValue);
+ }
+ }
+ }
+ var c = nestedObj.childNodes;
+ if (c) {
+ var cl = c.length;
+ for (var j = 0; j < cl; j++) {
+ if (c[j].nodeType == 1 && c[j].nodeName.toLowerCase() == "param") {
+ e.setAttribute(c[j].getAttribute("name"), c[j].getAttribute("value"));
+ }
+ }
+ }
+ obj.parentNode.replaceChild(e, obj);
+ }
+ }
+
+ /* Fix hanging audio/video threads and force open sockets and NetConnections to disconnect
+ - Occurs when unloading a web page in IE using fp8+ and innerHTML/outerHTML
+ - Dynamic publishing only
+ */
+ function fixObjectLeaks(id) {
+ if (ua.ie && ua.win && hasPlayerVersion("8.0.0")) {
+ win.attachEvent("onunload", function () {
+ var obj = getElementById(id);
+ if (obj) {
+ for (var i in obj) {
+ if (typeof obj[i] == "function") {
+ obj[i] = function() {};
+ }
+ }
+ obj.parentNode.removeChild(obj);
+ }
+ });
+ }
+ }
+
+ /* Show the Adobe Express Install dialog
+ - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
+ */
+ function showExpressInstall(regObj) {
+ isExpressInstallActive = true;
+ var obj = getElementById(regObj.id);
+ if (obj) {
+ if (regObj.altContentId) {
+ var ac = getElementById(regObj.altContentId);
+ if (ac) {
+ storedAltContent = ac;
+ storedAltContentId = regObj.altContentId;
+ }
+ }
+ else {
+ storedAltContent = abstractAltContent(obj);
+ }
+ if (!(/%$/.test(regObj.width)) && parseInt(regObj.width, 10) < 310) {
+ regObj.width = "310";
+ }
+ if (!(/%$/.test(regObj.height)) && parseInt(regObj.height, 10) < 137) {
+ regObj.height = "137";
+ }
+ doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
+ var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
+ dt = doc.title,
+ fv = "MMredirectURL=" + win.location + "&MMplayerType=" + pt + "&MMdoctitle=" + dt,
+ replaceId = regObj.id;
+ // For IE when a SWF is loading (AND: not available in cache) wait for the onload event to fire to remove the original object element
+ // In IE you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
+ if (ua.ie && ua.win && obj.readyState != 4) {
+ var newObj = createElement("div");
+ replaceId += "SWFObjectNew";
+ newObj.setAttribute("id", replaceId);
+ obj.parentNode.insertBefore(newObj, obj); // Insert placeholder div that will be replaced by the object element that loads expressinstall.swf
+ obj.style.display = "none";
+ win.attachEvent("onload", function() { obj.parentNode.removeChild(obj); });
+ }
+ createSWF({ data:regObj.expressInstall, id:EXPRESS_INSTALL_ID, width:regObj.width, height:regObj.height }, { flashvars:fv }, replaceId);
+ }
+ }
+
+ /* Functions to abstract and display alternative content
+ */
+ function displayAltContent(obj) {
+ if (ua.ie && ua.win && obj.readyState != 4) {
+ // For IE when a SWF is loading (AND: not available in cache) wait for the onload event to fire to remove the original object element
+ // In IE you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
+ var el = createElement("div");
+ obj.parentNode.insertBefore(el, obj); // Insert placeholder div that will be replaced by the alternative content
+ el.parentNode.replaceChild(abstractAltContent(obj), el);
+ obj.style.display = "none";
+ win.attachEvent("onload", function() { obj.parentNode.removeChild(obj); });
+ }
+ else {
+ obj.parentNode.replaceChild(abstractAltContent(obj), obj);
+ }
+ }
+
+ function abstractAltContent(obj) {
+ var ac = createElement("div");
+ if (ua.win && ua.ie) {
+ ac.innerHTML = obj.innerHTML;
+ }
+ else {
+ var nestedObj = obj.getElementsByTagName(OBJECT)[0];
+ if (nestedObj) {
+ var c = nestedObj.childNodes;
+ if (c) {
+ var cl = c.length;
+ for (var i = 0; i < cl; i++) {
+ if (!(c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "param") && !(c[i].nodeType == 8)) {
+ ac.appendChild(c[i].cloneNode(true));
+ }
+ }
+ }
+ }
+ }
+ return ac;
+ }
+
+ /* Cross-browser dynamic SWF creation
+ */
+ function createSWF(attObj, parObj, id) {
+ var r, el = getElementById(id);
+ if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
+ attObj.id = id;
+ }
+ if (ua.ie && ua.win) { // IE, the object element and W3C DOM methods do not combine: fall back to outerHTML
+ var att = "";
+ for (var i in attObj) {
+ if (attObj[i] != Object.prototype[i]) { // Filter out prototype additions from other potential libraries, like Object.prototype.toJSONString = function() {}
+ if (i == "data") {
+ parObj.movie = attObj[i];
+ }
+ else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+ att += ' class="' + attObj[i] + '"';
+ }
+ else if (i != "classid") {
+ att += ' ' + i + '="' + attObj[i] + '"';
+ }
+ }
+ }
+ var par = "";
+ for (var j in parObj) {
+ if (parObj[j] != Object.prototype[j]) { // Filter out prototype additions from other potential libraries
+ par += '<param name="' + j + '" value="' + parObj[j] + '" />';
+ }
+ }
+ el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
+ fixObjectLeaks(attObj.id); // This bug affects dynamic publishing only
+ r = getElementById(attObj.id);
+ }
+ else if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore the object element's nested param elements: fall back to the proprietary embed element
+ var e = createElement("embed");
+ e.setAttribute("type", FLASH_MIME_TYPE);
+ for (var k in attObj) {
+ if (attObj[k] != Object.prototype[k]) { // Filter out prototype additions from other potential libraries
+ if (k == "data") {
+ e.setAttribute("src", attObj[k]);
+ }
+ else if (k.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+ e.setAttribute("class", attObj[k]);
+ }
+ else if (k != "classid") { // Filter out IE specific attribute
+ e.setAttribute(k, attObj[k]);
+ }
+ }
+ }
+ for (var l in parObj) {
+ if (parObj[l] != Object.prototype[l]) { // Filter out prototype additions from other potential libraries
+ if (l != "movie") { // Filter out IE specific param element
+ e.setAttribute(l, parObj[l]);
+ }
+ }
+ }
+ el.parentNode.replaceChild(e, el);
+ r = e;
+ }
+ else { // Well-behaving browsers
+ var o = createElement(OBJECT);
+ o.setAttribute("type", FLASH_MIME_TYPE);
+ for (var m in attObj) {
+ if (attObj[m] != Object.prototype[m]) { // Filter out prototype additions from other potential libraries
+ if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+ o.setAttribute("class", attObj[m]);
+ }
+ else if (m != "classid") { // Filter out IE specific attribute
+ o.setAttribute(m, attObj[m]);
+ }
+ }
+ }
+ for (var n in parObj) {
+ if (parObj[n] != Object.prototype[n] && n != "movie") { // Filter out prototype additions from other potential libraries and IE specific param element
+ createObjParam(o, n, parObj[n]);
+ }
+ }
+ el.parentNode.replaceChild(o, el);
+ r = o;
+ }
+ return r;
+ }
+
+ function createObjParam(el, pName, pValue) {
+ var p = createElement("param");
+ p.setAttribute("name", pName);
+ p.setAttribute("value", pValue);
+ el.appendChild(p);
+ }
+
+ function getElementById(id) {
+ return doc.getElementById(id);
+ }
+
+ function createElement(el) {
+ return doc.createElement(el);
+ }
+
+ function hasPlayerVersion(rv) {
+ var pv = ua.pv, v = rv.split(".");
+ v[0] = parseInt(v[0], 10);
+ v[1] = parseInt(v[1], 10);
+ v[2] = parseInt(v[2], 10);
+ return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
+ }
+
+ /* Cross-browser dynamic CSS creation
+ - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
+ */
+ function createCSS(sel, decl) {
+ if (ua.ie && ua.mac) {
+ return;
+ }
+ var h = doc.getElementsByTagName("head")[0], s = createElement("style");
+ s.setAttribute("type", "text/css");
+ s.setAttribute("media", "screen");
+ if (!(ua.ie && ua.win) && typeof doc.createTextNode != UNDEF) {
+ s.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
+ }
+ h.appendChild(s);
+ if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
+ var ls = doc.styleSheets[doc.styleSheets.length - 1];
+ if (typeof ls.addRule == OBJECT) {
+ ls.addRule(sel, decl);
+ }
+ }
+ }
+
+ function setVisibility(id, isVisible) {
+ var v = isVisible ? "visible" : "hidden";
+ if (isDomLoaded) {
+ getElementById(id).style.visibility = v;
+ }
+ else {
+ createCSS("#" + id, "visibility:" + v);
+ }
+ }
+
+ function getTargetVersion(obj) {
+ if (!obj)
+ return 0;
+ var c = obj.childNodes;
+ var cl = c.length;
+ for (var i = 0; i < cl; i++) {
+ if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "object") {
+ c = c[i].childNodes;
+ cl = c.length;
+ i = 0;
+ }
+ if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "param" && c[i].getAttribute("name") == "swfversion") {
+ return c[i].getAttribute("value");
+ }
+ }
+ return 0;
+ }
+
+ function getExpressInstall(obj) {
+ if (!obj)
+ return "";
+ var c = obj.childNodes;
+ var cl = c.length;
+ for (var i = 0; i < cl; i++) {
+ if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "object") {
+ c = c[i].childNodes;
+ cl = c.length;
+ i = 0;
+ }
+ if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "param" && c[i].getAttribute("name") == "expressinstall") {
+ return c[i].getAttribute("value");
+ }
+ }
+ return "";
+ }
+
+ return {
+ /* Public API
+ - Reference: http://code.google.com/p/swfobject/wiki/SWFObject_2_0_documentation
+ */
+ registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr) {
+ if (!ua.w3cdom || !objectIdStr) {
+ return;
+ }
+ var obj = document.getElementById(objectIdStr);
+ var xi = getExpressInstall(obj);
+ var regObj = {};
+ regObj.id = objectIdStr;
+ regObj.swfVersion = swfVersionStr ? swfVersionStr : getTargetVersion(obj);
+ regObj.expressInstall = xiSwfUrlStr ? xiSwfUrlStr : ((xi != "") ? xi : false);
+ regObjArr[regObjArr.length] = regObj;
+ setVisibility(objectIdStr, false);
+ },
+
+ getObjectById: function(objectIdStr) {
+ var r = null;
+ if (ua.w3cdom && isDomLoaded) {
+ var o = getElementById(objectIdStr);
+ if (o) {
+ var n = o.getElementsByTagName(OBJECT)[0];
+ if (!n || (n && typeof o.SetVariable != UNDEF)) {
+ r = o;
+ }
+ else if (typeof n.SetVariable != UNDEF) {
+ r = n;
+ }
+ }
+ }
+ return r;
+ },
+
+ embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj) {
+ if (!ua.w3cdom || !swfUrlStr || !replaceElemIdStr || !widthStr || !heightStr || !swfVersionStr) {
+ return;
+ }
+ widthStr += ""; // Auto-convert to string to make it idiot proof
+ heightStr += "";
+ if (hasPlayerVersion(swfVersionStr)) {
+ setVisibility(replaceElemIdStr, false);
+ var att = (typeof attObj == OBJECT) ? attObj : {};
+ att.data = swfUrlStr;
+ att.width = widthStr;
+ att.height = heightStr;
+ var par = (typeof parObj == OBJECT) ? parObj : {};
+ if (typeof flashvarsObj == OBJECT) {
+ for (var i in flashvarsObj) {
+ if (flashvarsObj[i] != Object.prototype[i]) { // Filter out prototype additions from other potential libraries
+ if (typeof par.flashvars != UNDEF) {
+ par.flashvars += "&" + i + "=" + flashvarsObj[i];
+ }
+ else {
+ par.flashvars = i + "=" + flashvarsObj[i];
+ }
+ }
+ }
+ }
+ addDomLoadEvent(function() {
+ createSWF(att, par, replaceElemIdStr);
+ if (att.id == replaceElemIdStr) {
+ setVisibility(replaceElemIdStr, true);
+ }
+ });
+ }
+ else if (xiSwfUrlStr && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) {
+ setVisibility(replaceElemIdStr, false);
+ addDomLoadEvent(function() {
+ var regObj = {};
+ regObj.id = regObj.altContentId = replaceElemIdStr;
+ regObj.width = widthStr;
+ regObj.height = heightStr;
+ regObj.expressInstall = xiSwfUrlStr;
+ showExpressInstall(regObj);
+ });
+ }
+ },
+
+ getFlashPlayerVersion: function() {
+ return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
+ },
+
+ hasFlashPlayerVersion:hasPlayerVersion,
+
+ createSWF: function(attObj, parObj, replaceElemIdStr) {
+ if (ua.w3cdom && isDomLoaded) {
+ return createSWF(attObj, parObj, replaceElemIdStr);
+ }
+ else {
+ return undefined;
+ }
+ },
+
+ createCSS: function(sel, decl) {
+ if (ua.w3cdom) {
+ createCSS(sel, decl);
+ }
+ },
+
+ addDomLoadEvent:addDomLoadEvent,
+
+ addLoadEvent:addLoadEvent,
+
+ getQueryParamValue: function(param) {
+ var q = doc.location.search || doc.location.hash;
+ if (param == null) {
+ return q;
+ }
+ if(q) {
+ var pairs = q.substring(1).split("&");
+ for (var i = 0; i < pairs.length; i++) {
+ if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
+ return pairs[i].substring((pairs[i].indexOf("=") + 1));
+ }
+ }
+ }
+ return "";
+ },
+
+ // For internal usage only
+ expressInstallCallback: function() {
+ if (isExpressInstallActive && storedAltContent) {
+ var obj = getElementById(EXPRESS_INSTALL_ID);
+ if (obj) {
+ obj.parentNode.replaceChild(storedAltContent, obj);
+ if (storedAltContentId) {
+ setVisibility(storedAltContentId, true);
+ if (ua.ie && ua.win) {
+ storedAltContent.style.display = "block";
+ }
+ }
+ storedAltContent = null;
+ storedAltContentId = null;
+ isExpressInstallActive = false;
+ }
+ }
+ }
+
+ };
+
+}();
Added: incubator/deltacloud/trunk/site/api.html
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/api.html?rev=985209&view=auto
==============================================================================
--- incubator/deltacloud/trunk/site/api.html (added)
+++ incubator/deltacloud/trunk/site/api.html Fri Aug 13 14:30:21 2010
@@ -0,0 +1,378 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+ <head>
+ <title>
+ Deltacloud - Documentation
+ </title>
+ <meta content='' name='keywords' />
+ <meta content='' name='description' />
+ <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
+ <link href='./styles/favicon.ico' rel='shortcut icon' type='image/x-icon' />
+ <link href='./styles/default.css' rel='StyleSheet' title='Main style' type='text/css' />
+ <link href='./styles/default-debug.css' rel='Alternate StyleSheet' title='Debug main style' type='text/css' />
+ </head>
+ <body>
+ <div id='header'>
+ <div class='container'>
+ <div id='headerLogo' onclick="location.href='index.html';" style='cursor: pointer;'>
+ <h1>
+ Deltacloud - Many clouds. One API. No problem.
+ </h1>
+ </div>
+ </div>
+ </div>
+ <div id='navigation'>
+ <div class='container' id='menu'>
+ <ul class='l0'>
+ <li>
+ <a class='inactive' href='./index.html' title='Deltacloud Home'>Home</a>
+ </li>
+ <li>
+ <a class='inactive' href='./download.html' title='Get the latest releases'>Download</a>
+ </li>
+ <li>
+ <a class='inactive' href='./contribute.html' title='Information about design/development process'>Contribute</a>
+ </li>
+ <li>
+ <a class='active' href='./documentation.html' title='Project documentation'>Documentation</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div id='subnavigation'>
+ <div class='container' id='submenu'>
+ <ul class='l1'>
+ <li>
+ <a class='inactive' href='documentation.html'>
+ Overview
+ </a>
+ </li>
+ <li>
+ <a class='active' href='api.html'>
+ REST API
+ </a>
+ </li>
+ <li>
+ <a class='inactive' href='drivers.html'>
+ Drivers
+ </a>
+ </li>
+ <li>
+ <a class='inactive' href='framework.html'>
+ Framework
+ </a>
+ </li>
+ <li>
+ <a class='inactive' href='doc/index.html'>
+ Ruby Client API
+ </a>
+ </li>
+ <li>
+ <a class='inactive' href='client-ruby.html'>
+ Ruby Client
+ </a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div id='frontpageHeader'></div>
+ <div id='main'>
+ <div class='container' id='content-deltacloud'>
+ <h1>Deltacloud API</h1>
+ <!-- - title, rest = page.split("</h1>") -->
+ <!-- = title + '</h1>' -->
+ <ul class="toc">
+ <li>
+ <a href="#h1">REST</a>
+ </li>
+ <li>
+ <a href="#h2">Authentication</a>
+ </li>
+ <li>
+ <a href="#h3">Primary Entry Point</a>
+ </li>
+ <li>
+ <a href="#h4">Resources</a>
+ <ul>
+ <li>
+ <a href="#h4_1">Hardware Profiles</a>
+ </li>
+ <li>
+ <a href="#h4_2">Realms</a>
+ </li>
+ <li>
+ <a href="#h4_3">Images</a>
+ </li>
+ <li>
+ <a href="#h4_4">Instances</a>
+ </li>
+ </ul></li></ul>
+ <!-- = rest -->
+
+
+ <p>The Deltacloud API is built as a service-based REST API. You do not
+ directly link a Deltacloud library into your program to use it.
+ Instead, a client speaks the Deltacloud API over HTTP to a server
+ which implements the REST interface.</p>
+
+ <p>Since cloud providers use their own APIs instead of the Deltacloud
+ API, we provide a translation layer that makes it possible to use
+ Deltacloud with these providers.</p>
+
+ <h2 id="h1">REST</h2>
+
+ <p>The Deltacloud API is a <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">RESTful API</a>, using HATEOAS architectural
+ style. The API requires no client-side URL construction. Access is
+ based entirely off a single entry-point resource. This allows other
+ implementors to structure their URL space however they like.</p>
+
+ <p>Additionally, the Deltacloud API uses <em>content negotiation</em> to
+ determine the format of the returned representation. As of the current
+ revision, the only required representation is XML. Clients wishing to
+ receive XML representations must specify the HTTP <code>Accept</code> header as
+ <code>application/xml</code>.</p>
+
+ <h2 id="h2">Authentication</h2>
+
+ <p>The Deltacloud API uses HTTP authentication methods for authenticating
+ a given client. There is no explicit <em>login</em> action required. If
+ authentication is required, an HTTP status of 401 will be returned to
+ challenge for credentials.</p>
+
+ <h2 id="h3">Primary Entry Point</h2>
+
+ <p>Any Deltacloud implementor <em>must</em> provide exactly one well-known URL
+ as an entry-point. For example, <code>http://fancycloudprovider.com/api</code>.</p>
+
+ <p>The result of this entry-point is a set of entry-points into other
+ collections, such as <em>images</em>, <em>instances</em>, <em>hardware profiles</em> and
+ <em>realms</em>, among others.</p>
+
+ <p>Each collection is defined by a <code><link></code> tag with an <code>href</code> attribute
+ which includes the fully-qualified URL to the collection (which <em>may</em>
+ exist on different servers) and a <code>rel</code> attribute to denote which
+ collection is being specified.</p>
+
+ <pre><code><api driver='ec2' version='1.0'>
 <link href='http://fancycloudprovider.com/api/hardware_profiles' rel='hardware_profiles' />
 <link href='http://fancycloudprovider.com/api/instance_states' rel='instance_states' />
 <link href='http://fancycloudprovider.com/api/realms' rel='realms' />
 <link href='http://fancycloudprovider.com/api/images' rel='images' />
 <link href='http://fancycloudprovider.com/api/instances' rel='instances' />
</api>
</code></pre>
+
+ <h2 id="h4">Resources</h2>
+
+ <p>From the primary entry-point, a client may follow the URL provided for
+ a collection to retrieve the resources within that collection. The
+ collection representation will include the full representations of the
+ items within it, along with links to retrieve each item individually.</p>
+
+ <p><img src="styles/basic-relationships.png" alt="Basic relationships" /></p>
+
+ <h3 id="h4_1">Hardware Profiles</h3>
+
+ <p>Within a cloud provider a <em>hardware profile</em> represents a
+ configuration of resources upon which a machine may be deployed. A
+ hardware profile defines aspects such as local disk storage, available
+ RAM, and architecture. A future revision of the Deltacloud API will
+ include more aspects, including number and speed of CPUs available.
+ Each provider is free to define as many (or as few) hardware profiles
+ as desired.</p>
+
+ <pre><code><hardware_profiles>
 <hardware_profile href='http://fancycloudprovider.com/api/hardware_profiles/m1-small' id='m1-small'>
 <property kind='fixed' name='storage' unit='GB' value='160' />
 <property kind='fixed' name='architecture' unit='label' value='i386' />
 <property kind='fixed' name='cpu' unit='count' value='1' />
 <property kind='fixed' name='memory' unit='MB' value='1740.8' />
 </hardware_profile>
</code></pre>
+
+ <p>Each <code><hardware_profile></code> block shall contain an <code>href</code> attribute providing a
+ URL to manipulate a specific profile, along with property elements for each
+ attribute of the hardware.</p>
+
+ <ul>
+ <li><strong><code>id</code></strong> is a unique identifier for the profile</li>
+ <li><strong><code>property</code></strong> describes each of the hardware aspects</li>
+ </ul>
+
+
+ <p>Properties have the following attributes:</p>
+
+ <ul>
+ <li><strong><code>name</code></strong> the type of the property: <em>e.g.</em> <code>memory</code> or <code>storage</code></li>
+ <li><strong><code>unit</code></strong> the units in which the value is specified: <code>MB</code>, <code>GB</code>, <code>count</code> or <code>label</code></li>
+ <li><strong><code>value</code></strong> the actual value of the property. It depends on the specified unit: <code>1024</code>, <code>2</code> on <code>x86_64</code></li>
+ <li><strong><code>kind</code></strong> describes the values to chose from.
+
+ <ul>
+ <li><strong><code>fixed</code></strong> only the value specified in the property is available</li>
+ <li><strong><code>enum</code></strong> a list of available values is provided</li>
+ <li><strong><code>range</code></strong> available values are described by a numeric range</li>
+ </ul>
+ </li>
+ </ul>
+
+
+ <p>When the <code>kind</code> is either an <code>enum</code> or a <code>range</code>, there must be two additional elements specified. One
+ that specifies the allowed values and the second with a way of picking a value.</p>
+
+ <p>In the non-fixed case, the <code>value</code> property attribute specifies the default value.</p>
+
+ <pre><code> <hardware_profile href='http://fancycloudprovider.com/api/hardware_profiles/m1-xlarge' id='m1-xlarge'>
 <property kind='enum' name='storage' unit='GB' value='1024'>
 <param href='http://fancycloudprovider.com/api/instances' method='post' name='hwp_storage' operation='create' />
 <enum>
 <entry value='1024' />
 <entry value='2048' />
 <entry value='4096' />
 </enum>
 </property>
 <property kind='fixed' name='architecture' unit='label' value='x86_64' />
 <property kind='fixed' name='cpu' unit='count' value='4' />
 <property kind='range' name='memory' unit='MB' value='12288'>
 <param href='http://fancycloudprovider.com/api/instances' method='post' name='hwp_memory' operation='create' />
 <range first='12288' last='32768' />&#
x000A; </property>
 </hardware_profile>
</hardware_profiles>
</code></pre>
+
+ <p>At this time, hardware profile resources are immutable and read-only. In a
+ future revision they may be mutable.</p>
+
+ <h3 id="h4_2">Realms</h3>
+
+ <p>Within a cloud provider a <em>realm</em> represents a boundary containing
+ resources. The exact definition of a realm is left to the cloud
+ provider. In some cases, a realm may represent different datacenters,
+ different continents, or different pools of resources within a single
+ datacenter. A cloud provider may insist that resources must all exist
+ within a single realm in order to cooperate. For instance, storage
+ volumes may only be allowed to be mounted to instances within the same
+ realm.</p>
+
+ <pre><code><realms>
 <realm href="http://fancycloudprovider.com/api/realms/us" id='us'>
 <name>United States</name>
 <state>AVAILABLE</state>
 <limit/>
 </realm>
 <realm href="http://fancycloudprovider.com/api/realms/eu" id='eu'>
 <name>Europe</name>
 <state>AVAILABLE</state>
 <limit/>
 </realm>
</realms>
</code></pre>
+
+ <p>Each <code><realm></code> block shall contain an <code>href</code> attribute providing a URL
+ to manipulate a specific realm, along with elements for each attribute
+ of a realm.</p>
+
+ <ul>
+ <li><strong><code>id</code></strong> A unique identifier for the realm</li>
+ <li><strong><code>name</code></strong> A short label</li>
+ <li><strong><code>state</code></strong> Indicator of the current state of a realm
+
+ <ul>
+ <li>AVAILABLE</li>
+ <li>UNAVAILABLE</li>
+ </ul>
+ </li>
+ <li><strong><code>limit</code></strong> Limits applicable for the <em>current requester</em></li>
+ </ul>
+
+
+ <h3 id="h4_3">Images</h3>
+
+ <p>An <em>image</em> is a platonic form of a machine. Images are not directly
+ executable, but are a template for creating actual instances of
+ machines.</p>
+
+ <p>The instances collection will return a set of all images available to
+ the current user.</p>
+
+ <pre><code><images>
 <image href="http://fancycloudprovider.com/api/images/img1" id='img1'>
 <owner_id>fedoraproject</owner_id>
 <name>Fedora 10</name>
 <description>Fedora 10</description>
 <architecture>x86_64</architecture>
 </image>
 <image href="http://fancycloudprovider.com/api/images/img2" id='img2'>
 <owner_id>fedoraproject</owner_id>
 <name>Fedora 10</name>
 <description>Fedora 10</description>
 <architecture>i386</architecture>
 </image>
 <image href="http://fancycloudprovider.com/api/images/img3" id='img3'>
 <owner_id>ted</owner_id>
 <name>JBoss</name>
 <description>JBoss</description>
 <architecture>i386</architecture>&#x
000A; </image>
</images>
</code></pre>
+
+ <p>Each <code><image></code> block <em>shall</em> contain an <code>href</code> attribute providing a
+ URL to manipulate a specific image, along with elements for each
+ attribute of an image. Each element, including those for optional
+ attributes must be present. Optional attributes may be specified as a
+ element with empty content.</p>
+
+ <p>These attributes include</p>
+
+ <ul>
+ <li><strong><code>id</code></strong> A unique identifier for the image</li>
+ <li><strong><code>owner_id</code></strong> An opaque identifier which indicates the owner of an image</li>
+ <li><strong><code>name</code></strong> An <em>optional</em> short label describing the image</li>
+ <li><strong><code>description</code></strong> An <em>optional</em> description describing the image more fully</li>
+ <li><strong><code>architecture</code></strong> A description of the machine architecture of the image
+ which may contain values such as:
+
+ <ul>
+ <li><code>i386</code></li>
+ <li><code>x86_64</code></li>
+ </ul>
+ </li>
+ </ul>
+
+
+ <p>At this time, image resources are immutable and read-only. In a future revision
+ they will be mutable.</p>
+
+ <h3 id="h4_4">Instances</h3>
+
+ <p>An <em>instance</em> is a concrete machine realized from an <em>image</em>. The
+ images collection may be obtained by following the link from the
+ primary entry-point.</p>
+
+ <pre><code><instances>
 <instance href="http://fancycloudprovider.com/api/instances/inst1" id='inst1'>
 <owner_id>larry</owner_id>
 <name>Production JBoss Instance</name>
 <image href="http://fancycloudprovider.com/api/images/img3"/>
 <hardware_profile href="http://fancycloudprovider.com/api/hardware_profiles/m1-small"/>
 <realm href="http://fancycloudprovider.com/api/realms/us"/>

 <state>RUNNING</state>
 <actions>
 <link rel="reboot" href="http://fancycloudprovider.com/api/instances/inst1/reboot"/>
 <link rel="stop" href="http://fancycloudprovider.com/api/instances/inst1/stop"/>
 </actions>
 <public_addresses>
 <address>inst1.larry.fancycloudprovider.com</address>
 </public_addresses>

 &
lt;private_addresses>
 <address>inst1.larry.internal</address>
 </private_addresses>
 </instance>
</instances>
</code></pre>
+
+ <p>Each <code><instance></code> block shall contain an href attribute providing a
+ URL to manipulate a specific instance, along with elements for each
+ attribute of an instance. Each element, including those for optional
+ attributes must be present. Optional attributes may be specified as a
+ element with empty content.</p>
+
+ <p>Simple attributes include</p>
+
+ <ul>
+ <li><strong><code>id</code></strong> A unique identifier for the instance</li>
+ <li><strong><code>owner_id</code></strong> An opaque identifier which indicates the owner of an instance</li>
+ <li><strong><code>name</code></strong> An <em>optional</em> short label describing the instance</li>
+ <li><strong><code>image</code></strong> Provides a link to the platonic image from which the instance is based</li>
+ <li><strong><code>hardware_profile</code></strong> Provides a link to the hardware profile in use by the instance</li>
+ <li><strong><code>realm</code></strong> Provides a link to the realm where the instance is deployed</li>
+ <li><strong><code>state</code></strong> Indicator of the instance's current state
+
+ <ul>
+ <li><code>PENDING</code></li>
+ <li><code>STOPPED</code></li>
+ <li><code>RUNNING</code></li>
+ </ul>
+ </li>
+ </ul>
+
+
+ <p>Multiple-valued attributes include</p>
+
+ <ul>
+ <li><strong><code>public_addresses</code></strong> Publicly routable IP addresses or names for the instance</li>
+ <li><strong><code>private_addresses</code></strong> Private network IP addresses or names for the instance</li>
+ </ul>
+
+
+ <p>In addition to the abovementioned attributes, each <code><instance></code> may contain an
+ <code><actions></code> block specifying valid actions for the instance, along with the URL
+ which may be used to perform the action. Each action is specified by a <code><link></code>
+ with an <code>href</code> attribute providing the URL, and a <code>rel</code> attribute providing
+ a key to determine what the action will do.</p>
+
+ <p>Representative actions include</p>
+
+ <ul>
+ <li><code>reboot</code></li>
+ <li><code>start</code></li>
+ <li><code>stop</code></li>
+ </ul>
+
+
+ <p>Not all actions may be valid at all times for all instances. To invoke
+ an action, a client must perform an HTTP <code>POST</code> to the URL indicated.</p>
+
+ <h4>Creating a new Instance</h4>
+
+ <p>Per usual REST architectural style, new instances are created by
+ issuing an HTTP <code>POST</code> to the instances collection as defined through
+ the primary entry-point URL. Data should be sent in
+ <code>application/x-www-form-urlencoded</code> format.</p>
+
+ <p>To create a new instance, only one parameter is required</p>
+
+ <ul>
+ <li><strong><code>image_id</code></strong> The identifier (not URL) of the image from which to base the instance</li>
+ </ul>
+
+
+ <p>Optional parameters may also be provided</p>
+
+ <ul>
+ <li><strong><code>realm_id</code></strong> The realm in which to launch the instance</li>
+ <li><strong><code>hwp_name</code></strong> The hardware profile upon which to launch the instance</li>
+ <li><strong><code>name</code></strong> A short label to identify the instance</li>
+ </ul>
+
+
+ <p>If <code>realm_id</code> or <code>hwp_name</code> are not specified, the provider <em>must</em>
+ select reasonable defaults. The architecture of the selected harware profile
+ <em>must</em> match the architecture of the specified image.</p>
+
+ <p>After <code>POST</code>ing the data, the server <em>shall</em> return a representation
+ of the newly-created instance's XML, including a URL to retrieve the
+ instance in the future.</p>
+ </div>
+ </div>
+ </body>
+</html>
Added: incubator/deltacloud/trunk/site/client-ruby.html
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/client-ruby.html?rev=985209&view=auto
==============================================================================
--- incubator/deltacloud/trunk/site/client-ruby.html (added)
+++ incubator/deltacloud/trunk/site/client-ruby.html Fri Aug 13 14:30:21 2010
@@ -0,0 +1,226 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+ <head>
+ <title>
+ Deltacloud - Documentation
+ </title>
+ <meta content='' name='keywords' />
+ <meta content='' name='description' />
+ <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
+ <link href='./styles/favicon.ico' rel='shortcut icon' type='image/x-icon' />
+ <link href='./styles/default.css' rel='StyleSheet' title='Main style' type='text/css' />
+ <link href='./styles/default-debug.css' rel='Alternate StyleSheet' title='Debug main style' type='text/css' />
+ </head>
+ <body>
+ <div id='header'>
+ <div class='container'>
+ <div id='headerLogo' onclick="location.href='index.html';" style='cursor: pointer;'>
+ <h1>
+ Deltacloud - Many clouds. One API. No problem.
+ </h1>
+ </div>
+ </div>
+ </div>
+ <div id='navigation'>
+ <div class='container' id='menu'>
+ <ul class='l0'>
+ <li>
+ <a class='inactive' href='./index.html' title='Deltacloud Home'>Home</a>
+ </li>
+ <li>
+ <a class='inactive' href='./download.html' title='Get the latest releases'>Download</a>
+ </li>
+ <li>
+ <a class='inactive' href='./contribute.html' title='Information about design/development process'>Contribute</a>
+ </li>
+ <li>
+ <a class='active' href='./documentation.html' title='Project documentation'>Documentation</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div id='subnavigation'>
+ <div class='container' id='submenu'>
+ <ul class='l1'>
+ <li>
+ <a class='inactive' href='documentation.html'>
+ Overview
+ </a>
+ </li>
+ <li>
+ <a class='inactive' href='api.html'>
+ REST API
+ </a>
+ </li>
+ <li>
+ <a class='inactive' href='drivers.html'>
+ Drivers
+ </a>
+ </li>
+ <li>
+ <a class='inactive' href='framework.html'>
+ Framework
+ </a>
+ </li>
+ <li>
+ <a class='inactive' href='doc/index.html'>
+ Ruby Client API
+ </a>
+ </li>
+ <li>
+ <a class='active' href='client-ruby.html'>
+ Ruby Client
+ </a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div id='frontpageHeader'></div>
+ <div id='main'>
+ <div class='container' id='content-deltacloud'>
+ <h1>Deltacloud Client (Ruby)</h1>
+ <!-- - title, rest = page.split("</h1>") -->
+ <!-- = title + '</h1>' -->
+ <ul class="toc">
+ <li>
+ <a href="#h1">Basics</a>
+ </li>
+ <li>
+ <a href="#h2">Connecting to a Deltacloud provider</a>
+ </li>
+ <li>
+ <a href="#h3">Listing realms</a>
+ </li>
+ <li>
+ <a href="#h4">Listing hardware profiles</a>
+ </li>
+ <li>
+ <a href="#h5">Listing images</a>
+ </li>
+ <li>
+ <a href="#h6">Listing instances</a>
+ </li>
+ <li>
+ <a href="#h7">Launching instances</a>
+ </li>
+ <li>
+ <a href="#h8">Manipulating instances</a>
+ </li>
+ </ul>
+ <!-- = rest -->
+
+
+ <p>The Deltacloud project includes a Ruby client. Other language-bindings
+ are possible and will be supported soon. The client aims to insulate
+ users from having to deal with HTTP and REST directly.</p>
+
+ <p>Each resource type has an associated model to ease usage. Where
+ resource reference other resources, natural navigation across the
+ object model is possible.</p>
+
+ <p>For example</p>
+
+ <pre><code>puts instance.image.name
puts instance.hardware_profile.architecture
</code></pre>
+
+ <h2 id="h1">Basics</h2>
+
+ <p>To use the client, you must require <code>deltacloud</code>.</p>
+
+ <pre><code>require 'deltacloud'
</code></pre>
+
+ <h2 id="h2">Connecting to a Deltacloud provider</h2>
+
+ <pre><code>require 'deltacloud'

api_url = 'http://localhost:3001/api'
api_name = 'mockuser'
api_password = 'mockpassword'

client = DeltaCloud.new( api_name, api_password, api_url )

# work with client here
</code></pre>
+
+ <p>In addition to creating a client, operations may occur within a block
+ included on the initialization</p>
+
+ <pre><code>DeltaCloud.new( api_name, api_password, api_url ) do |client|
 # work with client here
end
</code></pre>
+
+ <p>In the event of a failure, any underlying HTTP transport exceptions
+ will be thrown all the way out to the caller.</p>
+
+ <h2 id="h3">Listing realms</h2>
+
+ <p>You may retrieve a complete list of realms available to you</p>
+
+ <pre><code>realms = client.realms
</code></pre>
+
+ <p>You may retrieve a specific realm by its identifier</p>
+
+ <pre><code>realm = client.realm( 'us' )
</code></pre>
+
+ <h2 id="h4">Listing hardware profiles</h2>
+
+ <p>You may retrieve a complete list of hardware profiles available for launching
+ machines</p>
+
+ <pre><code>hwp = client.hardware_profiles
</code></pre>
+
+ <p>You may filter hardware profiles by architecture</p>
+
+ <pre><code>hardware_profiles = client.hardware_profiles( :architecture=>'x86_64' )
</code></pre>
+
+ <p>You may retrieve a specific hardware profile by its identifier</p>
+
+ <pre><code>hardware_profile = client.hardware_profile( 'm1-small' )
</code></pre>
+
+ <h2 id="h5">Listing images</h2>
+
+ <p>You may retrieve a complete list of images</p>
+
+ <pre><code>images = client.images
</code></pre>
+
+ <p>You may retrieve a list of images owned by the currently authenticated
+ user</p>
+
+ <pre><code>images = client.images( :owner_id=>:self )
</code></pre>
+
+ <p>You may retrieve a list of images visible to you but owned by a specific
+ user</p>
+
+ <pre><code>images = client.images( :owner_id=>'daryll' )
</code></pre>
+
+ <p>You may retrieve a specific image by its identifier</p>
+
+ <pre><code>image = client.image( 'ami-8675309' )
</code></pre>
+
+ <h2 id="h6">Listing instances</h2>
+
+ <p>You may retrieve a list of all instances visible to you</p>
+
+ <pre><code>instances = client.instances
</code></pre>
+
+ <p>You may retrieve a specific instance by its identifier</p>
+
+ <pre><code>instance = client.instance( 'i-90125' )
</code></pre>
+
+ <h2 id="h7">Launching instances</h2>
+
+ <p>An instance may be launched using just an image identifier</p>
+
+ <pre><code>image = client.image( 'ami-8675309' )
instance = client.create_instance( image.id )
</code></pre>
+
+ <p>Optionally, a hardware profile or a realm may be specified</p>
+
+ <pre><code>instance = client.create_instance( image.id, :hardware_profile=>'m1-small', :realm=>'us' )
</code></pre>
+
+ <h2 id="h8">Manipulating instances</h2>
+
+ <p>Given an instance, depending on its state, various actions <em>may</em> be available.</p>
+
+ <p>To determine what's available, the <code>instance#actions</code> method may be used.</p>
+
+ <pre><code>instance.actions # [ 'reboot', 'stop' ]
</code></pre>
+
+ <p>For a valid action, the method matching the action with an exclamation point may be called.</p>
+
+ <pre><code>instance.reboot!
</code></pre>
+
+ <p>Upon invoking an action, the instance will refresh its contents, in case the state has changed.
+ To determine later if the state has changed again, the instance must be refetched using
+ the <code>client.instance(...)</code> method.</p>
+ </div>
+ </div>
+ </body>
+</html>
Added: incubator/deltacloud/trunk/site/contribute.html
URL: http://svn.apache.org/viewvc/incubator/deltacloud/trunk/site/contribute.html?rev=985209&view=auto
==============================================================================
--- incubator/deltacloud/trunk/site/contribute.html (added)
+++ incubator/deltacloud/trunk/site/contribute.html Fri Aug 13 14:30:21 2010
@@ -0,0 +1,123 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+ <head>
+ <title>
+ Deltacloud - Contribute
+ </title>
+ <meta content='' name='keywords' />
+ <meta content='' name='description' />
+ <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
+ <link href='./styles/favicon.ico' rel='shortcut icon' type='image/x-icon' />
+ <link href='./styles/default.css' rel='StyleSheet' title='Main style' type='text/css' />
+ <link href='./styles/default-debug.css' rel='Alternate StyleSheet' title='Debug main style' type='text/css' />
+ </head>
+ <body>
+ <div id='header'>
+ <div class='container'>
+ <div id='headerLogo' onclick="location.href='index.html';" style='cursor: pointer;'>
+ <h1>
+ Deltacloud - Many clouds. One API. No problem.
+ </h1>
+ </div>
+ </div>
+ </div>
+ <div id='navigation'>
+ <div class='container' id='menu'>
+ <ul class='l0'>
+ <li>
+ <a class='inactive' href='./index.html' title='Deltacloud Home'>Home</a>
+ </li>
+ <li>
+ <a class='inactive' href='./download.html' title='Get the latest releases'>Download</a>
+ </li>
+ <li>
+ <a class='active' href='./contribute.html' title='Information about design/development process'>Contribute</a>
+ </li>
+ <li>
+ <a class='inactive' href='./documentation.html' title='Project documentation'>Documentation</a>
+ </li>
+ </ul>
+ </div>
+ </div>
+ <div id='frontpageHeader'></div>
+ <div id='main'>
+ <div class='container' id='content-deltacloud'>
+ <h1>Help make Deltacloud better</h1>
+ <ul class="toc">
+ <li>
+ <a href="#h1">Getting the sources</a>
+ </li>
+ <li>
+ <a href="#h2">Required packages</a>
+ </li>
+ <li>
+ <a href="#h3">Installing the Deltacloud Core</a>
+ </li>
+ </ul>
+ <p>All development of Deltacloud takes place in the open. Communication is run through the mailing list and all source code changes are tracked publicly.</p>
+ <ul>
+ <li>
+ <strong>Mailing Lists</strong>
+ <br />
+ <p>For Deltacloud API: <a href="mailto:deltacloud-dev@incubator.apache.org">deltacloud-dev@incubator.apache.org</a>.
+ To subscribe to it, send an email to <a href="mailto:deltacloud-dev-subscribe@incubator.apache.org">deltacloud-dev-subscribe@incubator.apache.org</a>.
+ You can also view <a href="http://mail-archives.apache.org/mod_mbox/incubator-deltacloud-dev/">Archive</a> in case you are missing something.</p>
+ </li>
+ <li>
+ <strong>IRC</strong>
+ <br />
+ <p>You can also join us on the Freenode IRC channel #deltacloud. Deltacloud developers are generally available on the IRC channel</p>
+ </li>
+ <li>
+ <strong>Bugs</strong>
+ <br />
+ <p>We track bugs in <a href="https://issues.apache.org/jira/browse/DTACLOUD">Apache JIRA</a>. You can [view open bugs][view-bugs] or <a href="https://issues.apache.org/jira/secure/CreateIssue!default.jspa">file a new one</a> there.</p>
+ </li>
+ <li>
+ <strong>Patches</strong>
+ <br />
+ <p>Patches are very welcome. Please send them to the <a href="http://mail-archives.apache.org/mod_mbox/incubator-deltacloud-dev/">development list</a>. Patches should be generated with <a href="http://kernel.org/pub/software/scm/git/docs/git-format-patch.html"><code>git</code> <code>format-patch</code></a> and sent to the list with <a href="http://kernel.org/pub/software/scm/git/docs/git-send-email.html"><code>git</code> <code>send-email</code></a>.</p>
+ </li>
+ </ul>
+ <h2 id="h1">Getting the sources</h2>
+
+ <p>Then Deltacloud Core gives you the API and drivers to various cloud providers.
+ It also provides a client library and a commandline interface.</p>
+
+ <p>The Deltacloud Core repository is hosted on Apache Incubator.
+ Apache uses Subversion, but there is a git mirror available:</p>
+
+ <pre><code>$ mkdir deltacloud
$ cd deltacloud
$ git clone git://git.apache.org/deltacloud.git core
</code></pre>
+
+ <p>You can find the Subversion repository at: <a href="https://svn.apache.org/repos/asf/incubator/deltacloud">https://svn.apache.org/repos/asf/incubator/deltacloud</a>.</p>
+
+ <h2 id="h2">Required packages</h2>
+
+ <p>In order to make the Deltacloud components work, you'll need to
+ have the following packages installed (on Fedora 12; the names may vary on
+ your distro):</p>
+
+ <pre><code>ruby
ruby-devel
gcc-c++
libxml2-devel
libxslt-devel
</code></pre>
+
+ <p><strong>Note:</strong> these packages are necessary for building all the required ruby gems
+ that Deltacloud requires. If you want to install the gems using your system's
+ package manager (yum, apt, ports, etc.) you won't need to install these
+ packages manually.</p>
+
+ <h2 id="h3">Installing the Deltacloud Core</h2>
+
+ <p>First, you need to install the server that will give you the Deltacloud API:</p>
+
+ <pre><code>$ cd path/to/deltacloud/core/server
$ rake package
$ sudo gem install pkg/deltacloud-core-<version>.gem
</code></pre>
+
+ <p>Then install the client library:</p>
+
+ <pre><code>$ cd path/to/deltacloud/core/client
$ rake package
$ sudo gem install pkg/deltacloud-client-<version>.gem
</code></pre>
+
+ <p>Once you have the client installed, run the following command:</p>
+
+ <pre><code>$ cd path/to/deltacloud/core/client
$ rake fixtures
</code></pre>
+ </div>
+ </div>
+ </body>
+</html>