Jinja loading utils to enable a more powerful backend for jinja templates
For Jinja usage information see Understanding Jinja.
Render the template_file, passing the functions and grains into the Jinja rendering system.
Return type: | string |
---|
salt.utils.jinja.
SerializerExtension
(environment)
Yaml and Json manipulation.
Format filters
Allows jsonifying or yamlifying any data structure. For example, this dataset:
data = { 'foo': True, 'bar': 42, 'baz': [1, 2, 3], 'qux': 2.0 }
yaml = {{ data|yaml }} json = {{ data|json }} python = {{ data|python }} xml = {{ {'root_node': data}|xml }}
will be rendered as:
yaml = {bar: 42, baz: [1, 2, 3], foo: true, qux: 2.0} json = {"baz": [1, 2, 3], "foo": true, "bar": 42, "qux": 2.0} python = {'bar': 42, 'baz': [1, 2, 3], 'foo': True, 'qux': 2.0} xml = """<<?xml version="1.0" ?> <root_node bar="42" foo="True" qux="2.0"> <baz>1</baz> <baz>2</baz> <baz>3</baz> </root_node>"""
The yaml filter takes an optional flow_style parameter to control the default-flow-style parameter of the YAML dumper.
{{ data|yaml(False) }}
will be rendered as:
bar: 42 baz: - 1 - 2 - 3 foo: true qux: 2.0
Load filters
Strings and variables can be deserialized with load_yaml and load_json tags and filters. It allows one to manipulate data directly in templates, easily:
{%- set yaml_src = "{foo: it works}"|load_yaml %} {%- set json_src = "{'bar': 'for real'}"|load_json %} Dude, {{ yaml_src.foo }} {{ json_src.bar }}!
will be rendered as:
Dude, it works for real!
Load tags
Salt implements load_yaml
and load_json
tags. They work like the import tag, except that the document is also deserialized.
Syntaxes are {% load_yaml as [VARIABLE] %}[YOUR DATA]{% endload %}
and {% load_json as [VARIABLE] %}[YOUR DATA]{% endload %}
For example:
{% load_yaml as yaml_src %} foo: it works {% endload %} {% load_json as json_src %} { "bar": "for real" } {% endload %} Dude, {{ yaml_src.foo }} {{ json_src.bar }}!
will be rendered as:
Dude, it works for real!
Import tags
External files can be imported and made available as a Jinja variable.
{% import_yaml "myfile.yml" as myfile %} {% import_json "defaults.json" as defaults %} {% import_text "completeworksofshakespeare.txt" as poems %}
Catalog
import_*
and load_*
tags will automatically expose their target variable to import. This feature makes catalog of data to handle.
for example:
# doc1.sls {% load_yaml as var1 %} foo: it works {% endload %} {% load_yaml as var2 %} bar: for real {% endload %}
# doc2.sls {% from "doc1.sls" import var1, var2 as local2 %} {{ var1.foo }} {{ local2.bar }}
** Escape Filters **
New in version 2017.7.0.
Allows escaping of strings so they can be interpreted literally by another function.
For example:
regex_escape = {{ 'https://example.com?foo=bar%20baz' | regex_escape }}
will be rendered as:
regex_escape = https\:\/\/example\.com\?foo\=bar\%20baz
** Set Theory Filters **
New in version 2017.7.0.
Performs set math using Jinja filters.
For example:
unique = {{ ['foo', 'foo', 'bar'] | unique }}
will be rendered as:
unique = ['foo', 'bar']
© 2019 SaltStack.
Licensed under the Apache License, Version 2.0.
https://docs.saltstack.com/en/latest/ref/renderers/all/salt.renderers.jinja.html