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

2014-04-16 Thread Thomas Spatzier
Hi Ruslan,

 From: Ruslan Kamaldinov rkamaldi...@mirantis.com
 To: OpenStack Development Mailing List (not for usage questions)
 openstack-dev@lists.openstack.org
 Date: 16/04/2014 00:38
 Subject: Re: [openstack-dev] [Heat] [Murano] [Solum] applications inthe
cloud

 Update:
 Stan filed a blueprint [0] for type interfaces in HOT.


 I would like to outline the current vision of Murano Application format,
to
 make sure we're all on the same page. We had a valuable discussion in
several
 MLs and we also had a lot of discussions between Murano team members. As
a
 result of these discussion we see the following plan for Murano:

 * Adopt TOSCA for application definition in Murano. Work with TOSCA
committee
 * Utilize Heat as much as possible. Participate in discussions and
   implementations for hooks mechanism in Heat. Participate in HOT format
   discussions

Those two sound great. For the version of TOSCA we are currently defining,
the more concrete implementation input we get, the better. So your
collaboration is more than welcome. And putting things into Heat that make
sense to be put into Heat is also a good plan, since this gives us a common
code base instead of duplicated efforts.

It would be good to get together at the next summit and discuss some of
this. We also started implementation of a TOSCA YAML library and a
translator to HOT as a stackforge project, and we are thinking about how a
TOSCA layer actually fits into the overall picture. Would be good to talk
about this with key stackholders. I actually submitted a sessions proposal
for one of the open source @ OpenStack slots to get a room and time slot,
but have not heard back yet.

 * Adopt Mistral DSL for workflow management. Find a way to compose Heat
   templates and Mistral DSL

Also makes sense, and this is another item where we have some interest from
a TOSCA perspective.

Regards,
Thomas

 * Keep MuranoPL engine in the source tree to take care of all the
features we
   need for our users until those features are implemented on top things
   described above

 Murano, Heat teams, please let me know if this plan sounds sane to you.

 [0] https://blueprints.launchpad.net/heat/+spec/interface-types

 Thanks,
 Ruslan

 On Sat, Apr 5, 2014 at 12:25 PM, Thomas Spatzier
 thomas.spatz...@de.ibm.com wrote:
  Clint Byrum cl...@fewbar.com wrote on 04/04/2014 19:05:04:
  From: Clint Byrum cl...@fewbar.com
  To: openstack-dev openstack-dev@lists.openstack.org
  Date: 04/04/2014 19:06
  Subject: Re: [openstack-dev] [Heat] [Murano] [Solum] applications
inthe
  cloud
 
  Excerpts from Stan Lagun's message of 2014-04-04 02:54:05 -0700:
   Hi Steve, Thomas
  
   I'm glad the discussion is so constructive!
  
   If we add type interfaces to HOT this may do the job.
   Applications in AppCatalog need to be portable across OpenStack
clouds.
   Thus if we use some globally-unique type naming system applications
  could
   identify their dependencies in unambiguous way.
  
   We also would need to establish relations between between
interfaces.
   Suppose there is My::Something::Database interface and 7 compatible
   materializations:
   My::Something::TroveMySQL
   My::Something::GaleraMySQL
   My::Something::PostgreSQL
   My::Something::OracleDB
   My::Something::MariaDB
   My::Something::MongoDB
   My::Something::HBase
  
   There are apps that (say SQLAlchemy-based apps) are fine with any
   relational DB. In that case all templates except for MongoDB and
HBase
   should be matched. There are apps that design to work with MySQL
only.
  In
   that case only TroveMySQL, GaleraMySQL and MariaDB should be
matched.
  There
   are application who uses PL/SQL and thus require OracleDB (there can
be
   several Oracle implementations as well). There are also applications
   (Marconi and Ceilometer are good example) that can use both some SQL
  and
   NoSQL databases. So conformance to Database interface is not enough
and
   some sort of interface hierarchy required.
 
  IMO that is not really true and trying to stick all these databases
into
  one SQL database interface is not a use case I'm interested in
  pursuing.
 
  Far more interesting is having each one be its own interface which
apps
  can assert that they support or not.
 
  Agree, this looks like a feasible goal and would already bring some
value
  add in that one could look up appropriate provider templates instead of
  having to explicitly link them in environments.
  Doing too much of inheritance sounds interesting at first glance but
  burries a lot of complexity.
 
 
  
   Another thing that we need to consider is that even compatible
   implementations may have different set of parameters. For example
   clustered-HA PostgreSQL implementation may require additional
  parameters
   besides those needed for plain single instance variant. Template
