WDYT? Other ideas?
+1 on using an empty set of hardware profile to indicate "does not use profiles", and on using auto-generated Hardware objects, in response.
It would be nice if the (random?) ID of those object somehow corresponded to the request to make it clear that these are really "ephemeral" objects, i.e. requesting the same specs twice would give you two Hardware objects with likely the same values, but with different IDs.
The part I'm not yet sure about is the 'fixed*' thing. From what I understand, a Template intends to semantically represent the minimal required specification - you want something back that (ideally) gives you exactly that, or, if not available, a little bit more...but not waaaaaaaay more.
From that perspective, it doesn't seem so bad to me to say that if you ask for a template with minRam = X and minCores = Y, some providers can give you *exactly that* back - good for you! At any rate, it seems less potentially confusing to me than to take a concept (the Template) that generally talks about *minimum requirements* and add two arguments that suddenly talk about *exact specs*.
The question that would remain is whether, for a profile-less provider, it would be "wrong" to return a Hardware instance that has more than the minRam and minCores requested. Irrespective of the answer, I would assume that the providers could simply be implemented to ensure this didn't happen - i.e. if the user asks for minRam = X and minCores = Y and the provider allows you to provide exactly that, then you should do it.
Regards ap