Extract data from resources to push into dependencies

Include the URL of your launchpad blueprint:


Problem description

We currently assume that every resource in a stack is loaded in memory concurrently, and we query it directly to determine its attribute values. This ‘pull’ system is inefficient in the convergence architechture compared to a ‘push’ system, since we hope to typically have only one resource loaded in memory at a time.

Proposed change

Analyse the template to determine which attributes of a resource are needed elsewhere. This is conceptually quite similar to the way we analyse the template looking for dependencies, by recursively examining a snippet of template and building up a list of dependent resources, except that instead of only a list of resources we’ll need to include the attribute names being referenced. In this way the code will be able to work with arbitrary template format plugins, although it will probably require a change to the Function plugin API. Return the result as a mapping from resource names to a list of referenced attribute names.

After a create or update event, we can use this list of attributes to query the resource for all of the information that will be needed subsequently from it.


Load a resource from the database whenever we need to retrieve one of its attributes.



Primary assignee:


Target Milestone for completion:

Work Items

  • Determine the list of attributes of a resource which are referenced in the template