Lately, I've been spending increasing amounts of time working with TripleO heat templates, and have noticed some recurring aspects of my workflow whilst debugging them which I thought may be worth sharing.
For the uninitiated, TripleO is an OpenStack deployment project, which aims to deploy and manage OpenStack using standard OpenStack API's. In practice, this means using Nova and Ironic for baremetal node provisioning, and Heat to orchestrate the deployment and configuration of the nodes.
The TripleO heat templates, unlike most of the heat examples, are pretty complex. They make extensive use of many "advanced" features, such as nested stacks, using provider resources via the environment and also many software config resources.
This makes TripleO a fairly daunting target to those wishing to debug and modify and/or debug the TripleO templates.
Fortunately TripleO templates, although large, have many repeated patterns, and good levels of abstraction and modularity. Combined with some recently added heat interfaces, it becomes rapidly less daunting, as I will demonstrate in the worked example below: