Ansible-06-模板
Posted shark_西瓜甜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible-06-模板相关的知识,希望对你有一定的参考价值。
模板介绍
Ansible使用Jinja2模板来启用动态表达式和访问变量。
比如:
模板文件内容如下:
IP 地址: {{ ip }}
当定义 ip=192.168.122.10
这个变量时候,通过上面的模板文件可以产生出如下内容的新文件
IP 地址: 192.168.122.10
原来的模板文件不变。
在目标计算机上发送和执行任务之前,所有模板都在Ansible控制器上进行。
Jinja2 模板基本语法
Jinja模板只是一个文本文件,一般文件名使用 .j2
为后缀。模板包含变量和或表达式,在渲染模板时将其替换为值。
有几种分隔符。默认的Jinja分隔符配置如下:
{% ... %}
声明逻辑表达式{{ ... }}
用于将变量输出{# ... #}
用于模板的注释
JinJa2 逻辑控制
条件表达
{% if %}
...
{% elif %}
...
{% else %}
...
{% endif %}
Example
{# 如果定义了 idc 变量, 则输出 #}
{% if idc is defined %}
{{ idc }}
{% elif %}
没有定义
{% endif %}
循环控制
{% for %}
...
...
{% endfor %}
Example
{# 列举出 dbservers 这个 group 中的所有主机 #}
{% for host in groups['dbservers'] %}
{{ host }}
{% endfor %}
{#与Python 语法不通,模板中的循环内不能break或continue。但你可以在迭代中过滤序列来跳过某些项#}
{#打印dbservers 组中的所有主机,但是不打印1.1.1.1 这台主机#}
{% for host in groups['dbservers'] if host != "1.1.1.1" %}
{{host}}
{% endfor %}
Ansible 中使用
首先在管理节点创建模板文件
{# 我是注释 #}
这里输出了自定义变量的内容: {{ ip }}
循环输出目前执行任务的主机 {{ inventory_hostname }} 属于下列组:
{% for g in group_names %}
组名: {{ g }}
{% endfor %}
{% if n > 10 %}
这个值是 {{ n }}
{% endif %}
YAML 文档内容如下:
- name: 测试变量
hosts: slb
gather_facts: no
vars:
ip: 192.168.122.26
n: 20
tasks:
- name: 模板文件测试
template:
src: test.j2
dest: /tmp/test.conf
输出的文件内容如下
[root@master ~]# cat /tmp/test.conf
这里输出了自定义变量的内容: 192.168.122.26
循环输出目前执行任务的主机 192.168.122.26 属于下列组:
组名: nginx
组名: slb
这个值是 20
以上是关于Ansible-06-模板的主要内容,如果未能解决你的问题,请参考以下文章