Currently Trove maintains a package to install for each datastore. This gets passed down to the guest in the prepare call.
It would be highly preferable to pass this into the guest's config file when Trove calls Nova with the initialization file to create. This is the same file which contains the guest's id.
If the package lived there as well as the datastore, the guest, on initialization, could check to see if the package was installed before it tried to query to see if the datastore was alive. Currently it will do this, and if the package was never installed report the status of SHUTDOWN, which represents an error and isn't true. The real status should be NEW. If the guest could know the datastore wasn't installed, it wouldn't erroneously try to do that.
This isn't currently a problem in Trove because of a race condition we've embraced in Trove's architecture. Basically, on start up we wait for some time before getting the guest status. Typically, the Trove guest agent will receive the "prepare" call before that, at which point it stops the periodic task from updating the guest status. Really, it's a hack- if the prepare call comes late, the guest agent will report the datastore is in shutdown state.
There are two way to solve this problem.
For nova - i agree, packages should exist in guest_info.
For heat - we should use software configuration.
This two ways should be taken into account when fixing it.