== Nutshell
I'd like to see a deltacloud API that accepts there is a lot of variety out there in the virtual machine hosting environments.
I'd like to see an API permitting a provider to express as much of their functionality and features as possible.
Having a rich, expressive API implicitly means that we (or anyone) can create simpler, easier-to-use, APIs based off the richer API. Should we need them.
== Example attributes
VMs managed by the deltacloud API can have a lot of different attributes.
For example: VMs at RimuHosting have attributes like memory, disk space, data center location, network provider, vlans, data transfer allowances, number of IPs, distro/image name, kernel (version, 32/64 bittedness), number of backups history (0, 1 or 2). They run on host servers that have various types (e.g. low contention with say a VPS per core). The host servers have attributes, like number of cores; cpu type; total, free and available memory and disk space.
Some of these attributes users really actually care about. Other's they are happy to accept the default. The attributes people care about varies from person to person (e.g. for some people it is disk size, others memory, others location).
== APIs modeling reality
I think the deltacloud API should be a good API. A good API will model reality as close as we can get it.
== API complexity vs. UI complexity
I think the UI tools should be appropriate to the users. Some users will want nice simple UIs. Others will want to fiddle with the knobs.
With an API that models reality well one should be able to create simple _or_ a complex UI. Only the other hand an overly simple API will prohibit a fully expressive UI.
With a rich API then others can create simpler APIs using the richer API as a back end. And then people can choose to match the right API for the right UI.
== +1 for deltacloud being *the* standard fully featured and expressive API
At some point someone needs to create a rich, fully featured API that is the gold standard for the industry. It would be great if deltacloud were that API.
== Graceful degradation via capabilities interface
Permit the deltacloud drivers to express their capabilities. Write deltacloud so it is easy to add more capability attributes without breaking drivers.
e.g. I'd suggest matrix params for expressing min/max and preferred attributes.
e.g. min_mem_mb=256;preferred_mem_mb=512;max_mem_mb=1024
Then the providers that have fixed size VMs would provide a 'size' that fits in that range. For providers that can handle the sliding ranges, then they'd return something closer to the preferred value.
If a driver sees a min_* attribute that it does not know about or knows it does not support, then it returns 0 plans/sizes. e.g. if RimuHosting got a min_has_led_color=Y then we'd return 0 matching plans. (But quickly figure out how to get more servers with LEDs of the popular colors).
== Fixed sizes vs. variable sizes
At RimuHosting we have pricing plans. Which are standard-sized VMs. But that is really just a marketing here-is-a-url-starting-point-to-order something. Really we'd be happy providing a customer with any combination of disk, memory, etc, as would nicely fit on one of our hosts.
Other companies (EC2, slicehost, ... ?) focus more on the fixed sizes.
To get the most end-users, have lots of 3rd party tool support and encourage having the widest selection of providers deltacloud should cope with a variety of provisioning types.
== Document the reasonable-attribute-set starting point
We should 'start' with a good set of reasonable attributes that would describe the things most customers care about. I'd have some more thoughts on what these should be.
Thorsten von Eicken wrote:
there. The path that deltacloud is embarking on judging by the posts in this thread is to support the union of all features of all clouds. The
I think a good expressive API should be able to model a reasonable range of providers with varying capabilities. And not break if not all providers fail to have all the capabilities. This may require an interface to expose a driver's supported operations? e.g. whether VPS resizes are supported; vps moves (from host-to-host or datacenter-to-datacenter); what billing interfaces are provides; etc.
current thread is about changing the machine characteristics of a server. I assume next is changing the characteristics while it's running.
A lot (30%?) of our customers resize their instance every several months (vs. tearing it down and starting afresh). So that would be something that they would find useful to do via deltacloud, too.
:-) What I'm trying to get at is that the number of dimensions along which IT has tweaked datacenter configurations is virtually infinite. Is the goal of deltacloud to express the superset of all the options out there? If not, what are the guiding principles?
I like APIs that model reality as simply-and-closely as possible (yes 'simply' and 'closely' pull and tug at each other).
The reasons for which I think it's important to keep the number of choices at bay are:
- it quickly becomes a ton of work to implement any system that
supports deltacloud: lots of UI to build, lots of rules to follow
If a driver can express its capabilities clearly this may help the UI creation.
- the user is faced with a million choices, and we can easily end up in
a situation where the majority of choices or combinations are invalid for any given cloud
It is possible to create a simple UI if the API models the real world well enough.
- doing anything in a portable manner becomes more difficult because
the "conversion matrix" just explodes
People would be able to write libraries based off of a 'rich' fully-featured deltacloud API that expose a simpler interface. If necessary. i.e. creating an expressive API permits the creation of less expressive, simpler APIs.
This is appealing to me as a implementor of VM API driver, since I can write our fully featured deltacloud driver. And then know that the 3rd party, dumbed down drivers will 'just work' without us having to contribute to yet-another-driver-project.
Thorsten - CTO RightScale
Regards, Peter http://rimuhosting.com