Hacking
=======

Source Layout
-------------

The frontend command ngcpcfg is in _sbin/_. Each of its subcommands are
implemented in _scripts/_.

The _functions/_ directory contains a shell library to be used by the various
shell script commands. The _lib/_ directory contains Template library files
to be used (via the PROCESS directive) by the _*.tt2_ template files. And
the _helper/_ directory contains various helper tools used by the various
scripts and build system.

Templating
----------

Of very significant note is the 'tt2-process' helper, which performs most
of the work when processing the templates. This process is started only
once during the whole ngcpcfg run, and loads and validates all the YAML
files, and then processes each input/output pairs on an independent process
to parallelize the execution.

All the configuration loaded from the YAML files is flattened into a
dot-separated namespaced tree, which can be accessed directly by any
template file even if no other code has references to those configurations.

/////////////////////////////
// vim: ft=asciidoc tw=80 ai
/////////////////////////////
