[openstack-dev] [Heat] Long-term, how do we make heat image/flavor name agnostic?

Clint Byrum clint at fewbar.com
Thu Jul 18 16:55:06 UTC 2013

Excerpts from Adrian Otto's message of 2013-07-18 06:31:10 -0700:
> Robert,
> On Jul 18, 2013, at 3:08 AM, Robert Collins <robertc at robertcollins.net>
>  wrote:
> > On 18 July 2013 08:53, Gabriel Hurley <Gabriel.Hurley at nebula.com> wrote:
> >> I spent a bunch of time working with and understanding Heat in H2, and I find myself with one overarching question which I wonder if anyone's thought about or even answered already...
> >> 
> >> At present, the CloudFormation template format is the first-class means of doing things in Heat. CloudFormation was created for Amazon, and Amazon has this massive convenience of having a (more or less) static list of images and flavors that they control. Therefore in CloudFormation everything is specified by a unique, specific name.
> >> 
> >> OpenStack doesn't have this luxury. We have as many image and flavor names as we have deployments. Now, there are simple answers...
> >> 
> >>  1. Name everything the way Amazon does, or
> >>  2. Alter your templates.
> >> 
> >> But personally, I don't like either of these options. I think in the long term we win at platform/ecosystem by making it possible to take a template off the internet and having it work on *any* OpenStack cloud.
> >> 
> >> To get there, we need a system that chooses images based on metadata (platform, architecture, distro) and flavors based on actual minimum requirements.
> > 
> > We do? Why do we?
> One of our goals with the HOT approach (rather than CloudFormation templates) is to make templates portable between different OpenStack clouds. We'd like to get it to a point where whether you are using a public or private cloud, or different public clouds, that you just use the same template and it just works. This is what we refer to when we talk about making orchestration Declarative. We want it to be declarative for the things that will differ between clouds. It can have aspects that are Imperative for the things that we can expect to remain the same between clouds. This way we get to a point whee we can have a thriving ecosystem of templates that don't need to be fooled with in order to use them.
> Note that we don't expect to necessarily get there in the first iteration, but I think this vision is important so we know where to head through our refinements.
> > Note that your characterisation of Amazon is in my experience
> > inaccurate - a very common pattern there is uploading custom images
> > (such as those that we build for OpenStack using diskimage-builder).
> > An OpenStack cloud should let users upload their own images to glance
> > in the same way, and then you have 3): use golden images, name your
> > personal images the same in every cloud you burst to; done.
> This amounts to roughly the same amount of fooling/adjusting as you would need to do if you just changed the image name in the template file. We want to eliminate this entire category of fooling around. If you have orchestration, and a CM system integrated together, the reliance on custom images diminishes considerably.

Custom images have their place. They have some distinct advantages over
systems that are routinely and repeatedly customized in-service. To focus
on custom or vanilla images solely is a mistake. While you might get
"easy" portability because you start from a common base, you are also
getting more entropy, and more susceptibility to external failures.

There is no one right answer, but there is definitely data to prove both
approaches have merit.

> > Also note that the presence of golden images makes a 'just fit the
> > broad characteristics' a more complex problem than perhaps you think
> > it is... You need some additional 'is it the right built image' aspect
> > too.
> > 
> > So I would tackle this using 4) provide a mapping layer that bridges
> > template to cloud and lets you translate:
> > - image names
> > - flavors
> > - keypair
> > - perhaps volumes and other things
> Mappings is one of the high level concepts in CFN that I think can be completely eliminated with auto-discovery.

You say potato...

Mapping and auto discovery are largely the same thing. Robert is saying
he's going to write an app template which says it wants a provider for
"my-custom-image".  You are saying you will write a template that says
it wants "ubuntu" and "puppet". We need both use cases to be simple and
straight forward.

More information about the OpenStack-dev mailing list