[openstack-dev] [Heat] A concrete proposal for Heat Providers

Zane Bitter zbitter at redhat.com
Mon Apr 29 18:35:58 UTC 2013


On 26/04/13 13:24, Alex Heneveld wrote:
>
> D+ here too.  seems unanimous.  (a bad mark at school but here a good
> thing!)
>
> this captures the single biggest thing i think most of us care about:
> composition / more flexible re-use.
> and does it in a manageable incremental way.
>
> in the interest of separating issues, these are two other areas which
> are mostly independent but i think
> also very important:
>
> * intuitive DSL -- something easier to write and easier to read. two
> offenders which it seems not hard to
> fix are long type names eg "OS::Nova::Server" (for which could introduce
> supertypes/aliases eg "server"?),

Aliases are easy to implement, and it's also easy to make a translation 
tool to reverse them, so if this would move the needle on adoption then 
it sounds like a good thing. Presumably we'd want to wait until we have 
native resource types for everything implemented, since there's no point 
aliasing to AWS resource types.

> and embedded scripts/mappings (which a bundle could alleviate eg ZIP as
> per Thomas's suggestion)

Yeah, the embedded script markup is horrible at the moment - it's 
basically write-only code. There are a number of ideas being kicked 
around in these two blueprints:

https://blueprints.launchpad.net/heat/+spec/bash-environment-function
https://blueprints.launchpad.net/heat/+spec/template-string-function

And I think that the YAML format plus whichever of those we end up 
implementing will go a long way towards making the scripts actually 
readable again.

I understand the appeal of the zip archive - you can mix different file 
formats easily - but the downside is that the template becomes basically 
a black box and you can't e.g. check in to version control and do diffs.

Not that things are perfect at the moment - nested stacks already make 
it difficult to guarantee that you can e.g. launch an identical stack 
again at a later date, unless you have a lot of very disciplined 
practices around how you use them. Provider stacks would make that even 
worse. I'm not sure yet what the best answer is.

Maybe we should just scrap our API and replace it with a Git repo that 
updates your stack every time you do git push. I'm only half joking.

>
> * modelling relationships -- if we can support typed relationships
> between components (resources)
> then we have a leg-up both for auto-wiring and for acting on wait
> conditions at a finer granularity.  this
> makes the descriptions smaller and more portable, makes deployment
> faster, and allows more use cases.
> (i've experimented with modelling this as requirements and fulfillments,
> which seems parsimonious and
> natural, but that's part of what we need to figure out!)

I'm still trying to get my head around this part, and in particular to 
what extent it overlaps with existing configuration management tools 
(i.e. Puppet/Chef). Concrete use cases are definitely the most helpful 
thing for trying to figure that out though, so thanks!

>      as an example, here are two use cases i believe we would struggle
> with (people would have to roll
> their own co-ordination; but please correct me if i'm wrong):
> ** some of the hadoop distros need to know the ip's of a quorum of
> servers in order to seed the
> config for those servers; and

As Steve said, it seems like this might be possible even now. It would 
be interesting to dig into this a bit deeper and either confirm that or 
refine our understanding of the problem.

> ** some databases require special connectors installed at the client
> (e.g. install php_mysql at the
> wordpress node iff the database is mysql -- a conclusion from TOSCA is
> that if this logic lives in a
> relationship/requirement type PhpDatabaseRequirement then we can reuse
> it, as opposed to
> baking in java+php+ruby+etc support into all database resources, or
> mysql+db2+oracle+etc
> support into all appserver resources)  [hope this is clear, please ping
> me if not]

This makes sense, but it seems to me pretty independent of the 
underlying infrastructure. Can you make a case for why this kind of 
thing should be baked in to OpenStack, rather than using tools like 
Puppet and Chef?

I'm going to take a stab at it... say that different cloud providers 
offer different DBaaS services, perhaps some based on MySQL and others 
on... I don't know... something different. Then, in order to spin up 
your stack on any cloud you have to configure your app to talk to the 
right DBaaS, and you don't want to modify your template for each one.

Am I close? It sounds interesting, but also doesn't seem like a high 
priority (not as high a priority as getting actually a DBaaS into 
OpenStack, for example).

>
> but we need to iterate on these and meanwhile we need to make progress!
> so:
>
> +1 to the small focussed separate blueprints Zane proposes

Cool, thanks for the input, it's very helpful.

cheers,
Zane.



More information about the OpenStack-dev mailing list