Thanks for all your tips and advice so far. Here's something else I encountered that I'm not sure how to resolve.
I'm building my playbooks such that they can bootstrap a system mostly from scratch for even high-level tasks. For instance, my playbook which sets up a VCS repository expects that I'm running LightTPD, so it calls out to a generic playbook to ensure that Lighty is installed. Similarly, it expects that CGI is configured, so it calls another playbook to configure Lighty for CGI and to upload a configuration that adds index.cgi as an index file type.
Because these Lighty configs are generic to a number of playbooks, I have them in an include directory. So, something like:
include/lighttpd.yml: Makes sure the lighttpd package is installed.
include/lighttpd_cgi.yml: Configures Lighty for CGI.
include/lighttpd_cgi/cgi-tweaks.conf: Configuration for local, CGI-specific tweaks. Copied to server via lighttpd_cgi.yml.
fossil/root_project.yml: Sets up a Fossil project on the root of a specified domain, includes include/lighttpd.yml and include/lighttpd_cgi.yml.
The problem is that, when lighttpd_cgi.yml tries to copy lighttpd_cgi/cgi-tweaks.conf, the file isn't found. It uses a path relative to itself.
I suppose I can refer to this file as if all playbooks will be in some subdirectory, so ../include/lighttpd_cgi/cgi-tweaks.conf. But include directives seem to work relative to the file that includes them. I wonder if it might make sense for paths relative to src to originate at the directory of the file that calls them? Then I can reference lighttpd_cgi.yml from anywhere and it will always find lighttpd_cgi/cgi-tweaks.conf, without having to unwind the current directory first.
Is this currently doable?
Thanks.