Re: [openstack-dev] [Solum] Definition feedback

2013-11-29 Thread Jay Pipes

On 11/27/2013 10:15 PM, Adrian Otto wrote:


On Nov 27, 2013, at 11:27 AM, Jay Pipes jaypi...@gmail.com wrote:


On 11/27/2013 02:03 PM, Adrian Otto wrote:

Jay,

On Nov 27, 2013, at 10:36 AM, Jay Pipes jaypi...@gmail.com
wrote:


On 11/27/2013 06:23 AM, Tom Deckers (tdeckers) wrote:

I understand the an Assembly can be a larger group of
components. However, those together exist to provide a
capability which we want to capture in some catalog so the
capability becomes discoverable. I'm not sure how the
'listing' mechanism works out in practice.  If this can be
used in an enterprise ecosystem to discover services then
that's fine.  We should capture a work item flesh out
discoverability of both Applications and Assemblies.  I make
that distinction because both scenarios should be provided.
As a service consumer, I should be able to look at the
'Applications' listed in the Openstack environment and
provision them.  In that case, we should also support flavors
of the service.  Depending on the consumer-provider
relationship, we might want to provide different
configuratons of the same Application. (e.g.
gold-silver-bronze tiering).  I believe this is covered by
the 'listing' you mentioned. Once deployed, there should also
be a mechanism to discover the deployed assemblies.  One
example of such deployed Assembly is a persistence service
that can in its turn be used as a Service in another
Assembly.  The specific details of the capability provided by
the Assembly needs to be discoverable in order to allow
successful auto-wiring (I've seen a comment about this
elsewhere in the project - I believe in last meeting).


Another thought around the naming of Assembly... there's no
reason why the API cannot just ditch the entire notion of an
assembly, and just use Component in a self-referential way.

In other words, an Application (or whatever is agree on for
that resource name) contains one or more Components. Components
may further be composed of one or more (sub)Components, which
themselves may be composed of further (sub)Components.

That way you keep the notion of a Component as generic and
encompassing as possible and allow for an unlimited generic
hierarchy of Component resources to comprise an Application.


As currently proposed, an Assembly (a top level grouping of
Components) requires only one Component, but may contain many.
The question is whether we should even have an Assembly. I admit
that Assembly is a new term, and therefore requires definition,
explanation, and examples. However, I think eliminating it and
just using Components is getting a bit too abstract, and requires
a bit too much explanation.

I consider this subject analogous to the fundamentals concepts
of Chemistry. Imagine trying to describe a molecule by only using
the concept of an atom. Each atom can be different, and have more
or less electrons etc. But if we did not have the concept of a
molecule (a top level grouping of atoms), and tried to explain
them as atoms contained within other atoms, Chemistry would get
harder to teach.

We want this API to be understandable to Application Developers.
I am afraid of simplifying matters too much, and making things a
bit too abstract.


Understood, but I actually think that the Component inside
Component approach would work quite well with a simple component
type attribute of the Component resource.

In your particle physics example, it would be the equivalent of
saying that an Atom is composed of subatomic particles, with those
subatomic particles having different types (hadrons, baryons,
mesons, etc) and those subatomic particles being composed of zero
or more subatomic particles of various types (neutrons, protons,
fermions, bosons, etc).

In fact, particle physics has the concept of elementary particles
-- those particles whose composition is unknown -- and composite
particles -- those particles that are composed of other particles.
The congruence between the taxonomy of particles and what I'm
proposing is actually remarkable :)

Elementary particle is like a Component with no sub Components
Composite particle is like a Component with sub Components. Each
particle has a type, and each Component would also have a type.


Yes, this is precisely my point. I'm aiming for elementary Chemistry,
and you're aiming for Particle Physics.


LOL. Touché.


Other possibility:

Call an Assembly exactly what it is: ComponentGroup


I'm open to revisiting more possible names for this besides Assembly,
but I do strongly believe that the top level grouping should be it's
own thing, and should not just be a self referential arrangement of
the same type of resources. I'd like it to convey the idea that an
Assembly is the running instance of the complete application, and all
of its various parts. I'm not convinced that componentGroup conveys
that.


Fair enough :)

-jay

___
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org

Re: [openstack-dev] [Solum] Definition feedback

2013-11-27 Thread Alex Heneveld


Personally Application gets my vote as the conceptual top level 
unit, with the best combination of some meaning and not too much 
ambiguity.  At least so far.  As Tom notes there is some ambiguity ... 
not sure we can avoid that altogether but worth some brainstorming.


Project is what I had originally proposed to avoid the confusion with 
running app instances (assemblies) but that is even less descriptive and 
has meanings elsewhere.


Package feels too low level, I agree.

Product is perhaps an alternative though also not ideal.

--A


On 27/11/2013 06:31, Clayton Coleman wrote:



On Nov 26, 2013, at 11:10 PM, Adrian Otto adrian.o...@rackspace.com wrote:




On Nov 26, 2013, at 4:20 PM, Clayton Coleman ccole...@redhat.com wrote:




On Nov 26, 2013, at 6:30 PM, Adrian Otto adrian.o...@rackspace.com wrote:

Tom,

On Nov 26, 2013, at 12:09 PM, Tom Deckers (tdeckers) tdeck...@cisco.com
wrote:


Hi All,

Few comments on the Definitions blueprint [1]:

1. I'd propose to alter the term 'Application' to either 'Application Package' 
or 'Package'.  Application isn't very descriptive and can be confusing to some 
with the actual deployed instance, etc.

I think that's a sensible suggestion. I'm open to using Package, as that's an 
accurate description of what an Application is currently conceived of.

Package is a bit fraught given its overlap with other programming concepts:

Python Dev: How do I get my django app up in production?
Admin: You can create a new package for it.
Python Dev: You mean with an __init__.py file?

Admin: Go create your package in horizon so you can deploy it.
Java Dev: Ok, I ran Create Package from eclipse
(Hours of humorous miscommunication ensue)

Solum Admin: Go update the package for Bob's app.
Other Admin: I ran yum update but nothing happened...

If application is generic, that might be a good thing.  I'm not sure there are 
too many words that can accurately describe a Java WAR, a Ruby on Rails site, a 
Jenkins server, a massive service oriented architecture, or a worker queue 
processing log data at the same time.  Server and site are too specific or in 
use in openstack already, program is too singular.

At the end of the day someone has to explain these terms to a large number of 
end users (developers) - would hope we can pick a name that is recognizable to 
most of them immediately, because they're going to pick the option that looks 
the most familiar to them and try it first.

All good points. This is why I like having these discussions with such a 
diverse group. I am still open to considering different terminology, accepting 
that whatever we pick to call things it will feel like a compromise for some of 
us. Any other thoughts on revisiting this name, or should we stick with 
application for now, and address this with more documentation to further 
clarify the meaning of the various abstracts?

