[openstack-dev] [heat] Stack preview

Zane Bitter zbitter at redhat.com
Wed Dec 11 21:46:39 UTC 2013


On 11/12/13 11:59, Randall Burt wrote:
> On Dec 10, 2013, at 3:46 PM, Zane Bitter <zbitter at redhat.com> wrote:
>
>> On 10/12/13 15:10, Randall Burt wrote:
>>> On Dec 10, 2013, at 1:27 PM, Zane Bitter <zbitter at redhat.com>
>>>   wrote:
>>>
>>>> On 10/12/13 12:46, Richard Lee wrote:
>>>>> Hey all,
>>>>>
>>>>> We're working on a blueprint
>>>>> <https://blueprints.launchpad.net/heat/+spec/preview-stack> that adds
>>>>> the ability to preview what a given template+parameters would create in
>>>>> terms of resources.  We think this would provide significant value for
>>>>> blueprint authors and for other heat users that want to see what
>>>>> someone's template would create before actually launching resources (and
>>>>> possibly having to pay for them).
>>>>
>>>> +1 for this use case.
>>>>
>>>> BTW AWS supports something similar, which we never bothered to implement in the compatibility API. You might want to do some research on that as a starting point:
>>>>
>>>> http://docs.aws.amazon.com/AWSCloudFormation/latest/APIReference/API_EstimateTemplateCost.html
>>>>
>>>> However the fact that we have pluggable resource types would make it very difficult for us to do cost calculations inside Heat (and, in fact, CloudFormation doesn't do that either, it just spits out a URL for their separate calculator) - e.g. it's very hard to know which resources will create, say, a Nova server unless they are all annotated in some way.
>>>>
>>>> Are you thinking the API will simply return a list of resource types and counts? e.g.:
>>>>
>>>> {
>>>>    "OS::Nova::Server": 2,
>>>>    "OS::Cinder::Volume": 1,
>>>>    "OS::Neutron::FloatingIP: 1
>>>> }
>>>>
>>>> If so, +1 for that implementation too. Don't forget that you will have to recurse through provider templates, which may not contain what they say on the tin.
>>>
>>> That sounds more than reasonable to me. I don't think we could begin to do any sort of meaningful "cost" calculation without having to mostly punt to the service provider anyway.
>>
>> Yeah, exactly.
>>
>> Although it occurs to me that we may want more detail than I originally thought... e.g. knowing the flavor of any Nova servers is probably quite important. Any ideas?
>>
>> The first thing that comes to mind is that we could annotate resource types with the list of parameters we want to group by. That would enable something like:
>>
>> {
>>   "OS::Nova::Server":
>>     [{config: {"flavor": m1.small}, count: 1},
>>      {config: {"flavor": m3.large}, count: 1}],
>>   "OS::Cinder::Volume":
>>     [{config: {"size": 10}, count: 1}],
>>   "OS::Neutron::FloatingIP":
>>     [{config: {}, count: 1}],
>> }
>>
>> - ZB
>
> Yeah, that makes a lot of sense from a "I want to calculate what this stack is going to cost me" use case. My only concern is that a given service provider may have different ideas as to what's "important" WRT a stack's value, but we could always extend this with something in the global environment similar to how we discussed resource support status in those reviews.

True in theory, though in practice I suspect this will mostly happen 
only when the operator is plugging in a different resource 
implementation anyway. Probably best to assume YAGNI for now, but keep 
this idea in mind and see if a use for it comes up.

> So it sounds to me like we just need to add a field to the property schema that says "this property is important to the preview call".

Sold. I updated the blueprint to depend on the 
property-schema-conversion bp I am currently working on, otherwise the 
conflicts will be epic :D

cheers,
Zane.



More information about the OpenStack-dev mailing list