You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pyentrypoint/docs/templates.rst

115 lines
3.0 KiB
ReStructuredText

Templates
=========
You can generate configuration for your service with jinga2 template.
Here is an example for an hypothetical ssh config file:
.. code:: jinja
host server:
hostname {{links.ssh.ip}}
port {{links.ssh.port}}
Templates will be replaced with ip address and port of the identified
link. All links can be accessed from ``links.all``, this is a tuple of
links you can iterate on it.
.. code:: jinja
{% for link in links.all %}
host {{link.names[0]}}
hostname {{link.ip}}
port {{links.port}}
{% endfor %}
If you change the option ``single`` to ``false`` in the
``entrypoint-config.yml``, the identified link ``ssh`` will become a
tuple of links. You must iterate on it in the ``jinja`` template.
.. code:: jinja
{% for link in links.ssh %}
host {{link.names[0]}}
hostname {{link.ip}}
port {{links.port}}
{% endfor %}
Accessing environment in template.
.. code:: jinja
{% if 'SSHKEY in env' %}
{{env['SSHKEY']}}
{% endfor %}
Accessible objects
~~~~~~~~~~~~~~~~~~
You have 4 available objects in your templates.
- ``config``
- ``links``
- ``containers``
- ``environ``
config
^^^^^^
``Config`` reflect the config file. You can retrieve any setup in this
object.
(see ``config.py``)
links
^^^^^
**Not supported when using docker network or docker-compose v2.**
``Links`` handles ``Link`` objects. You can identify links using
wildcard patterns in the configuration file.
``link`` is related to one physical link (one ip and one port).
``link`` handles the following attributes: - ``ip`` - link ip - ``port``
- link port (integer) - ``environ`` - related container environment -
``protocol`` - link protocol (``tcp`` or ``udp``) - ``uri`` - link URI
(example: ``tcp://10.0.0.3:80``) - ``names`` - tuple of related
container names
containers
^^^^^^^^^^
**Not supported when using docker network or docker-compose v2.**
``containers`` handles a tuple of ``container`` object.
``container`` handles the following attributes: - ``ip`` - container ip
- ``environ`` - container environment - ``names`` - List of containers
names - Names are sorted by length, but container ID will be the last
element. - ``id`` - Hexadecimal container ID (if available, empty string
else) - ``links`` - Tuple of ``link`` objects related to this container
environ
^^^^^^^
``environ`` is the environment of the container (os.environ).
``env`` is an alias to ``environ``.
``yaml`` and ``json``
^^^^^^^^^^^^^^^^^^^^^
``yaml`` and ``json`` objects are respectively an import of `PyYAML <http://pyyaml.org/>` and `json <https://docs.python.org/2/library/json.html> modules.
They are useful to load and dump serialized data from environment.
.. code:: jinja
# Here yaml is present in SETUP_YAML environment variable
{% set data = yaml.load(env['SETUP_YAML'])%}
{{data['param']}}
# Here json is present in SETUP_JSON environment variable
{% set data = json.loads(env['SETUP_JSON'])%}
{{data['param']}}