I think Tom's point on this is valid - the app resource is more of a factory 
or template for your app at first.  However, I could easily imagine interaction patterns 
that imply a cohesive unit over time, but those are hard to argue about until we've got 
more direct use cases and client interaction drawn up.

For instance, if someone starts by creating an assembly right off the bat the 
application might not really be relevant, but if the client forces people to 
develop a plan first (either by helping them build it or pulling from operator 
templates) and then iterate on that plan directly (deploy app to env), a user 
might feel like the app is a stronger concept.


2. It should be possible for the package to be self-contained, in order to 
distribute application definitions.   As such, instead of using a repo, source 
code might come with the package itself.  Has this been considered as a 
blueprint: deploy code/binaries that are in a zip, rather than a repo?  Maybe 
Artifact serves this purpose?

The API should allow you to deploy something directly from a source code repo 
without packaging anything up. It should also allow you to present some static 
deployment artifacts (container image, zip file, etc.) for code that has 
already been built/tested.


3. Artifact has not been called out as a top-level noun.  It probably should 
and get a proper definition.

Good idea, I will add a definition for it.


4. Plan is described as deployment plan, but then it's also referenced in the 
description of 'Build'.  Plan seems to have a dual meaning, which is fine, but 
that should be called out explicitly.  Plan is not synonymous with deployment 
plan, rather we have a deployment plan and a build plan.  Those two together 
can be 'the plan'.

Currently Plan does have a dual meaning, but it may make sense to split each 
out if they are different enough. I'm open to considering ideas on this.


5. Operations.  The definition states that definitions can be added to a 
Service too.  Since the Service is provided by the platform, I assume it 
already comes with operations predefined.

Re: [openstack-dev] [Solum] Definition feedback

2013-11-27 Thread Tom Deckers (tdeckers)
Looks like most terms would have some ambiguity to them.  Regardless of what we 
decide on - maybe Application can stay after all - we need a crisp definition 
of the term, preferably with an example that illustrates the terminology and 
puts Application in context of different versions of the same applications, 
instances of the application.  

Great discussion!

Regards,
Tom.

-Original Message-
From: Alex Heneveld [mailto:alex.henev...@cloudsoftcorp.com] 
Sent: Wednesday, November 27, 2013 11:32
To: OpenStack Development Mailing List (not for usage questions)
Subject: Re: [openstack-dev] [Solum] Definition feedback


Personally Application gets my vote as the conceptual top level 
unit, with the best combination of some meaning and not too much ambiguity.  At 
least so far.  As Tom notes there is some ambiguity ... 
not sure we can avoid that altogether but worth some brainstorming.

Project is what I had originally proposed to avoid the confusion with running 
app instances (assemblies) but that is even less descriptive and has meanings 
elsewhere.

Package feels too low level, I agree.

Product is perhaps an alternative though also not ideal.

--A


On 27/11/2013 06:31, Clayton Coleman wrote:

 On Nov 26, 2013, at 11:10 PM, Adrian Otto adrian.o...@rackspace.com wrote:



 On Nov 26, 2013, at 4:20 PM, Clayton Coleman ccole...@redhat.com wrote:



 On Nov 26, 2013, at 6:30 PM, Adrian Otto adrian.o...@rackspace.com wrote:

 Tom,

 On Nov 26, 2013, at 12:09 PM, Tom Deckers (tdeckers) 
 tdeck...@cisco.com
 wrote:

 Hi All,

 Few comments on the Definitions blueprint [1]:

 1. I'd propose to alter the term 'Application' to either 'Application 
 Package' or 'Package'.  Application isn't very descriptive and can be 
 confusing to some with the actual deployed instance, etc.
 I think that's a sensible suggestion. I'm open to using Package, as that's 
 an accurate description of what an Application is currently conceived of.
 Package is a bit fraught given its overlap with other programming concepts:

 Python Dev: How do I get my django app up in production?
 Admin: You can create a new package for it.
 Python Dev: You mean with an __init__.py file?

 Admin: Go create your package in horizon so you can deploy it.
 Java Dev: Ok, I ran Create Package from eclipse (Hours of humorous 
 miscommunication ensue)

 Solum Admin: Go update the package for Bob's app.
 Other Admin: I ran yum update but nothing happened...

 If application is generic, that might be a good thing.  I'm not sure there 
 are too many words that can accurately describe a Java WAR, a Ruby on Rails 
 site, a Jenkins server, a massive service oriented architecture, or a 
 worker queue processing log data at the same time.  Server and site are too 
 specific or in use in openstack already, program is too singular.

 At the end of the day someone has to explain these terms to a large number 
 of end users (developers) - would hope we can pick a name that is 
 recognizable to most of them immediately, because they're going to pick the 
 option that looks the most familiar to them and try it first.
 All good points. This is why I like having these discussions with such a 
 diverse group. I am still open to considering different terminology, 
 accepting that whatever we pick to call things it will feel like a 
 compromise for some of us. Any other thoughts on revisiting this name, or 
 should we stick with application for now, and address this with more 
 documentation to further clarify the meaning of the various abstracts?
 I think Tom's point on this is valid - the app resource is more of a 
 factory or template for your app at first.  However, I could easily imagine 
 interaction patterns that imply a cohesive unit over time, but those are hard 
 to argue about until we've got more direct use cases and client interaction 
 drawn up.

 For instance, if someone starts by creating an assembly right off the bat the 
 application might not really be relevant, but if the client forces people to 
 develop a plan first (either by helping them build it or pulling from 
 operator templates) and then iterate on that plan directly (deploy app to 
 env), a user might feel like the app is a stronger concept.

 2. It should be possible for the package to be self-contained, in order 
 to distribute application definitions.   As such, instead of using a 
 repo, source code might come with the package itself.  Has this been 
 considered as a blueprint: deploy code/binaries that are in a zip, rather 
 than a repo?  Maybe Artifact serves this purpose?
 The API should allow you to deploy something directly from a source code 
 repo without packaging anything up. It should also allow you to present 
 some static deployment artifacts (container image, zip file, etc.) for 
 code that has already been built/tested.

 3. Artifact has not been called out as a top-level noun.  It probably 
 should and get a proper definition.
 Good idea, I will add a definition

Re: [openstack-dev] [Solum] Definition feedback

2013-11-27 Thread Tom Deckers (tdeckers)


-Original Message-
From: Adrian Otto [mailto:adrian.o...@rackspace.com]
Sent: Wednesday, November 27, 2013 0:28
To: OpenStack Development Mailing List (not for usage questions)
Subject: Re: [openstack-dev] [Solum] Definition feedback

Tom,

On Nov 26, 2013, at 12:09 PM, Tom Deckers (tdeckers)
tdeck...@cisco.com
 wrote:

 Hi All,

 Few comments on the Definitions blueprint [1]:

 1. I'd propose to alter the term 'Application' to either 'Application 
 Package'
or 'Package'.  Application isn't very descriptive and can be confusing to some
with the actual deployed instance, etc.

I think that's a sensible suggestion. I'm open to using Package, as that's an
accurate description of what an Application is currently conceived of.

 2. It should be possible for the package to be self-contained, in order to
