[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