that
   consumes *any* PostgreSQL will not be aware of those additional
  parameters.
   Thus they need to be dynamically added to environment's input

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

2014-04-15 Thread Ruslan Kamaldinov
Update:
Stan filed a blueprint [0] for type interfaces in HOT.


I would like to outline the current vision of Murano Application format, to
make sure we're all on the same page. We had a valuable discussion in several
MLs and we also had a lot of discussions between Murano team members. As a
result of these discussion we see the following plan for Murano:

* Adopt TOSCA for application definition in Murano. Work with TOSCA committee
* Utilize Heat as much as possible. Participate in discussions and
  implementations for hooks mechanism in Heat. Participate in HOT format
  discussions
* Adopt Mistral DSL for workflow management. Find a way to compose Heat
  templates and Mistral DSL
* Keep MuranoPL engine in the source tree to take care of all the features we
  need for our users until those features are implemented on top things
  described above

Murano, Heat teams, please let me know if this plan sounds sane to you.

[0] https://blueprints.launchpad.net/heat/+spec/interface-types

Thanks,
Ruslan

On Sat, Apr 5, 2014 at 12:25 PM, Thomas Spatzier
thomas.spatz...@de.ibm.com wrote:
 Clint Byrum cl...@fewbar.com wrote on 04/04/2014 19:05:04:
 From: Clint Byrum cl...@fewbar.com
 To: openstack-dev openstack-dev@lists.openstack.org
 Date: 04/04/2014 19:06
 Subject: Re: [openstack-dev] [Heat] [Murano] [Solum] applications inthe
 cloud

 Excerpts from Stan Lagun's message of 2014-04-04 02:54:05 -0700:
  Hi Steve, Thomas
 
  I'm glad the discussion is so constructive!
 
  If we add type interfaces to HOT this may do the job.
  Applications in AppCatalog need to be portable across OpenStack clouds.
  Thus if we use some globally-unique type naming system applications
 could
  identify their dependencies in unambiguous way.
 
  We also would need to establish relations between between interfaces.
  Suppose there is My::Something::Database interface and 7 compatible
  materializations:
  My::Something::TroveMySQL
  My::Something::GaleraMySQL
  My::Something::PostgreSQL
  My::Something::OracleDB
  My::Something::MariaDB
  My::Something::MongoDB
  My::Something::HBase
 
  There are apps that (say SQLAlchemy-based apps) are fine with any
  relational DB. In that case all templates except for MongoDB and HBase
  should be matched. There are apps that design to work with MySQL only.
 In
  that case only TroveMySQL, GaleraMySQL and MariaDB should be matched.
 There
  are application who uses PL/SQL and thus require OracleDB (there can be
  several Oracle implementations as well). There are also applications
  (Marconi and Ceilometer are good example) that can use both some SQL
 and
  NoSQL databases. So conformance to Database interface is not enough and
  some sort of interface hierarchy required.

 IMO that is not really true and trying to stick all these databases into
 one SQL database interface is not a use case I'm interested in
 pursuing.

 Far more interesting is having each one be its own interface which apps
 can assert that they support or not.

 Agree, this looks like a feasible goal and would already bring some value
 add in that one could look up appropriate provider templates instead of
 having to explicitly link them in environments.
 Doing too much of inheritance sounds interesting at first glance but
 burries a lot of complexity.


 
  Another thing that we need to consider is that even compatible
  implementations may have different set of parameters. For example
  clustered-HA PostgreSQL implementation may require additional
 parameters
  besides those needed for plain single instance variant. Template that
  consumes *any* PostgreSQL will not be aware of those additional
 parameters.
  Thus they need to be dynamically added to environment's input
 parameters
  and resource consumer to be patched to pass those parameters to actual
  implementation
 

 I think this is a middleware pipe-dream and the devil is in the details.

 Just give users the ability to be specific, and then generic patterns
 will arise from those later on.

 I'd rather see a focus on namespacing and relative composition, so that
 providers of the same type that actually do use the same interface but
 are alternate implementations will be able to be consumed. So for
 instance
 there is the non-Neutron LBaaS and the Neutron LBaaS, and both have their
 merits for operators, but are basically identical from an application
 standpoint. That seems a better guiding use case than different
 databases.

 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev



 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


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

2014-04-05 Thread Thomas Spatzier
Clint Byrum cl...@fewbar.com wrote on 04/04/2014 19:05:04:
 From: Clint Byrum cl...@fewbar.com
 To: openstack-dev openstack-dev@lists.openstack.org
 Date: 04/04/2014 19:06
 Subject: Re: [openstack-dev] [Heat] [Murano] [Solum] applications inthe