distribute application definitions.   As such, instead of using a repo, source
code might come with the package itself.  Has this been considered as a
blueprint: deploy code/binaries that are in a zip, rather than a repo?  Maybe
Artifact serves this purpose?

The API should allow you to deploy something directly from a source code
repo without packaging anything up. It should also allow you to present some
static deployment artifacts (container image, zip file, etc.) for code that has
already been built/tested.

 3. Artifact has not been called out as a top-level noun.  It probably should
and get a proper definition.

Good idea, I will add a definition for it.

 4. Plan is described as deployment plan, but then it's also referenced in the
description of 'Build'.  Plan seems to have a dual meaning, which is fine, but
that should be called out explicitly.  Plan is not synonymous with deployment
plan, rather we have a deployment plan and a build plan.  Those two together
can be 'the plan'.

Currently Plan does have a dual meaning, but it may make sense to split each
out if they are different enough. I'm open to considering ideas on this.

 5. Operations.  The definition states that definitions can be added to a
Service too.  Since the Service is provided by the platform, I assume it 
already
comes with operations predefined.

Yes, the service provider owns services that are provided by the Platform, and
can extend them, where users may not. However, a user may register his/her
own Services within the context of a given tenant account, and those can be
extended and managed. In that case, you can actually connect Operations to
Services as a tenant. So this is really a question of what scope the Service
belongs to.

 6. Operations. A descriptor should exist that can be used for registration of
the deployed assembly into a catalog.  The descriptor should contain basic
information about the exposed functional API and management API (e.g.
Operations too).

An Assembly is a running group of cloud resources (a whole networked
application). A listing of those is exposed through the Assemblies resource.

A Plan is a rubber stamp for producing new Assemblies, and can also be listed
through the Plans resource. Any plan can be easily converted to an Assembly
with an API call.

Were you thinking that we should have a catalog beyond these listings?
Please elaborate on what you have in mind. I agree that any catalog should
provide a way to resolve through to a resources registered Operations. If the
current design prohibits this in any way, then I'd like to revise that.

I understand the an Assembly can be a larger group of components.  However, 
those together exist to provide a capability which we want to capture in some 
catalog so the capability becomes discoverable.  I'm not sure how the 'listing' 
mechanism works out in practice.  If this can be used in an enterprise 
ecosystem to discover services then that's fine.  We should capture a work item 
flesh out discoverability of both Applications and Assemblies.  I make that 
distinction because both scenarios should be provided.
As a service consumer, I should be able to look at the 'Applications' listed in 
the Openstack environment and provision them.  In that case, we should also 
support flavors of the service.  Depending on the consumer-provider 
relationship, we might want to provide different configuratons of the same 
Application. (e.g. gold-silver-bronze tiering).  I believe this is covered by 
the 'listing' you mentioned.
Once deployed, there should also be a mechanism to discover the deployed 
assemblies.  One example of such deployed Assembly is a persistence service 
that can in its turn be used as a Service in another Assembly.  The specific 
details of the capability provided by the Assembly needs to be discoverable in 
order to allow successful auto-wiring (I've seen a comment about this elsewhere 
in the project - I believe in last meeting).



 This leads to the next point:

 7. Package blueprint.  The Application Package might require its own
blueprint to define how it's composed.  I can see how the Package is used to
distribute/share

Re: [openstack-dev] [Solum] Definition feedback

2013-11-27 Thread Clayton Coleman


- Original Message -
 
 Personally Application gets my vote as the conceptual top level
 unit, with the best combination of some meaning and not too much
 ambiguity.  At least so far.  As Tom notes there is some ambiguity ...
 not sure we can avoid that altogether but worth some brainstorming.
 
 Project is what I had originally proposed to avoid the confusion with
 running app instances (assemblies) but that is even less descriptive and
 has meanings elsewhere.

And for those not following openstack-dev it looks like there is consensus 
developing about tenant - project in the REST APIs (not yet closed, but 
did not see much if any objections).

 
 Package feels too low level, I agree.
 
 Product is perhaps an alternative though also not ideal.
 
 --A
 
 
 On 27/11/2013 06:31, Clayton Coleman wrote:
 
  On Nov 26, 2013, at 11:10 PM, Adrian Otto adrian.o...@rackspace.com
  wrote:
 
 
 
  On Nov 26, 2013, at 4:20 PM, Clayton Coleman ccole...@redhat.com
  wrote:
 
 
 
  On Nov 26, 2013, at 6:30 PM, Adrian Otto adrian.o...@rackspace.com
  wrote:
 
  Tom,
 
  On Nov 26, 2013, at 12:09 PM, Tom Deckers (tdeckers)
  tdeck...@cisco.com
  wrote:
 
  Hi All,
 
  Few comments on the Definitions blueprint [1]:
 
  1. I'd propose to alter the term 'Application' to either 'Application
  Package' or 'Package'.  Application isn't very descriptive and can be
  confusing to some with the actual deployed instance, etc.
  I think that's a sensible suggestion. I'm open to using Package, as
  that's an accurate description of what an Application is currently
  conceived of.
  Package is a bit fraught given its overlap with other programming
  concepts:
 
  Python Dev: How do I get my django app up in production?
  Admin: You can create a new package for it.
  Python Dev: You mean with an __init__.py file?
 
  Admin: Go create your package in horizon so you can deploy it.
  Java Dev: Ok, I ran Create Package from eclipse
  (Hours of humorous miscommunication ensue)
 
  Solum Admin: Go update the package for Bob's app.
  Other Admin: I ran yum update but nothing happened...
 
  If application is generic, that might be a good thing.  I'm not sure
  there are too many words that can accurately describe a Java WAR, a Ruby
  on Rails site, a Jenkins server, a massive service oriented
  architecture, or a worker queue processing log data at the same time.
  Server and site are too specific or in use in openstack already,
  program is too singular.
 
  At the end of the day someone has to explain these terms to a large
  number of end users (developers) - would hope we can pick a name that is
  recognizable to most of them immediately, because they're going to pick
  the option that looks the most familiar to them and try it first.
  All good points. This is why I like having these discussions with such a
  diverse group. I am still open to considering different terminology,
  accepting that whatever we pick to call things it will feel like a
  compromise for some of us. Any other thoughts on revisiting this name, or
  should we stick with application for now, and address this with more
  documentation to further clarify the meaning of the various abstracts?
  I think Tom's point on this is valid - the app resource is more of a
  factory or template for your app at first.  However, I could easily
  imagine interaction patterns that imply a cohesive unit over time, but
  those are hard to argue about until we've got more direct use cases and
  client interaction drawn up.
 
  For instance, if someone starts by creating an assembly right off the bat
  the application might not really be relevant, but if the client forces
  people to develop a plan first (either by helping them build it or pulling
  from operator templates) and then iterate on that plan directly (deploy
  app to env), a user might feel like the app is a stronger concept.
 
  2. It should be possible for the package to be self-contained, in order
  to distribute application definitions.   As such, instead of using a
  repo, source code might come with the package itself.  Has this been
  considered as a blueprint: deploy code/binaries that are in a zip,
  rather than a repo?  Maybe Artifact serves this purpose?
  The API should allow you to deploy something directly from a source code
  repo without packaging anything up. It should also allow you to present
  some static deployment artifacts (container image, zip file, etc.) for
  code that has already been built/tested.
 
  3. Artifact has not been called out as a top-level noun.  It probably
  should and get a proper definition.
  Good idea, I will add a definition for it.
 
  4. Plan is described as deployment plan, but then it's also referenced
  in the description of 'Build'.  Plan seems to have a dual meaning,
  which is fine, but that should be called out explicitly.  Plan is not
  synonymous with deployment plan, rather we have a deployment plan and
  a build plan.  Those two together can be 'the plan'.
 

