------=_Part_23636581_113868456.1403014414461
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 7bit
Hello everyone,
in past few weeks, we've been working on JavaScript SDK for oVirt Engine.
Today, I'm happy to announce the first prototype called oVirt.js :)
Attached, there's an "sdk-testdrive" UI plugin which:
- bundles oVirt.js prototype [ovirt.js]
- contains test code for DataCenter object [plugin.js]
To install this plugin, simply copy (or symlink) sdk-testdrive.json file and
sdk-testdrive-resources directory under /usr/share/ovirt-engine/ui-plugins.
Following is a quick recap of test code exercising oVirt.js.
To add new DataCenter:
// Obtain DataCenter resource collection.
// Resource collection is a handle to work with RESTful objects.
var dcColl = ovirt.api.datacenters;
// Obtain "add DataCenter" operation.
// Operation is a reusable, uhm, operation, backed by HTTP request.
// You can run the same operation multiple times, if necessary.
var addOp = dcColl.add({ name: 'test-dc', local: false });
// Register result handler and run the operation.
addOp.success(dcAddedCallback).run();
// Example of operation result handler that receives a single resource.
function dcAddedCallback (dc) {
console.log('Added: ' + dc.data().name);
}
In dcAddedCallback function shown above, "dc" is a resource object,
representing a handle to work with RESTful DataCenter object. It provides
access to underlying resource data:
var dcDataObj = dc.data();
// Get
var dcName = dcDataObj.name;
var dcDesc = dcDataObj.description;
// Set multiple properties at once ...
dc.data({ name: 'test-dc-updated', description: 'test' });
// ... or one by one
dcDataObj.name = 'test-dc-updated';
dcDataObj.description = 'test';
It also gives access to nested collections (if any) and supported
actions (if any):
// Obtain Cluster resource collection for given DataCenter.
var dcClusterColl = dc.clusters;
oVirt.js is currently only 445 lines of code, yey :) we're not using
any code generation at this point, we're simply relying on HATEOAS [1]
principle of REST and dynamically augmenting resource objects with
nested collections and supported actions, which are part of resource
representation.
[1]
http://en.wikipedia.org/wiki/HATEOAS
I feel we'll eventually come to a point where code generation can be
useful, but for now, we're trying to keep things small and simple.
oVirt.js currently uses Lo-Dash library [2] containing various utility
functions. I think that Lo-Dash is great because it makes working with
JavaScript a bit easier.
[2]
http://lodash.com/
Overall, oVirt.js will be self-contained, which means there will be
no additional dependencies from JavaScript perspective. Using oVirt.js
in HTML page will be as simple as this:
<script src="ovirt.js"></script>
This means that (build-time) dependencies such as Lo-Dash will be
inlined into resulting oVirt.js build. We're also planning to provide
minified version + Source Maps for better debugging.
oVirt.js is planned to be usable NOT ONLY in web browsers. In fact,
there's "ovirt.svc" namespace containing services used by oVirt.js API
implementation. You (or any 3rd party extension) can override these
services to achieve SDK portability for given runtime environment.
In other words, I'd love to see oVirt.js used also with Node.js :)
Finally, an important thing to mention - oVirt.js requires AT LEAST
ECMAScript 5.1 compliant environment. All modern browsers support
ES5, including IE9+. Unfortunately, IE9 doesn't support ES5 Strict
Mode, but that's not that big of a deal.
I'll send some more emails outlining implementation design and also
how to manage source control & distribution of oVirt.js.
Regards,
Vojtech
------=_Part_23636581_113868456.1403014414461
Content-Type: application/x-compressed-tar; name=ovirt-js-sdk.tar.gz
Content-Disposition: attachment; filename=ovirt-js-sdk.tar.gz
Content-Transfer-Encoding: base64
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
cn25vlz/5df/AadgwuoAXAAA
------=_Part_23636581_113868456.1403014414461--