
A template is just a special type of compute resource and there's nothing to say we're not going to end up with template network and storage resources as well - I really don't think a new noun is justified and would prefer to keep things as simple as possible... 3 nouns is about right.
Sam
I'm still warping^H^H^H^H^H wrapping my head around RESTful thinking as opposed to OO, so please bear with me. If both "AMI"s (template-computes) and "instances" (actual-computes) are "compute" resources, then how would the client distinguish between the two? One reason to distinguish between them is to separately classify them into different areas of the UI (for example the "Images" vs. Instances" tabs of ElasticFox) based on the verbs that can be done to them. On second thought, I may have answered my own question: we can distinguish template-computes from actual-computes by looking at the verb links that are provided on them. Actual-computes will have verbs such as "start","stop", "pause", "resume", "delete" (depending on their current state); while template-computes will only have "start" and "delete", and their state will never change (not sure, but it seems to me that a template's state will not change - you can only create a new resource from a template or delete the template altogether). Then again, if an infrastructure provider does not allow actual-computes to be "paused" or "resumed" but does allow "start" and "stop", then we cannot distinguish between actual-computes that are stopped (having verbs "start" and "delete") and between template-computes (having verbs "start" and "delete"). So then the question remains: how do we reliably distinguish between template-computes and actual-computes? Or template-XXs and actual-XXs ?