wiki:Usage/TemplatingDocumentation

Version 33 (modified by sil, 12 years ago) (diff)

merged some other docs into this page, and did some refactoring/corrections

The Django Templating Language

CMT utilizes Django's Templating engine to process templates.

For a complete description of the Django templating engine, please read the documentation about the Django template language at the Django website.

CMT extra templatetags

For Cluster Management purposes, a few extra tags have been added. These extra tags can be used and loaded for your template with the tag:

{% load cmt_client %}

Without loading this, you cannot use any of the tags below.

Stringfilters

Stringfilters are functions that can pipe or translate a value into a different one. It's syntax is always through the use of a pipe:

  • 'string'|<stringfilter>
  • <variable>|<stringfilter>

arpanize

Converts an IP (range) to reversed DNS style ARPA notation

Usage

{{ <variable>|arpanize }}

Examples

{% assign broadcast = '192.168.1.0' %}
{{ broastcast|arpanize }}

Example output

1.168.192.in-addr.arpa

base_net

Converts an IP (range) to it's first 3 octets

Usage

{{ <variable>|base_net }}

Examples

{% assign broadcast = '192.168.1.0' %}
{{ broastcast|base_net }}

Example output

192.168.1

ip_last_digit

Converts an IP (range) to its last octet.

Usage

{{ <variable>|ip_last_digit }}

Examples

{% assign myip = '192.168.1.123' %}
{{ myip|ip_last_digit }}

Example output

123

Functions

Functions are called with the following syntax:

{% <function> <arguments> %}

assign

Concatenates any combination of (space separated) variables and strings and assigns it to a new variable.

Usage

{% assign <varname> = <str|var> [[str|var] [str|var] [..]]

Examples

{% assign newvar = <space seperated list of strings/vars> %}
{% assign myabbreviation = 'bla' %}
{% assign file_name = '/var/tmp/rack-' rack.label '.txt' %}
{% assign elite = 'foo' host.label 'bar' %}

getbasenets

Get list of basenets in a network (name).

Usage

{% getbasenets <network name> as <listname> %}

Examples

Let's assume "MY ADMIN" network is: 192.168.10.0/23

{% getbasenets 'MY ADMIN' as network_basenets %}

{% for bnet in network_basenets %}
{{ bnet }}
{% endfor %}

Example output

192.168.10
192.168.11

getracks

Get list of all racks in a cluster.

Usage

{% getracks <cluster> as <listname> %}

Examples

Let's assume the cluster with name "TINA" consists of 3 racks with the labels: r1, r5, r6

{% getracks 'TINA' as tina_racks %}

{% for r in tina_racks %}
{{ r.label }}
{% endfor %}

Example output

r1
r5
r6

use

Compilation function to define Querysets for later use.

Usage

{% use <entity> with <attribute>=<value> as <variable> %}

Examples

{% use hardwareunit with 'cluster__name=Gina' as gina_hosts %}
{% use network with 'name__contains=gina' as gina_networks %}
{% use network with 'name=gina admin' as net_gina_admin %}
{% use interface with 'network__name=gina admin' as ifaces_gina_admin %}

Sections

Sections are used to indicate the tag will only affect the section contained therein. Sections always have a opening and closing tag and can contain arguments:

{% <section> [arguments] %}
{% <endsection> %}

epilogue

Commands to be executed after (epi) the template processing is completed. This can be useful to restart a daemon for example, with a new configuration made by processing the template:

Section start

{% epilogue %}

Section end

{% endepilogue %}

Examples

{% epilogue %} 
/etc/init.d/named reload
touch /var/run/named.pid
{% endepilogue %}

noblanklines

Prevents any blanklines occurring in the resulting output (file).

Section start

{% noblanklines %}

Section end

{% endnoblanklines %}

Example's

{% noblanklines %} 
{{ host.label }}

{{ host.rack }}
{% endnoblanklines %}

store

Specifies where to store the resulting output (after template processing).

Section start

{% store <filename> %}

Where <filename> can be:

  • variable
  • 'Quoted string'

Section end

{% endstore %}

Examples

{% store '/path/to/file' %}
{{ host.label }}
{% endstore %}
{% store variable %} 
{{ host.label }}
{% endstore %}