0 一些前言
- jinja2在线测试工具:https://cryptic-cliffs-32040.herokuapp.com
1. 变量装载
{{ foo }}
- 一般使用role中的default/main.yml中定义的值
- 在ansible中role中main.yml优先级最低
- 一般从awx中所附带的变量优先级最高
1.1 变量赋值
{% set name='xx' %}
- 之后就可以在页面文件中使用name这个变量。在解释性语言中,变量的类型时运行时确定的,因此,这里的变量可以赋任何类型的值
1.2 局部变量
{% with foo = 42 %}
{{ foo }}
{% endwith %}
- 可以使用
with
语句来创建一个内部的作用域,将set
语句放在其中,这样创建的变量只在with
代码块中才有效
1.3 变量类型转换
{% set node = "prometheus-"+ loop.index | string %}
- 使用set关键字对相关变量进行赋值,with语句可与其连用
- 在set内不允许使用
{{ foo }}
进行赋值 - int类型的需要使用管道符进行转换
1.4 过滤器
过滤器 | 内容 |
---|
safe | 渲染时值不转义 |
capitialize | 把值的首字母转换成大写,其他子母转换为小写 |
lower | 把值转换成小写形式 |
upper | 把值转换成大写形式 |
title | 把值中每个单词的首字母都转换成大写 |
trim | 把值的首尾空格去掉 |
striptags | 渲染之前把值中所有的HTML标签都删掉 |
join | 拼接多个值为字符串 |
replace | 替换字符串的值 |
round | 默认对数字进行四舍五入,也可以用参数进行控制 |
int | 把值转换成整型 |
2. 控制与循环装载
{% %}
2.1 if/else/elif/endif
{% if foo | bool %}
...
{% elif not foo1 %}
...
{% else %}
...
{% endif %}
2.2 for/endfor
2.2.1 遍历list
{% for user in users %}
{{ user.username | e }}
{% endfor %}
2.2.2 遍历字典
{% for key, value in my_dict.iteritems() %}
{{ key|e }}
{{ value|e }}
{% endfor %}
2.2.3 for循环中常用的内置变量
变量 | 内容 |
---|
loop.index | 循环迭代计数(从1开始) |
loop.index0 | 循环迭代计数(从0开始) |
loop.revindex | 循环迭代倒序计数(从len开始,到1结束) |
loop.revindex0 | 循环迭代倒序计数(从len-1开始,到0结束) |
loop.first | 是否为循环的第一个元素 |
loop.last | 是否为循环的最后一个元素 |
loop.length | 循环序列中元素的个数 |
loop.cycle | 在给定的序列中轮循 |
loop.depth | 当前循环在递归中的层级(从1开始) |
loop.depth0 | 当前循环在递归中的层级(从0开始) |
3. 注释装载
{# #}
4. 累加操作
{% for server in range(msgqueue_replicas) %}rocketmq-{{ loop.index }}-ns:{{ name_srv_port }};{% endfor %}
- msgqueue_replicas为int数字
- loop.index作为本次循环的序列(从1开始)
5. 赋值操作
{% set node = "prometheus-"+ loop.index | string %}
- 使用set关键字对相关变量进行赋值,with语句可与其连用
- 在set内不允许使用
{{ foo }}
进行赋值 - int类型的需要使用管道符进行转换