Great analysis Chris!

In terms of the blueprint model, I am also in favor of something simple. 
CloudFormation can do what vApp is doing, and more. We only need to implement a 
subset as a starter. For example, allow users to describe multiple VMs, 
template ID for the VMs, and default service offering/disk offering, networking 
for the interested zones, and startup order. Agree with Kelcey that it does not 
need to be self-contained. We can support importing/exporting of the blueprint 
to vApp (OVA/OVF) which contains both the OVF descriptor and the template image 
files as an add-on feature.

Do we need to map blueprints to project?  I thought project is more like a 
shared workspace. IMO, we should have the flexibility to deploy multiple 
blueprints and any VMs to a project.

Jie

> -----Original Message-----
> From: Kelceydamage@bbits [mailto:kel...@bbits.ca]
> Sent: Thursday, January 17, 2013 1:51 AM
> To: cloudstack-dev@incubator.apache.org
> Subject: Re: [DISCUSS] PaaS Enablement: Composite Application Blueprints
> (#576)
> 
> This was a good read, I think the simpler vApp method makes sense for an
> infrastructure tool. And could be a great opportunity to rework projects into
> a more useful system.
> 
> I would not want to make the blueprints too complex, but my main issue
> with vApp methodology is how a vApp is completely self-contained. They eat
> up storage like mad, when they should really just be a collection of existing
> provisioning resources and templates.
> 
> Example:
> 
> A vApp when created copies the included VM temples to create a larger
> template. It would be better for our blueprints to simply point to the
> included templates like 'symlinks'. Providing almost zero increase to
> storage(only meta-data) and making the feature seriously competitive.
> 
> The main logistics issue would be ensuring a blueprint health check incase
> someone deletes the linked templates underneath. Or maybe a dependancy
> error when someone tries to remove a template that's linked to one or more
> blueprints. This error could inform the admin that the template is in use by a
> blueprint that must be deleted first.
> 
> Thanks
> 
> Sent from my iPhone
> 
> On Jan 16, 2013, at 11:51 PM, Chris Sears <chris.x.se...@sungard.com>
> wrote:
> 
> > After reading up a bit more on AWS CloudFormation [1] and OpenStack's
> > work-alike Heat [2], they actually differ quite a bit from VMware
> > vApps. I thought it might be worth talking about some of the differences.
> >
> > CloudFormation is a general purpose provisioning system for AWS
> > services, but under the hood, it's essentially a workflow engine
> > (similar to vCenter Orchestrator or HP Operations Orchestrator). The
> > problem CloudFormation is solving is runbook automation, where you
> > might have a 20 step process for deploying an app into AWS that you
> > want to completely automate. It competes with tools like Puppet and Chef
> (although they can work together).
> >
> > The templates used by CloudFormation are less config files and more
> > like scripts or XSLT. They include variables, user inputs, outputs,
> > flow control, and a small standard library of functions. [3] Templates
> > require testing and debugging. It's possible to have run-time bugs
> > related to a wait condition that cause a deadlock and trigger a rollback.
> >
> > When you execute a CloudFormation template, the resulting set of
> > provisioned resources is called a "stack". A stack could be a
> > multi-tier app with several VMs, but it could also be 3 empty VPCs, an
> > SNS queue, and an IAM user. If we follow a similar convention, a stack
> > would not necessarily map onto a project. A stack might include VMs in
> > multiple projects. Or no VMs at all.
> >
> > To extend the workflow coordination and configuration capabilities
> > into the guest OS, CloudFormation provides a set of helper scripts
> > that can fill a similar roll as cloud-init, creating files and running
> > commands with content and arguments dynamically generated from the
> > template. [4]
> >
> > It helped me to look at some real templates to understand everything
> > that CloudFormation was doing. Here are a couple examples... (the
> > first provisions an Active Directory server, the second creates an
> > instance of
> > OpenShift)
> > https://s3.amazonaws.com/cloudformation-templates-us-east-
> 1/Windows_Si
> > ngle_Server_Active_Directory.template
> >
> https://github.com/openstack/heat/blob/master/templates/OpenShift.tem
> p
> > late
> >
> > By contrast, vApps are much simpler. They are effectively just a
> > collection of one or more VMs, their associated network settings and
> > some limited additional metadata. You can start and stop a vApp. You
> > can import or export a vApp as an OVF file if you wanted to move it
> > from one cloud to another. A vApp could roughly map to a project.
> >
> > To me, it sounds like we need vApps, with some limited features of
> > CloudFormation. Just enough to enable a user experience of clicking a
> > "Launch Blueprint" button and having everything magically provisioned,
> > like AWS does here:
> > http://aws.amazon.com/cloudformation/aws-cloudformation-templates/
> >
> > Thoughts?
> >
> > - Chris
> >
> > [1]: http://aws.amazon.com/cloudformation/faqs/
> > [2]: https://github.com/openstack/heat
> > [3]:
> >
> http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/templ
> ate
> > -anatomy.html
> > [4]:
> > http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-
> help
> > er-scripts-reference.html
> >
> >
> > On Wed, Jan 16, 2013 at 1:59 PM, Mohammad Nour El-Din <
> > nour.moham...@gmail.com> wrote:
> >
> >> Hi
> >>
> >> Sent from my Samsung Galaxy S3
> >> Apologies for any typos
> >> On Jan 16, 2013 6:01 PM, "Shane Witbeck" <sh...@digitalsanctum.com>
> wrote:
> >>>
> >>> +1 for YAML. After all, YAML is a superset of JSON [1] which is the
> >> primary objective of the 1.2 spec.
> >>>
> >>> Here are my pros and cons:
> >>>
> >>> Pros:
> >>> - relational anchors and aliases (potential here for less verbosity
> >> through reuse)
> >>> - more readable
> >>> - comments
> >>> - projects which I respect, choose yaml over json for similar types
> >>> of
> >> configuration [2], [3]
> >>>
> >>> Cons:
> >>> - more complex to parse, less mature libraries compared to json
> >>>
> >>> All this being said, I would advocate that more initial focus should
> >>> be
> >> on the "model" and how it solves the problem of defining the "blueprint".
> >> Serialization format discussion should be secondary and around
> >> whatever best fits the model, not the other way around.
> >>
> >> +1 on that
> >>
> >>>
> >>>
> >>> [1] http://yaml.org/spec/1.2/spec.html#id2759572
> >>> [2]
> >> http://www.elasticsearch.org/guide/reference/setup/configuration.html
> >>> [3]
> >> https://github.com/cloudfoundry/bosh-
> release/blob/master/micro/aws.ym
> >> l
> >>>
> >>>
> >>> --
> >>> Shane Witbeck
> >>>
> >>>
> >>> On Thursday, January 10, 2013 at 1:20 PM, Kelcey Damage (BT) wrote:
> >>>
> >>>> +1 for YAML, I find JSON good for when I never look at the data and
> >> simply pass to a Python dictionary, however for interaction I am
> >> going to back the YAML choice.
> >>>>
> >>>> KELCEY DAMAGE
> >>>> Infrastructure Systems Architect
> >>>> www.backbonetechnology.com
> (http://www.backbonetechnology.com)
> >>>>
> >> ---------------------------------------------------------------------
> >> ----
> >>>> kel...@backbonetechnology.com
> >>>> (mailto:kel...@backbonetechnology.com)
> >>>>
> >>>> address: 55 East 7th Ave, Vancouver, BC, V5T 1M4
> >>>> tel: +1 604 713 8560 ext:114
> >>>> fax: +1 604 605 0964
> >>>> skype: kelcey.damage
> >>>>
> >>>>
> >>>>
> >>>>> -----Original Message-----
> >>>>> From: Alex Heneveld [mailto:alex.henev...@cloudsoftcorp.com]
> >>>>> Sent: Wednesday, January 09, 2013 4:39 PM
> >>>>> To: cloudstack-dev@incubator.apache.org (mailto:
> >> cloudstack-dev@incubator.apache.org)
> >>>>> Cc: Min Chen
> >>>>> Subject: Re: [DISCUSS] PaaS Enablement: Composite Application
> >> Blueprints
> >>>>> (#576)
> >>>>>
> >>>>>
> >>>>> Hi Min, Jie,
> >>>>>
> >>>>> Min, nice questions. I've given my answers in-line.
> >>>>>
> >>>>> Jie, my answers also respond to some of your points, re TOSCA and
> >>>>> YAML/JSON.
> >>>>>
> >>>>>
> >>>>> On 08/01/2013 17:50, Min Chen wrote:
> >>>>>> +1 on this feature to extend CloudStack from pure IaaS to PaaS or
> >> SaaS
> >>>>>> area. Some questions in my mind:
> >>>>>>
> >>>>>> 1) Does your proposed blueprint only contain functional component
> >>>>>> description or contain both functional and deployment aspects?
> >>>>>> For example, for a 3-tier app containing three functional
> >>>>>> components
> >> like
> >>>>>> web tier, server, and DB, users can define different deployment
> >> models
> >>>>>> for the same functional components, like small deployment
> >> (co-hosting
> >>>>>> all components on one VM), or medium or large deployment.
> >>>>>>
> >>>>>
> >>>>> Great use case. Introduces a _lot_ of complexity:
> >>>>>
> >>>>> (1) allow parameters to be passed to the blueprint (e.g. "size")
> >>>>> (2) separate the components that are to be created from the
> >> customizations
> >>>>> performed
> >>>>> (so you could define customizations for webserver, appserver, and
> >> data,
> >>>>> then either
> >>>>> apply the customizations either to a single VM (small), distinct
> >>>>> VM's (medium), or distinct VM groups (large))
> >>>>> (3) allow blueprints to refer to other blueprints (so the
> >>>>> "webserver customization" lives as its own reusable module)
> >>>>> (4) allow conditional branching based on parameters (e.g. if user
> >>>>> selects "size=small" then run all customisations on
> >> single VM)
> >>>>>
> >>>>> I'd be inclined to DEFER them as features, until phase 2 or 3, but
> >>>>> we
> >> should
> >>>>> consider how the description might support them as I'd like to see
> >> some of
> >>>>> this functionality eventually.
> >>>>>
> >>>>> What do other people think? This is obvious functionality to want,
> >> what's the
> >>>>> right way to support it but without making the description
> >>>>> language complicated?
> >>>>>
> >>>>> (BTW one of the reasons I think TOSCA could be a good choice is
> >>>>> that
> >> it has
> >>>>> considered many of these. You can define properties (1 above),
> >> arbitrary
> >>>>> nodes (2), and references to other definitions (3). It also has
> >>>>> the
> >> concepts of
> >>>>> requirements / capabilities, relationships, policies, and plans --
> >> some of which
> >>>>> could be used to support (4)
> >>>>> eventually.)
> >>>>>
> >>>>>> 2) Have you thought of creating Service offerings from your
> >>>>>> defined blueprints? This may allow CloudStack to provide some
> >>>>>> SaaS
> >> functionalities.
> >>>>>>
> >>>>>
> >>>>> I like this idea, although it might break assumptions made
> >>>>> elsewhere
> >> about
> >>>>> service offerings so we should look at it carefully.
> >>>>>
> >>>>>> 3) As for blueprint description language, easy-to-read and
> >>>>>> easy-to-edit by human being should be necessary if we don't
> >>>>>> provide any visual GUI tools to create/edit a blueprint. I have
> >>>>>> seen some
> >> JSON
> >>>>>> format before in BMC Cloud LifeCycle product 2.0.
> >>>>>>
> >>>>>
> >>>>> Wow JSON seems popular so far. And yet YAML is more concise and
> >>>>> expressive. Designed to be easy for people to read and write
> >> configuration
> >>>>> just like this. Whereas JSON is designed for serializing objects,
> >>>>> in
> >> a way that
> >>>>> isn't too hard for people. YAML seems the right language for this
> >> purpose to
> >>>>> me -- and my experience has been that it is easier to read and to
> >> write,
> >>>>> without the litter of curly braces and quotes.
> >>>>>
> >>>>> But I don't want to be a language bigot! I can go with JSON if
> >>>>> that's
> >> what
> >>>>> people want. :)
> >>>>>
> >>>>>> 4) For a multi-tier application, blueprint should not only
> >>>>>> describe different components, but also connections among those
> >>>>>> components, like open port, LB and FW rules among them. I assume
> >>>>>> that your blueprint is also taking that into consideration, and
> >>>>>> your backend orchestration layer can provide enough flexibility
> >>>>>> to provision any such app, seems not an easy task to me since I am
> new to CS.
> >>>>>>
> >>>>>
> >>>>> Yeah, this is where it gets interesting. A common trick I've seen
> >>>>> is
> >> to use
> >>>>> hostnames for a lot of the connection configuration, and have a
> >>>>> few
> >> hard-
> >>>>> coded patterns in there (e.g. for groups, load-balancers). But
> >>>>> that
> >> only gets
> >>>>> you so far, and then you hit a wall (or spin up a different
> >> orchestrator).
> >>>>>
> >>>>> Using requirements/capabilities and typed relationships gives a
> >>>>> much
> >> more an
> >>>>> elegant solution. (Not necessarily TOSCA, but these concepts are
> >>>>> well developed there!)
> >>>>>
> >>>>> In any case let's make sure the use cases include interesting
> >> situations like
> >>>>> this, and we can compare approaches. This absolutely DOES need to
> >>>>> be
> >> in
> >>>>> phase 1 I think.
> >>>>>
> >>>>>> 5) From a normal user perspective, I would really love to see a
> >>>>>> GUI tool developed around this to allow user to visually
> >>>>>> create/edit a multi-tier app blueprint instead of using a TextEditor.
> >>>>>>
> >>>>>
> >>>>> Nice to hear. Me too. The description, API, and backend come
> >>>>> first,
> >> with an
> >>>>> initial set of features, but I'd love to see the GUI in phase 2.
> >>>>>
> >>>>>> Thanks
> >>>>>> -min
> >>>>>>
> >>>>>
> >>>>> Keep it coming please.
> >>>>>
> >>>>> --Alex
> >>>
> >>

Reply via email to