[openstack-dev] [Heat] [Murano] [Solum] applications in the cloud

Steve Baker sbaker at redhat.com
Fri Apr 4 04:12:38 UTC 2014


On 03/04/14 13:04, Georgy Okrokvertskhov wrote:
> Hi Steve,
>
> I think this is exactly the place where we have a boundary between
> Murano catalog and HOT.
>
> In your example one can use abstract resource type and specify a
> correct implementation via environment file. This is how it will be
> done on the final stage in Murano too.
>
> Murano will solve another issue. In your example user should know what
> template to use as a provider template. In Murano this will be done in
> the following way:
> 1) User selects an app which requires a DB
> 2) Murano sees this requirement for DB and do a search in the app
> catalog to find all apps which expose this functionality. Murano uses
> app package definitions for that.
> 3) User select in UI specific DB implementation he wants to use.
>
> As you see, in Murano case user has no preliminary knowledge of
> available apps\templates and it uses catalog to find it. A search
> criteria can be quite complex with using different application
> attribute. If we think about moving application definition to HOT
> format it should provide all necessary information for catalog.
>
> In order to search apps in catalog which uses HOT format we need
> something like that:
>
> One needs to define abstract resource like
> OS:HOT:DataBase
>
> Than in each DB implementation of DB resource one has to somehow refer
> this abstract resource as a parent like
>
> Resource OS:HOT:MySQLDB
>   Parent: OS:HOT:DataBase
>
> Then catalog part can use this information and build a list of all
> apps\HOTs with resources with parents OS:HOT:DataBase
>
> That is what we are looking for. As you see, in this example I am not
> talking about version and other attributes which might be required for
> catalog.
>

This sounds like a vision for Murano that I could get behind. It would
be a tool which allows fully running applications to be assembled and
launched from a catalog of Heat templates (plus some app lifecycle
workflow beyond the scope of this email).

We could add type interfaces to HOT but I still think duck typing would
be worth considering. To demonstrate, lets assume that when a template
gets cataloged, metadata is also indexed about what parameters and
outputs the template has. So for the case above:
1) User selects an app to launch from the catalog
2) Murano performs a heat resource-type-list and compares that with the
types in the template. The resource-type list is missing
My::App::Database for a resource named my_db
3) Murano analyses the template and finds that My::App::Database is
assigned 2 properties (db_username, db_password) and elsewhere in the
template is a {get_attr: [my_db, db_url]} attribute access.
4) Murano queries glance for templates, filtering by templates which
have parameters [db_username, db_password] and outputs [db_url] (plus
whatever appropriate metadata filters)
5) Glance returns 2 matches. Murano prompts the user for a choice
6) Murano constructs an environment based on the chosen template,
mapping My::App::Database to the chosen template
7) Murano launches the stack

Sure, there could be a type interface called My::App::Database which
declares db_username, db_password and db_url, but since a heat template
is in a readily parsable declarative format, all required information is
available to analyze, both during glance indexing and app launching.
 

>
>
> On Wed, Apr 2, 2014 at 3:30 PM, Steve Baker <sbaker at redhat.com
> <mailto:sbaker at redhat.com>> wrote:
>
>     On 03/04/14 10:39, Ruslan Kamaldinov wrote:
>     > This is a continuation of the "MuranoPL questions" thread.
>     >
>     > As a result of ongoing discussions, we figured out that
>     definition of layers
>     > which each project operates on and has responsibility for is not
>     yet agreed
>     > and discussed between projects and teams (Heat, Murano, Solum (in
>     > alphabetical order)).
>     >
>     > Our suggestion and expectation from this working group is to
>     have such
>     > a definition of layers, agreement on it and an approach of
>     reaching it.
>     >
>     > As a starting point, we suggest the following:
>     >
>     > There are three layers of responsibility:
>     > 1. Resources of the cloud
>     > 2. Applications of the cloud
>     > 3. Layers specific for Murano and Solum (to be further discussed and
>     >    clarified, for this discussion it's out of scope)
>     >
>     > Layer 1 is obviously covered by Heat.
>     >
>     > Most of the disagreement is around layer 2. Our suggestion is to
>     figure out
>     > the way where we can have common engine, DSL and approach to
>     apps description.
>     > For this we'll take HOT and TOSCA as a basis and will work on
>     addition of
>     > functionality missing from Murano and Solum point of view.
>     >
>     > We'll be happy if existing Heat team continue working on it,
>     having the full
>     > control of the project, provided that we agree on functionality
>     missing there
>     > from Murano and Solum point of view and addition of this
>     functionality in a
>     > systematic way.
>     >
>     > Let me outline the main concern in regards to HOT from Murano
>     perspective.
>     > Others concerns could be figured out later. The typical use case
>     for Murano is
>     > the following:
>     > Application writer sets a requirement for her application to use
>     RDBMS
>     > assuming that it can be MySQL, PostgreSQL or MSSQL. HOT engine
>     should be able
>     > to understand such requirements and be able to satisfy them by
>     instantiating
>     > instances with DB. End user should be able to control which
>     particular type of
>     > DB should be used. This is quite similar to abstract
>     requirements described in
>     > TOSCA. As Heat wants to cover TOSCA format too this Murano
>     requirement is
>     > pretty well aligned with what HOT\TOSCA can provide.
>     >
>     >
>     > Hopefully this functionality can be introduced into HOT. Solum
>     and Murano will
>     > leverage it by using some common API, and implementing layer 3
>     as thin as
>     > possible.
>     >
>     > Again, this is only suggested starting point, something to begin
>     with.
>     >
>     Thanks for bring this discussion back to solving specific
>     problems. The
>     above database abstraction can be nicely represented using HOT
>     environments and provider resources [1].
>
>     Take the following template snippet:
>
>     resources:
>       my_db:
>         type: My::Database
>         properties:
>           # ...
>
>       my_server
>         type: OS::Nova::Server
>         properties:
>           # ... including a {get_attr: [my_db, connection_url]}
>
>     My::Database is a type defined in the environment which is included in
>     the stack-create call. Different environments can provide different
>     database implementations, for example:
>
>     resource_registry:
>       "My::Database": path/to/trove_wrapper.yaml
>
>     resource_registry:
>       "My::Database": path/to/nova_galera_ubercluster.yaml
>
>     resource_registry:
>       "My::Database": path/to/postgresql.yaml
>
>     Each of these templates could be implemented to have the same
>     parameters
>     and outputs so the template will work with any of these resource
>     provider templates.
>
>     One thing we could consider adding to HOT is allow the defining of a
>     type interface, and validating that a given template/resource
>     implements
>     its declared interfaces. However the above example works just fine
>     without interfaces, and this duck-typing approach may provide a better
>     user experience anyway.
>
>     [1]
>     http://docs.openstack.org/developer/heat/template_guide/environment.html
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-dev/attachments/20140404/87e603cd/attachment.html>


More information about the OpenStack-dev mailing list