cloud

 Excerpts from Stan Lagun's message of 2014-04-04 02:54:05 -0700:
  Hi Steve, Thomas
 
  I'm glad the discussion is so constructive!
 
  If we add type interfaces to HOT this may do the job.
  Applications in AppCatalog need to be portable across OpenStack clouds.
  Thus if we use some globally-unique type naming system applications
could
  identify their dependencies in unambiguous way.
 
  We also would need to establish relations between between interfaces.
  Suppose there is My::Something::Database interface and 7 compatible
  materializations:
  My::Something::TroveMySQL
  My::Something::GaleraMySQL
  My::Something::PostgreSQL
  My::Something::OracleDB
  My::Something::MariaDB
  My::Something::MongoDB
  My::Something::HBase
 
  There are apps that (say SQLAlchemy-based apps) are fine with any
  relational DB. In that case all templates except for MongoDB and HBase
  should be matched. There are apps that design to work with MySQL only.
In
  that case only TroveMySQL, GaleraMySQL and MariaDB should be matched.
There
  are application who uses PL/SQL and thus require OracleDB (there can be
  several Oracle implementations as well). There are also applications
  (Marconi and Ceilometer are good example) that can use both some SQL
and
  NoSQL databases. So conformance to Database interface is not enough and
  some sort of interface hierarchy required.

 IMO that is not really true and trying to stick all these databases into
 one SQL database interface is not a use case I'm interested in
 pursuing.

 Far more interesting is having each one be its own interface which apps
 can assert that they support or not.

Agree, this looks like a feasible goal and would already bring some value
add in that one could look up appropriate provider templates instead of
having to explicitly link them in environments.
Doing too much of inheritance sounds interesting at first glance but
burries a lot of complexity.


 
  Another thing that we need to consider is that even compatible
  implementations may have different set of parameters. For example
  clustered-HA PostgreSQL implementation may require additional
parameters
  besides those needed for plain single instance variant. Template that
  consumes *any* PostgreSQL will not be aware of those additional
parameters.
  Thus they need to be dynamically added to environment's input
parameters
  and resource consumer to be patched to pass those parameters to actual
  implementation
 

 I think this is a middleware pipe-dream and the devil is in the details.

 Just give users the ability to be specific, and then generic patterns
 will arise from those later on.

 I'd rather see a focus on namespacing and relative composition, so that
 providers of the same type that actually do use the same interface but
 are alternate implementations will be able to be consumed. So for
instance
 there is the non-Neutron LBaaS and the Neutron LBaaS, and both have their
 merits for operators, but are basically identical from an application
 standpoint. That seems a better guiding use case than different
databases.

 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev



___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


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

2014-04-04 Thread Thomas Spatzier
Hi Steve,

your indexing idea sounds interesting, but I am not sure it would work
reliably. The kind of matching based on names of parameters and outputs and
internal get_attr uses has very strong assumptions and I think there is a
not so low risk of false positives. What if the templates includes some
internal details that would not affect the matching but still change the
behavior in a way that would break the composition. Or what if a user by
chance built a template that by pure coincidence uses the same parameter
and output names as one of those abstract types that was mention, but the
template is simply not built for composition?

I think it would be much cleaner to have an explicit attribute in the
template that says this template can be uses as realization of type
My::SomeType and use that for presenting the user choice and building the
environment.

Regards,
Thomas

Steve Baker sba...@redhat.com wrote on 04/04/2014 06:12:38:
 From: Steve Baker sba...@redhat.com
 To: openstack-dev@lists.openstack.org
 Date: 04/04/2014 06:14
 Subject: Re: [openstack-dev] [Heat] [Murano] [Solum] applications inthe
cloud

 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 sba...@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 definitionof
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

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