Re: [openstack-dev] [Solum] Definition feedback

2013-11-27 Thread Adrian Otto

On Nov 27, 2013, at 3:23 AM, Tom Deckers (tdeckers) tdeck...@cisco.com
 wrote:

 -Original Message-
 From: Adrian Otto [mailto:adrian.o...@rackspace.com]
 Sent: Wednesday, November 27, 2013 0:28
 To: OpenStack Development Mailing List (not for usage questions)
 Subject: Re: [openstack-dev] [Solum] Definition feedback
 
 Tom,
 
 On Nov 26, 2013, at 12:09 PM, Tom Deckers (tdeckers)
 tdeck...@cisco.com
 wrote:
 
 Hi All,
 
 Few comments on the Definitions blueprint [1]:
 
 1. I'd propose to alter the term 'Application' to either 'Application 
 Package'
 or 'Package'.  Application isn't very descriptive and can be confusing to 
 some
 with the actual deployed instance, etc.
 
 I think that's a sensible suggestion. I'm open to using Package, as that's an
 accurate description of what an Application is currently conceived of.
 
 2. It should be possible for the package to be self-contained, in order to
 distribute application definitions.   As such, instead of using a repo, 
 source
 code might come with the package itself.  Has this been considered as a
 blueprint: deploy code/binaries that are in a zip, rather than a repo?  Maybe
 Artifact serves this purpose?
 
 The API should allow you to deploy something directly from a source code
 repo without packaging anything up. It should also allow you to present some
 static deployment artifacts (container image, zip file, etc.) for code that 
 has
 already been built/tested.
 
 3. Artifact has not been called out as a top-level noun.  It probably should
 and get a proper definition.
 
 Good idea, I will add a definition for it.
 
 4. Plan is described as deployment plan, but then it's also referenced in 
 the
 description of 'Build'.  Plan seems to have a dual meaning, which is fine, 
 but
 that should be called out explicitly.  Plan is not synonymous with deployment
 plan, rather we have a deployment plan and a build plan.  Those two together
 can be 'the plan'.
 
 Currently Plan does have a dual meaning, but it may make sense to split each
 out if they are different enough. I'm open to considering ideas on this.
 
 5. Operations.  The definition states that definitions can be added to a
 Service too.  Since the Service is provided by the platform, I assume it 
 already
 comes with operations predefined.
 
 Yes, the service provider owns services that are provided by the Platform, 
 and
 can extend them, where users may not. However, a user may register his/her
 own Services within the context of a given tenant account, and those can be
 extended and managed. In that case, you can actually connect Operations to
 Services as a tenant. So this is really a question of what scope the Service
 belongs to.
 
 6. Operations. A descriptor should exist that can be used for registration 
 of
 the deployed assembly into a catalog.  The descriptor should contain basic
 information about the exposed functional API and management API (e.g.
 Operations too).
 
 An Assembly is a running group of cloud resources (a whole networked
 application). A listing of those is exposed through the Assemblies resource.
 
 A Plan is a rubber stamp for producing new Assemblies, and can also be listed
 through the Plans resource. Any plan can be easily converted to an Assembly
 with an API call.
 
 Were you thinking that we should have a catalog beyond these listings?
 Please elaborate on what you have in mind. I agree that any catalog should
 provide a way to resolve through to a resources registered Operations. If the
 current design prohibits this in any way, then I'd like to revise that.
 
 I understand the an Assembly can be a larger group of components.  However, 
 those together exist to provide a capability which we want to capture in some 
 catalog so the capability becomes discoverable.  

I think I understand what you are getting at now. This is where the concept of 
Services come in. The Services resource is a collection of Service resources, 
each of which are some service/thing/capability that wither the platform 
provider is offering, or that the tenant/user has created. For example, suppose 
I have an Adrian API that I create a Plan for, and launch into an Assembly. 
Now I can take that Assembly, and list it's connection specifics in a Service. 
Now that Assembly can be found/used by other Assemblies. So the next Blah App 
that comes along can call for a service named Adrian API and will be wired up 
to that existing running assembly. If I added support for multi-tenancy to 
Adrian App, I might actually get a slice of that service using a particular 
tenant/app id.

 I'm not sure how the 'listing' mechanism works out in practice.  If this can 
 be used in an enterprise ecosystem to discover services then that's fine.  We 
 should capture a work item flesh out discoverability of both Applications and 
 Assemblies.  I make that distinction because both scenarios should be 
 provided.

The Plans resources is where you could browse Applications, and the Services 
resource

Re: [openstack-dev] [Solum] Definition feedback

2013-11-27 Thread Jay Pipes

On 11/27/2013 06:23 AM, Tom Deckers (tdeckers) wrote:

I understand the an Assembly can be a larger group of components.
However, those together exist to provide a capability which we want
to capture in some catalog so the capability becomes discoverable.
I'm not sure how the 'listing' mechanism works out in practice.  If
this can be used in an enterprise ecosystem to discover services then
that's fine.  We should capture a work item flesh out discoverability
of both Applications and Assemblies.  I make that distinction because
both scenarios should be provided. As a service consumer, I should be
able to look at the 'Applications' listed in the Openstack
environment and provision them.  In that case, we should also support
flavors of the service.  Depending on the consumer-provider
relationship, we might want to provide different configuratons of the
same Application. (e.g. gold-silver-bronze tiering).  I believe this
is covered by the 'listing' you mentioned. Once deployed, there
should also be a mechanism to discover the deployed assemblies.  One
example of such deployed Assembly is a persistence service that can
in its turn be used as a Service in another Assembly.  The specific
details of the capability provided by the Assembly needs to be
discoverable in order to allow successful auto-wiring (I've seen a
comment about this elsewhere in the project - I believe in last
meeting).


Another thought around the naming of Assembly... there's no reason why 
the API cannot just ditch the entire notion of an assembly, and just use 
Component in a self-referential way.


In other words, an Application (or whatever is agree on for that 
resource name) contains one or more Components. Components may further 
be composed of one or more (sub)Components, which themselves may be 
composed of further (sub)Components.


