[rudder-dev] Jinja2 templating

Alexis Mousset alexis.mousset at normation.com
Mon Sep 19 17:53:38 CEST 2016


Hello,

The previous email was sent to the wrong mailing-list, but as it is 
quite relevant here I will translate it.

The context is that we are adding Jinja2 templating support to 
ncf/Rudder (http://www.rudder-project.org/redmine/issues/9022).

The currently supported templating format, Mustache, can be used is two 
different ways in CFEngine:

  * Using the current context (which is used in ncf). In this case, the
    classes/variables are accessible using
      o {{vars.my_bundle.my_variable}} for variables
      o {{#classes.my_class}} for classes
  * Using a given json string as data, using the data directly like
    {{my_variable}} (and without the concept of class).

We need to decide how we want to map this in jinja2 templates. We can 
use the same data structure, with classes and vars, which should allow 
using the same
variable names as in Rudder mustache templates. However, this is a bit 
unusual for jinja2 templates, and could bother people using existing 
templates.

What do you think about this?

Concerning implementation, we can do it directly in CFEngine/ncf, using 
a python script to render the template, and a standard file edition. 
This would only require adding a new function to CFEngine to be able to 
output the data needed for templating (becase datastate()'s result is 
currently too big).

Another option is to integrate it into CFEngine by:

  * Adding a new template type
  * Generating the needed data
  * Making this template type use a python module, which would take the
    template and the json data from stdin, and would output the expanded
    string.

Does anyone see possible issues with these options, or another way to do it?

Alexis

On 09/19/2016 02:58 PM, Alexis Mousset wrote:
>
> Bonjour at Rudder,
>
> La version de base du templating jinja2 dans Rudder (fonction 
> datastate() qui écrit dans un fichier + script python qui prend en 
> argument un template et le json de datastate et l'écrit dans la 
> destination), j'ai un poc fonctionnel. Il reste du code ncf à écrire 
> pour faire le templating et le script python à reprendre (pour 
> l'instant j'utilise jinja2-cli mais on peut faire plus simple, et en 
> plus gérer le success/repaired/error), et éventuellement élaguer un 
> peu le json produit.
>
> Quelques questions concernant le format de templating jinja :
>
>   * Est-ce qu'on veut coller à ce qui se fait en mustache en CFEngine
>     ? C'est à dire utiliser dans les template des {%if
>     classes.maclasse %} et {{ vars.bundle.variable }} au lieu de {%if
>     maclasse} et {{ bundle.variable }}, avec la possibilité de passer
>     un json "verbatim" qui sera interprété tel quel ? Cela demande de
>     modifier des templates existants, mais c'est de toutes façons
>     probablement le cas si on veut utiliser le contexte et pas un json
>     en source de données. En plus ça collera au templating mustache et
>     passera peut-être mieux upstream, même si ça peut être un peu
>     déroutant pour un habitué au templating (hors CFEngine).
>
> De plus, une version propre pourrait consister en :
>
>   * un vrai type de template en CFEngine, au même titre que mustache
>   * un script python dans un module au sens CFEngine
>   * un passage de données au module sans utiliser un fichier mais
>     directement sur stdin/stdout
>   * un module qui ne ferait pas l'édition lui même, mais seulement le
>     templating, laissant l'édition, avec tous les problèmes de
>     droits/backup, etc. à  CFEngine
>
> Qu'est ce qui est prioritaire/indispensable de livrer pour la 
> prochaine mineure ? Est-ce qu'on commence par une version "dégradée" 
> en améliorant par la suite ? (en faisant attention à bien penser la 
> signature des generic methods).
>
>
> -- 
> ------------------------------------------------------------------------
> *Logo Normation Alexis MOUSSET*
> /System Engineer/
> Normation <http://www.normation.com>
> ------------------------------------------------------------------------
> *87, Rue de Turbigo, 75003 Paris, France*
> Phone: 	+33 (0)1 84 17 77 93
> ------------------------------------------------------------------------
>
>
>
> _______________________________________________
> rudder-dev mailing list
> rudder-dev at lists.rudder-project.org
> http://www.rudder-project.org/mailman/listinfo/rudder-dev

-- 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.rudder-project.org/pipermail/rudder-dev/attachments/20160919/a7a87b3c/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/gif
Size: 2118 bytes
Desc: not available
URL: <http://www.rudder-project.org/pipermail/rudder-dev/attachments/20160919/a7a87b3c/attachment.gif>


More information about the rudder-dev mailing list