Added Configuration Template Developer Docs

Add some basic documentation about the datastore configuration template
files. Includes a brief description of how the templates are located,
details of the context exposed to the templates and some basic examples.

Change-Id: Iff43ea2c7912f749cb14eb89fd495eafb67e6bd9
This commit is contained in:
Adrian Jarvis
2025-05-09 17:02:32 +12:00
parent 7ddb01cc86
commit db34bcb21f
2 changed files with 112 additions and 0 deletions

View File

@@ -0,0 +1,111 @@
=======================================
Trove Datastore Configuration Templates
=======================================
In order to support the injecting of dynamic configuration into database
configuration files Trove uses the Jinja2 templating engine.
A general guide to writing Jinja2 templates can be found at
https://jinja.palletsprojects.com/en/stable/templates/
Location and Searching
======================
The templates used to configure database instances are located under
`trove/templates` with a directory for each database support by Trove.
The Datastore Version is used to determine which set of templates are used. A
set of locations are search in a priority order with the most specific location
that exists used. The locations search are based upon the Datastore Version
name, version and manager as well as the Datastore name.
For example consider the following layout under `trove/templates`:
.. code-block::
mysql/
mysql-test/
config.template
5.5/
config.template
config.template
If the Datastore Version for `mysql` has the name `mysql-test` then the template
file `mysql/mysql-test/config.template` will be used.
If the Datastore Version for `mysql` has the name `5.5.62` then Trove will look
for `mysql/5.5.62`, then `mysql/5.5`, `mysql/5` and finally `mysql/`. Based on
the above layout Trove will use `mysql/5.5/config.template`.
Variables available in the templates
====================================
The following variables are exposed to the templates and may be useful in
making the template adapt to different database sizes or versions.
datastore
~~~~~~~~~
Contains details of the Datastore and Datastore Version and has the following
attributes:
``name``
The Datastore name, for example "mysql", "postgresql" or "MySQL". It is
used in locating the template to used as described above.
The value is set by the operators so may be difficult to rely on in a
template.
``manager``
The Datastore Version manager - this is the type of the datastore and
corresponds to the name used in the Trove code for example "mysql" or
"postgresql". See trove/common/constants.py for a list of managers.
Like `name` it is used in locating templates files.
``version``
This variable is the value of the Datastore Version name. Usually it will
be the release version of the database such as "5.7.30", but can be a string
like "mysql-test". The value is configured by the operator.
``semantic_version``
A parsed version from the Datastore Version version or name. Trove will first
attempt to parse the Datastore Version version, then the Datastore Version name.
The `datastore.semantic_version` makes the components of a version string
available as attributes `major`, `minor`, `patch`.
In the following example the major version of a PostgreSQL database is used to
select between different configuration options for retaining the binary logs
.. code-block::
{% if datastore.semantic_version.major >= 13 %}
wal_keep_size = 80 # in MB = wal_keep_segments x wal_keep_size
{% else %}
wal_keep_segments = 5 # in logfile segments; 0 disables
{% endif %}
flavor
~~~~~~
The flavor variable is a dictionary of the resource sizes of the compute server
that will be hosting the database. It includes details on the number of VCPUs
and the maximum amount of RAM.
The following example configures the thread cache size for a mysql database
based on the maximum RAM of the server:
.. code-block::
thread_cache_size = {{ (4 * flavor['ram']/512)|int }}
server_id
~~~~~~~~~
A unique ID based on a hash of the instance ID and it is useful to use in the
configuration of a replication set to distinguish between the primary and
secondary instance.
The following example is from a MySQL configuration template:
.. code-block::
server_id = {{server_id}}

View File

@@ -13,4 +13,5 @@ functionality, the following resources are provided.
design
functional_test
testing
datastore-configuration-templates
release-notes