That way you keep the notion of a Component as generic and encompassing 
as possible and allow for an unlimited generic hierarchy of Component 
resources to comprise an Application.


Best,
-jay

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


Re: [openstack-dev] [Solum] Definition feedback

2013-11-27 Thread Adrian Otto
Jay,

On Nov 27, 2013, at 10:36 AM, Jay Pipes jaypi...@gmail.com
 wrote:

 On 11/27/2013 06:23 AM, Tom Deckers (tdeckers) wrote:
 I understand the an Assembly can be a larger group of components.
 However, those together exist to provide a capability which we want
 to capture in some catalog so the capability becomes discoverable.
 I'm not sure how the 'listing' mechanism works out in practice.  If
 this can be used in an enterprise ecosystem to discover services then
 that's fine.  We should capture a work item flesh out discoverability
 of both Applications and Assemblies.  I make that distinction because
 both scenarios should be provided. As a service consumer, I should be
 able to look at the 'Applications' listed in the Openstack
 environment and provision them.  In that case, we should also support
 flavors of the service.  Depending on the consumer-provider
 relationship, we might want to provide different configuratons of the
 same Application. (e.g. gold-silver-bronze tiering).  I believe this
 is covered by the 'listing' you mentioned. Once deployed, there
 should also be a mechanism to discover the deployed assemblies.  One
 example of such deployed Assembly is a persistence service that can
 in its turn be used as a Service in another Assembly.  The specific
 details of the capability provided by the Assembly needs to be
 discoverable in order to allow successful auto-wiring (I've seen a
 comment about this elsewhere in the project - I believe in last
 meeting).
 
 Another thought around the naming of Assembly... there's no reason why the 
 API cannot just ditch the entire notion of an assembly, and just use 
 Component in a self-referential way.
 
 In other words, an Application (or whatever is agree on for that resource 
 name) contains one or more Components. Components may further be composed of 
 one or more (sub)Components, which themselves may be composed of further 
 (sub)Components.
 
 That way you keep the notion of a Component as generic and encompassing as 
 possible and allow for an unlimited generic hierarchy of Component resources 
 to comprise an Application.

As currently proposed, an Assembly (a top level grouping of Components) 
requires only one Component, but may contain many. The question is whether we 
should even have an Assembly. I admit that Assembly is a new term, and 
therefore requires definition, explanation, and examples. However, I think 
eliminating it and just using Components is getting a bit too abstract, and 
requires a bit too much explanation. 

I consider this subject analogous to the fundamentals concepts of Chemistry. 
Imagine trying to describe a molecule by only using the concept of an atom. 
Each atom can be different, and have more or less electrons etc. But if we did 
not have the concept of a molecule (a top level grouping of atoms), and tried 
to explain them as atoms contained within other atoms, Chemistry would get 
harder to teach.

We want this API to be understandable to Application Developers. I am afraid of 
simplifying matters too much, and making things a bit too abstract.

Thanks,

Adrian

 
 Best,
 -jay
 
 ___
 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] [Solum] Definition feedback

2013-11-27 Thread Jay Pipes

On 11/27/2013 02:03 PM, Adrian Otto wrote:

Jay,

On Nov 27, 2013, at 10:36 AM, Jay Pipes jaypi...@gmail.com wrote:


On 11/27/2013 06:23 AM, Tom Deckers (tdeckers) wrote:

I understand the an Assembly can be a larger group of
components. However, those together exist to provide a capability
which we want to capture in some catalog so the capability
becomes discoverable. I'm not sure how the 'listing' mechanism
works out in practice.  If this can be used in an enterprise
ecosystem to discover services then that's fine.  We should
capture a work item flesh out discoverability of both
Applications and Assemblies.  I make that distinction because
both scenarios should be provided. As a service consumer, I
should be able to look at the 'Applications' listed in the
Openstack environment and provision them.  In that case, we
should also support flavors of the service.  Depending on the
consumer-provider relationship, we might want to provide
different configuratons of the same Application. (e.g.
gold-silver-bronze tiering).  I believe this is covered by the
'listing' you mentioned. Once deployed, there should also be a
mechanism to discover the deployed assemblies.  One example of
such deployed Assembly is a persistence service that can in its
turn be used as a Service in another Assembly.  The specific
details of the capability provided by the Assembly needs to be
discoverable in order to allow successful auto-wiring (I've seen
a comment about this elsewhere in the project - I believe in
last meeting).


Another thought around the naming of Assembly... there's no
reason why the API cannot just ditch the entire notion of an
assembly, and just use Component in a self-referential way.

In other words, an Application (or whatever is agree on for that
resource name) contains one or more Components. Components may
further be composed of one or more (sub)Components, which
themselves may be composed of further (sub)Components.

That way you keep the notion of a Component as generic and
encompassing as possible and allow for an unlimited generic
hierarchy of Component resources to comprise an Application.


As currently proposed, an Assembly (a top level grouping of
Components) requires only one Component, but may contain many. The
question is whether we should even have an Assembly. I admit that
Assembly is a new term, and therefore requires definition,
explanation, and examples. However, I think eliminating it and just
using Components is getting a bit too abstract, and requires a bit
too much explanation.

I consider this subject analogous to the fundamentals concepts of
Chemistry. Imagine trying to describe a molecule by only using the
concept of an atom. Each atom can be different, and have more or less
electrons etc. But if we did not have the concept of a molecule (a
top level grouping of atoms), and tried to explain them as atoms
contained within other atoms, Chemistry would get harder to teach.

We want this API to be understandable to Application Developers. I am
afraid of simplifying matters too much, and making things a bit too
abstract.


Understood, but I actually think that the Component inside Component 
approach would work quite well with a simple component type attribute 
of the Component resource.


In your particle physics example, it would be the equivalent of saying 
that an Atom is composed of subatomic particles, with those subatomic 
particles having different types (hadrons, baryons, mesons, etc) and 
those subatomic particles being composed of zero or more subatomic 
particles of various types (neutrons, protons, fermions, bosons, etc).


In fact, particle physics has the concept of elementary particles -- 
those particles whose composition is unknown -- and composite particles 
-- those particles that are composed of other particles. The congruence 
between the taxonomy of particles and what I'm proposing is actually 
remarkable :)


Elementary particle is like a Component with no sub Components
Composite particle is like a Component with sub Components.
Each particle has a type, and each Component would also have a type.

Other possibility:

Call an Assembly exactly what it is: ComponentGroup

Best,
-jay

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


Re: [openstack-dev] [Solum] Definition feedback

2013-11-27 Thread Adrian Otto