2014-04-04 Thread Clint Byrum
Excerpts from Stan Lagun's message of 2014-04-04 02:54:05 -0700:
 Hi Steve, Thomas
 
 I'm glad the discussion is so constructive!
 
 If we add type interfaces to HOT this may do the job.
 Applications in AppCatalog need to be portable across OpenStack clouds.
 Thus if we use some globally-unique type naming system applications could
 identify their dependencies in unambiguous way.
 
 We also would need to establish relations between between interfaces.
 Suppose there is My::Something::Database interface and 7 compatible
 materializations:
 My::Something::TroveMySQL
 My::Something::GaleraMySQL
 My::Something::PostgreSQL
 My::Something::OracleDB
 My::Something::MariaDB
 My::Something::MongoDB
 My::Something::HBase
 
 There are apps that (say SQLAlchemy-based apps) are fine with any
 relational DB. In that case all templates except for MongoDB and HBase
 should be matched. There are apps that design to work with MySQL only. In
 that case only TroveMySQL, GaleraMySQL and MariaDB should be matched. There
 are application who uses PL/SQL and thus require OracleDB (there can be
 several Oracle implementations as well). There are also applications
 (Marconi and Ceilometer are good example) that can use both some SQL and
 NoSQL databases. So conformance to Database interface is not enough and
 some sort of interface hierarchy required.

IMO that is not really true and trying to stick all these databases into
one SQL database interface is not a use case I'm interested in
pursuing.

Far more interesting is having each one be its own interface which apps
can assert that they support or not.

 
 Another thing that we need to consider is that even compatible
 implementations may have different set of parameters. For example
 clustered-HA PostgreSQL implementation may require additional parameters
 besides those needed for plain single instance variant. Template that
 consumes *any* PostgreSQL will not be aware of those additional parameters.
 Thus they need to be dynamically added to environment's input parameters
 and resource consumer to be patched to pass those parameters to actual
 implementation
 

I think this is a middleware pipe-dream and the devil is in the details.

Just give users the ability to be specific, and then generic patterns
will arise from those later on.

I'd rather see a focus on namespacing and relative composition, so that
providers of the same type that actually do use the same interface but
are alternate implementations will be able to be consumed. So for instance
there is the non-Neutron LBaaS and the Neutron LBaaS, and both have their
merits for operators, but are basically identical from an application
standpoint. That seems a better guiding use case than different databases.

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


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

2014-04-04 Thread Stan Lagun
On Fri, Apr 4, 2014 at 9:05 PM, Clint Byrum cl...@fewbar.com wrote:

 IMO that is not really true and trying to stick all these databases into
 one SQL database interface is not a use case I'm interested in
 pursuing.


Indeed. Any SQL database is a useless interface. What I was trying to say
is that some apps may work just on any MySQL while others require some
specific version or variation or even impose some constraints on license or
underlying operating system. One possible solution was to have some sort of
interface hierarchy for that. Even better solution would be that all such
properties be declared somewhere in HOT so that consumer could say not just
I require MySQL-compatible template but I require MySQL-compatible
template with version = 5.0 and clustered = True. Probably you can come
with better example for this. Though interface alone is a good starting
point.

So for instance there is the non-Neutron LBaaS and the Neutron LBaaS, and
 both have their
 merits for operators, but are basically identical from an application
 standpoint.


While conforming to the same interface from consumer's point of view
different load-balancers has many configuration options (template
parameters) and many of them are specific to particular implementation
(otherwise all of them be functionally equal). This need to be addressed
somehow.

Sincerely yours,
Stan Lagun
Principal Software Engineer @ Mirantis

 sla...@mirantis.com
___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


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

2014-04-03 Thread Dmitry
I'm trying to think how the process is looks like from the application
provider point of view.
As application provider I need to:
1) Develop a new application, using 3rd party components (DB, Application
Container, Cache, Messaging etc).
2) Build and test my application
2) Upload the deployment artifact to the application catalog
3) Immediately or by demand of the dependent application to provision the
application to the certain environment
4) Automate application run-time management
5) Upgrade the application
6) Terminate the application


Now, getting to the underline OpenStack services, I  would think about the
following combination:
1) Develop, Build, Test and create an deployment artifact - Solum
2) Manage underline resources for deployment - Solum using Heat
3) Application Catalog Management - Murano
4) Application Deployment - Solum (for developed application) and Murano
(for dependent services: DB, Cache etc). Heroku BuildPack feature is
something I would suggest to embrace.
5) Run-time management - scale, repair, replicate, upgrade etc Solum using
Murano
6) Termination - Solum using Murano

My 2 cents  for the issue.

Dmitry


On Thu, Apr 3, 2014 at 3:04 AM, Georgy Okrokvertskhov 
gokrokvertsk...@mirantis.com 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.

 Thanks
 Georgy


 On Wed, Apr 2, 2014 at 3:30 PM, Steve Baker sba...@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 

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

2014-04-03 Thread Steve Baker
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 sba...@redhat.com
 mailto:sba...@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 

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

2014-04-02 Thread Ruslan Kamaldinov
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,
Ruslan

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


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

2014-04-02 Thread Steve Baker
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

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev