Jinja2

Jinja2 je moderní šablonovací systém. Mezi hlavní výhody patří přehlednost, rozšířitelnost (pomocí filtrů a pluginů), snadnost použití, vysoká rychlost, možnost použití if a for syntaxí. Používá kódování Unicode.

Balíček pro jinja2 se dá instalovat přímo z repozitářů jmenuje se j2-cli:

apt-get install j2-cli

Konfigurák s hodnotami pojmenenujeme variables.yml:

server:
    address: "172.16.1.1"
    port: "8080"

document_root: "/var/www/data"
distribution_release: "bullseye"

Konfigurák s hodnotami pro Nginx, které se budou templatovat nginx_config.j2:

server {
  listen 80;
  server_name {{ server.address }};

  root {{ document_root }};
  index index.htm;

  location / {
    return           301 https://$host$request_uri;
  }

  location ~ \.php$ {
         include snippets/fastcgi-php.conf;
         # With php-fpm (or other unix sockets):
         fastcgi_pass unix:/run/php/php{%- if distribution_release == "buster" -%}7.4{%- elif distribution_release == "bullseye" -%}8.2{%- endif -%}.sock;
         # With php-cgi (or other tcp sockets):
         fastcgi_pass {{server.address}}:{{server.port}};
  }

}

Do template nginx_config.j2 vložíme hodnoty ze souboru variables.yml:

j2 -f yaml nginx_config.j2 variables.yml > nginx_config.conf

Výsledkem bude konfigurák nginx_config.conf:

server {
  listen 80;
  server_name 172.16.1.1;

  root /var/www/data;
  index index.htm;

  location / {
    return           301 https://$host$request_uri;
  }

  location ~ \.php$ {
         include snippets/fastcgi-php.conf;
         # With php-fpm (or other unix sockets):
         fastcgi_pass unix:/run/php/php8.2.sock;
         # With php-cgi (or other tcp sockets):
         fastcgi_pass 172.16.1.1:8080;
  }
}

Jinja2 se dá použít také s bashovými proměnými:

$ vim /tmp/person.xml
    <data><name>{{ name }}</name><age>{{ age }}</age></data>

$ export name=Andrew
$ export age=31

$ j2 /tmp/person.xml
    <data><name>Andrew</name><age>31</age></data>