On Nov 27, 2013, at 11:27 AM, Jay Pipes jaypi...@gmail.com wrote:

 On 11/27/2013 02:03 PM, Adrian Otto wrote:
 Jay,
 
 On Nov 27, 2013, at 10:36 AM, Jay Pipes jaypi...@gmail.com wrote:
 
 On 11/27/2013 06:23 AM, Tom Deckers (tdeckers) wrote:
 I understand the an Assembly can be a larger group of
 components. However, those together exist to provide a capability
 which we want to capture in some catalog so the capability
 becomes discoverable. I'm not sure how the 'listing' mechanism
 works out in practice.  If this can be used in an enterprise
 ecosystem to discover services then that's fine.  We should
 capture a work item flesh out discoverability of both
 Applications and Assemblies.  I make that distinction because
 both scenarios should be provided. As a service consumer, I
 should be able to look at the 'Applications' listed in the
 Openstack environment and provision them.  In that case, we
 should also support flavors of the service.  Depending on the
 consumer-provider relationship, we might want to provide
 different configuratons of the same Application. (e.g.
 gold-silver-bronze tiering).  I believe this is covered by the
 'listing' you mentioned. Once deployed, there should also be a
 mechanism to discover the deployed assemblies.  One example of
 such deployed Assembly is a persistence service that can in its
 turn be used as a Service in another Assembly.  The specific
 details of the capability provided by the Assembly needs to be
 discoverable in order to allow successful auto-wiring (I've seen
 a comment about this elsewhere in the project - I believe in
 last meeting).
 
 Another thought around the naming of Assembly... there's no
 reason why the API cannot just ditch the entire notion of an
 assembly, and just use Component in a self-referential way.
 
 In other words, an Application (or whatever is agree on for that
 resource name) contains one or more Components. Components may
 further be composed of one or more (sub)Components, which
 themselves may be composed of further (sub)Components.
 
 That way you keep the notion of a Component as generic and
 encompassing as possible and allow for an unlimited generic
 hierarchy of Component resources to comprise an Application.
 
 As currently proposed, an Assembly (a top level grouping of
 Components) requires only one Component, but may contain many. The
 question is whether we should even have an Assembly. I admit that
 Assembly is a new term, and therefore requires definition,
 explanation, and examples. However, I think eliminating it and just
 using Components is getting a bit too abstract, and requires a bit
 too much explanation.
 
 I consider this subject analogous to the fundamentals concepts of
 Chemistry. Imagine trying to describe a molecule by only using the
 concept of an atom. Each atom can be different, and have more or less
 electrons etc. But if we did not have the concept of a molecule (a
 top level grouping of atoms), and tried to explain them as atoms
 contained within other atoms, Chemistry would get harder to teach.
 
 We want this API to be understandable to Application Developers. I am
 afraid of simplifying matters too much, and making things a bit too
 abstract.
 
 Understood, but I actually think that the Component inside Component approach 
 would work quite well with a simple component type attribute of the 
 Component resource.
 
 In your particle physics example, it would be the equivalent of saying that 
 an Atom is composed of subatomic particles, with those subatomic particles 
 having different types (hadrons, baryons, mesons, etc) and those subatomic 
 particles being composed of zero or more subatomic particles of various types 
 (neutrons, protons, fermions, bosons, etc).
 
 In fact, particle physics has the concept of elementary particles -- those 
 particles whose composition is unknown -- and composite particles -- those 
 particles that are composed of other particles. The congruence between the 
 taxonomy of particles and what I'm proposing is actually remarkable :)
 
 Elementary particle is like a Component with no sub Components
 Composite particle is like a Component with sub Components.
 Each particle has a type, and each Component would also have a type.

Yes, this is precisely my point. I'm aiming for elementary Chemistry, and 
you're aiming for Particle Physics.

 Other possibility:
 
 Call an Assembly exactly what it is: ComponentGroup

I'm open to revisiting more possible names for this besides Assembly, but I do 
strongly believe that the top level grouping should be it's own thing, and 
should not just be a self referential arrangement of the same type of 
resources. I'd like it to convey the idea that an Assembly is the running 
instance of the complete application, and all of its various parts. I'm not 
convinced that componentGroup conveys that.

 
 Best,
 -jay
 
 ___
 OpenStack-dev mailing list
 OpenStack-dev@lists.openstack.org
 

Re: [openstack-dev] [Solum] Definition feedback

2013-11-26 Thread Adrian Otto
Tom, 

On Nov 26, 2013, at 12:09 PM, Tom Deckers (tdeckers) tdeck...@cisco.com
 wrote:

 Hi All,
 
 Few comments on the Definitions blueprint [1]:
 
 1. I'd propose to alter the term 'Application' to either 'Application 
 Package' or 'Package'.  Application isn't very descriptive and can be 
 confusing to some with the actual deployed instance, etc.

I think that's a sensible suggestion. I'm open to using Package, as that's an 
accurate description of what an Application is currently conceived of.
 
 2. It should be possible for the package to be self-contained, in order to 
 distribute application definitions.   As such, instead of using a repo, 
 source code might come with the package itself.  Has this been considered as 
 a blueprint: deploy code/binaries that are in a zip, rather than a repo?  
 Maybe Artifact serves this purpose?

The API should allow you to deploy something directly from a source code repo 
without packaging anything up. It should also allow you to present some static 
deployment artifacts (container image, zip file, etc.) for code that has 
already been built/tested.

 3. Artifact has not been called out as a top-level noun.  It probably should 
 and get a proper definition.

Good idea, I will add a definition for it.

 4. Plan is described as deployment plan, but then it's also referenced in the 
 description of 'Build'.  Plan seems to have a dual meaning, which is fine, 
 but that should be called out explicitly.  Plan is not synonymous with 
 deployment plan, rather we have a deployment plan and a build plan.  Those 
 two together can be 'the plan'. 

Currently Plan does have a dual meaning, but it may make sense to split each 
out if they are different enough. I'm open to considering ideas on this.

 5. Operations.  The definition states that definitions can be added to a 
 Service too.  Since the Service is provided by the platform, I assume it 
 already comes with operations predefined.

Yes, the service provider owns services that are provided by the Platform, and 
can extend them, where users may not. However, a user may register his/her own 
Services within the context of a given tenant account, and those can be 
extended and managed. In that case, you can actually connect Operations to 
Services as a tenant. So this is really a question of what scope the Service 
belongs to.

 6. Operations. A descriptor should exist that can be used for registration of 
 the deployed assembly into a catalog.  The descriptor should contain basic 
 information about the exposed functional API and management API (e.g. 
 Operations too).  

An Assembly is a running group of cloud resources (a whole networked 
application). A listing of those is exposed through the Assemblies resource.

A Plan is a rubber stamp for producing new Assemblies, and can also be listed 
through the Plans resource. Any plan can be easily converted to an Assembly 
with an API call.

Were you thinking that we should have a catalog beyond these listings? Please 
elaborate on what you have in mind. I agree that any catalog should provide a 
way to resolve through to a resources registered Operations. If the current 
design prohibits this in any way, then I'd like to revise that.

 This leads to the next point:
 
 7. Package blueprint.  The Application Package might require its own 
 blueprint to define how it's composed.  I can see how the Package is used to 
 distribute/share an application.  The blueprint should define a well-known 
 format. 

