Custom backends overview
A backend is a custom Puppet function that accepts a particular set of arguments and whose return value obeys a particular format. The function can do whatever is necessary to locate its data.
A backend function uses the modern Ruby functions API or the Puppet language. This means you can use different versions of a Hiera backend in different environments, and you can distribute Hiera backends in Puppet modules.
Different types of data have different performance characteristics. To
make sure Hiera performs well with every type of data
source, it supports three types of backends: data_hash
, lookup_key
,
and data_dig
.
data_hash
For data sources where it’s inexpensive, performance-wise, to read the entire
contents at one time, like simple files on disk. We suggest using the data_hash
backend type if:
The cache is alive for the duration of one compilation
The data is small
The data can be retrieved all at one time
Most of the data gets used
The data is static
For more information, see data_hash backends.
lookup_key
For data sources where looking up a key is relatively expensive, performance-wise,
like an HTTPS API. We suggest using the lookup_key
backend type if:
The data set is big, but only a small portion is used
The result can vary during the compilation
hiera-eyaml
backend is a lookup_key
function, because decryption tends to affect
performance; as a given node uses only a subset of the available secrets, it makes
sense to decrypt only on-demand.
For more information, see lookup_key backends.
data_dig
For data sources that can access arbitrary elements of hash or array values before passing anything back to Hiera, like a database.
For more information, see data_dig backends.
The RichDataKey and RichData types
To simplify backend function signatures, you can use two extra data type aliases:
RichDataKey
and RichData
. These are only available to backend functions called by Hiera; normal functions and Puppet code can not use them.
For more information, see custom Puppet functions, the modern Ruby functions API.