Yes, we have a concept of this that I'm working to express in writing. Think of 
the relation between HOT files and Heat. We will have a similar relation of 
Plan files to Solum. I will be borrowing concepts from CAMP, which has fully 
specified a format from an open standards perspective that should be well 
suited for this purpose.

Thanks,

Adrian

 If the above makes sense, I can take a stab at an revised diagram.
 
 Regards,
 Tom Deckers.
 
 [1] https://blueprints.launchpad.net/solum/+spec/definitions
 
 
 
 ___
 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] [Solum] Definition feedback

2013-11-26 Thread Clayton Coleman


 On Nov 26, 2013, at 6:30 PM, Adrian Otto adrian.o...@rackspace.com wrote:
 
 Tom, 
 
 On Nov 26, 2013, at 12:09 PM, Tom Deckers (tdeckers) tdeck...@cisco.com
 wrote:
 
 Hi All,
 
 Few comments on the Definitions blueprint [1]:
 
 1. I'd propose to alter the term 'Application' to either 'Application 
 Package' or 'Package'.  Application isn't very descriptive and can be 
 confusing to some with the actual deployed instance, etc.
 
 I think that's a sensible suggestion. I'm open to using Package, as that's an 
 accurate description of what an Application is currently conceived of.

Package is a bit fraught given its overlap with other programming concepts:

Python Dev: How do I get my django app up in production?
Admin: You can create a new package for it.
Python Dev: You mean with an __init__.py file?

Admin: Go create your package in horizon so you can deploy it.
Java Dev: Ok, I ran Create Package from eclipse
(Hours of humorous miscommunication ensue)

Solum Admin: Go update the package for Bob's app.
Other Admin: I ran yum update but nothing happened...

If application is generic, that might be a good thing.  I'm not sure there are 
too many words that can accurately describe a Java WAR, a Ruby on Rails site, a 
Jenkins server, a massive service oriented architecture, or a worker queue 
processing log data at the same time.  Server and site are too specific or in 
use in openstack already, program is too singular.

At the end of the day someone has to explain these terms to a large number of 
end users (developers) - would hope we can pick a name that is recognizable to 
most of them immediately, because they're going to pick the option that looks 
the most familiar to them and try it first.

 
 2. It should be possible for the package to be self-contained, in order to 
 distribute application definitions.   As such, instead of using a repo, 
 source code might come with the package itself.  Has this been considered as 
 a blueprint: deploy code/binaries that are in a zip, rather than a repo?  
 Maybe Artifact serves this purpose?
 
 The API should allow you to deploy something directly from a source code repo 
 without packaging anything up. It should also allow you to present some 
 static deployment artifacts (container image, zip file, etc.) for code that 
 has already been built/tested.
 
 3. Artifact has not been called out as a top-level noun.  It probably should 
 and get a proper definition.
 
 Good idea, I will add a definition for it.
 
 4. Plan is described as deployment plan, but then it's also referenced in 
 the description of 'Build'.  Plan seems to have a dual meaning, which is 
 fine, but that should be called out explicitly.  Plan is not synonymous with 
 deployment plan, rather we have a deployment plan and a build plan.  Those 
 two together can be 'the plan'.
 
 Currently Plan does have a dual meaning, but it may make sense to split each 
 out if they are different enough. I'm open to considering ideas on this.
 
 5. Operations.  The definition states that definitions can be added to a 
 Service too.  Since the Service is provided by the platform, I assume it 
 already comes with operations predefined.
 
 Yes, the service provider owns services that are provided by the Platform, 
 and can extend them, where users may not. However, a user may register 
 his/her own Services within the context of a given tenant account, and those 
 can be extended and managed. In that case, you can actually connect 
 Operations to Services as a tenant. So this is really a question of what 
 scope the Service belongs to.
 
 6. Operations. A descriptor should exist that can be used for registration 
 of the deployed assembly into a catalog.  The descriptor should contain 
 basic information about the exposed functional API and management API (e.g. 
 Operations too).  
 
 An Assembly is a running group of cloud resources (a whole networked 
 application

Or a part of one.

 ). A listing of those is exposed through the Assemblies resource.
 
 A Plan is a rubber stamp for producing new Assemblies, and can also be listed 
 through the Plans resource. Any plan can be easily converted to an Assembly 
 with an API call.
 
 Were you thinking that we should have a catalog beyond these listings? Please 
 elaborate on what you have in mind. I agree that any catalog should provide a 
 way to resolve through to a resources registered Operations. If the current 
 design prohibits this in any way, then I'd like to revise that.
 
 This leads to the next point:
 
 7. Package blueprint.  The Application Package might require its own 
 blueprint to define how it's composed.  I can see how the Package is used to 
 distribute/share an application.  The blueprint should define a well-known 
 format.
 
 Yes, we have a concept of this that I'm working to express in writing. Think 
 of the relation between HOT files and Heat. We will have a similar relation 
 of Plan files to Solum. I will be borrowing concepts from CAMP, 

Re: [openstack-dev] [Solum] Definition feedback

2013-11-26 Thread Adrian Otto


 On Nov 26, 2013, at 4:20 PM, Clayton Coleman ccole...@redhat.com wrote:
 
 
 
 On Nov 26, 2013, at 6:30 PM, Adrian Otto adrian.o...@rackspace.com wrote:
 
 Tom, 
 
 On Nov 26, 2013, at 12:09 PM, Tom Deckers (tdeckers) tdeck...@cisco.com
 wrote:
 
 Hi All,
 
 Few comments on the Definitions blueprint [1]:
 
 1. I'd propose to alter the term 'Application' to either 'Application 
 Package' or 'Package'.  Application isn't very descriptive and can be 
 confusing to some with the actual deployed instance, etc.
 
 I think that's a sensible suggestion. I'm open to using Package, as that's 
 an accurate description of what an Application is currently conceived of.
 
 Package is a bit fraught given its overlap with other programming concepts:
 
 Python Dev: How do I get my django app up in production?
 Admin: You can create a new package for it.
 Python Dev: You mean with an __init__.py file?
 
 Admin: Go create your package in horizon so you can deploy it.
 Java Dev: Ok, I ran Create Package from eclipse
 (Hours of humorous miscommunication ensue)
 
 Solum Admin: Go update the package for Bob's app.
 Other Admin: I ran yum update but nothing happened...
 
 If application is generic, that might be a good thing.  I'm not sure there 
 are too many words that can accurately describe a Java WAR, a Ruby on Rails 
 site, a Jenkins server, a massive service oriented architecture, or a worker 
 queue processing log data at the same time.  Server and site are too specific 
 or in use in openstack already, program is too singular.
 
 At the end of the day someone has to explain these terms to a large number of 
 end users (developers) - would hope we can pick a name that is recognizable 
 to most of them immediately, because they're going to pick the option that 
 looks the most familiar to them and try it first.

All good points. This is why I like having these discussions with such a 
diverse group. I am still open to considering different terminology, accepting 
that whatever we pick to call things it will feel like a compromise for some of 
us. Any other thoughts on revisiting this name, or should we stick with 
application for now, and address this with more documentation to further 
clarify the meaning of the various abstracts?

 2. It should be possible for the package to be self-contained, in order to 
 distribute application definitions.   As such, instead of using a repo, 
 source code might come with the package itself.  Has this been considered 
 as a blueprint: deploy code/binaries that are in a zip, rather than a repo? 
  Maybe Artifact serves this purpose?
 
 The API should allow you to deploy something directly from a source code 
 repo without packaging anything up. It should also allow you to present some 
 static deployment artifacts (container image, zip file, etc.) for code that 
 has already been built/tested.
 
 3. Artifact has not been called out as a top-level noun.  It probably 
 should and get a proper definition.
 
 Good idea, I will add a definition for it.
 
 4. Plan is described as deployment plan, but then it's also referenced in 
 the description of 'Build'.  Plan seems to have a dual meaning, which is 
 fine, but that should be called out explicitly.  Plan is not synonymous 
 with deployment plan, rather we have a deployment plan and a build plan.  
 Those two together can be 'the plan'.
 
 Currently Plan does have a dual meaning, but it may make sense to split each 
 out if they are different enough. I'm open to considering ideas on this.
 
 5. Operations.  The definition states that definitions can be added to a 
 Service too.  Since the Service is provided by the platform, I assume it 
 already comes with operations predefined.
 
 Yes, the service provider owns services that are provided by the Platform, 
 and can extend them, where users may not. However, a user may register 
 his/her own Services within the context of a given tenant account, and those 
 can be extended and managed. In that case, you can actually connect 
 Operations to Services as a tenant. So this is really a question of what 
 scope the Service belongs to.
 
 6. Operations. A descriptor should exist that can be used for registration 
 of the deployed assembly into a catalog.  The descriptor should contain 
 basic information about the exposed functional API and management API (e.g. 
 Operations too).  
 
 An Assembly is a running group of cloud resources (a whole networked 
 application
 
 Or a part of one.
 
 ). A listing of those is exposed through the Assemblies resource.
 
 A Plan is a rubber stamp for producing new Assemblies, and can also be 
 listed through the Plans resource. Any plan can be easily converted to an 
 Assembly with an API call.
 
 Were you thinking that we should have a catalog beyond these listings? 
 Please elaborate on what you have in mind. I agree that any catalog should 
 provide a way to resolve through to a resources registered Operations. If 
 the current design prohibits this in 

Re: [openstack-dev] [Solum] Definition feedback

2013-11-26 Thread Clayton Coleman


 On Nov 26, 2013, at 11:10 PM, Adrian Otto adrian.o...@rackspace.com wrote:
 
 
 
 On Nov 26, 2013, at 4:20 PM, Clayton Coleman ccole...@redhat.com wrote:
 
 
 
 On Nov 26, 2013, at 6:30 PM, Adrian Otto adrian.o...@rackspace.com wrote:
 
 Tom, 
 
 On Nov 26, 2013, at 12:09 PM, Tom Deckers (tdeckers) tdeck...@cisco.com
 wrote:
 
 Hi All,
 
 Few comments on the Definitions blueprint [1]:
 
 1. I'd propose to alter the term 'Application' to either 'Application 
 Package' or 'Package'.  Application isn't very descriptive and can be 
 confusing to some with the actual deployed instance, etc.
 
 I think that's a sensible suggestion. I'm open to using Package, as that's 
 an accurate description of what an Application is currently conceived of.
 
 Package is a bit fraught given its overlap with other programming concepts:
 
 Python Dev: How do I get my django app up in production?
 Admin: You can create a new package for it.
 Python Dev: You mean with an __init__.py file?
 
 Admin: Go create your package in horizon so you can deploy it.
 Java Dev: Ok, I ran Create Package from eclipse
 (Hours of humorous miscommunication ensue)
 
 Solum Admin: Go update the package for Bob's app.
 Other Admin: I ran yum update but nothing happened...
 
 If application is generic, that might be a good thing.  I'm not sure there 
 are too many words that can accurately describe a Java WAR, a Ruby on Rails 
 site, a Jenkins server, a massive service oriented architecture, or a worker 
 queue processing log data at the same time.  Server and site are too 
 specific or in use in openstack already, program is too singular.
 
 At the end of the day someone has to explain these terms to a large number 
 of end users (developers) - would hope we can pick a name that is 
 recognizable to most of them immediately, because they're going to pick the 
 option that looks the most familiar to them and try it first.
 
 All good points. This is why I like having these discussions with such a 
 diverse group. I am still open to considering different terminology, 
 accepting that whatever we pick to call things it will feel like a compromise 
 for some of us. Any other thoughts on revisiting this name, or should we 
 stick with application for now, and address this with more documentation to 
 further clarify the meaning of the various abstracts?

I think Tom's point on this is valid - the app resource is more of a factory 
or template for your app at first.  However, I could easily imagine interaction 
patterns that imply a cohesive unit over time, but those are hard to argue 
about until we've got more direct use cases and client interaction drawn up.

For instance, if someone starts by creating an assembly right off the bat the 
application might not really be relevant, but if the client forces people to 
develop a plan first (either by helping them build it or pulling from operator 
templates) and then iterate on that plan directly (deploy app to env), a user 
might feel like the app is a stronger concept.

 
 2. It should be possible for the package to be self-contained, in order to 
 distribute application definitions.   As such, instead of using a repo, 
 source code might come with the package itself.  Has this been considered 
 as a blueprint: deploy code/binaries that are in a zip, rather than a 
 repo?  Maybe Artifact serves this purpose?
 
 The API should allow you to deploy something directly from a source code 
 repo without packaging anything up. It should also allow you to present 
 some static deployment artifacts (container image, zip file, etc.) for code 
 that has already been built/tested.
 
 3. Artifact has not been called out as a top-level noun.  It probably 
 should and get a proper definition.
 
 Good idea, I will add a definition for it.
 
 4. Plan is described as deployment plan, but then it's also referenced in 
 the description of 'Build'.  Plan seems to have a dual meaning, which is 
 fine, but that should be called out explicitly.  Plan is not synonymous 
 with deployment plan, rather we have a deployment plan and a build plan.  
 Those two together can be 'the plan'.
 
 Currently Plan does have a dual meaning, but it may make sense to split 
 each out if they are different enough. I'm open to considering ideas on 
 this.
 
 5. Operations.  The definition states that definitions can be added to a 
 Service too.  Since the Service is provided by the platform, I assume it 
 already comes with operations predefined.
 
 Yes, the service provider owns services that are provided by the Platform, 
 and can extend them, where users may not. However, a user may register 
 his/her own Services within the context of a given tenant account, and 
 those can be extended and managed. In that case, you can actually connect 
 Operations to Services as a tenant. So this is really a question of what 
 scope the Service belongs to.
 
 6. Operations. A descriptor should exist that can be used for registration 
 of the deployed assembly