Ansible Jinjia2 模板

本文详细介绍了Ansible如何利用Jinja2模板引擎管理配置文件,包括Jinja2的基本概念、与Ansible的关系、使用方法及注意事项。通过实例展示了如何在模板中进行变量替换、条件判断和循环,并提供了多个项目的应用示例。
摘要由CSDN通过智能技术生成

Ansible Jinjia2 模板

Jinjia2模板介绍

什么是jinja2模板

jinja2是Python的全功能模板引擎

Jinja2与Ansible啥关系

Ansible通常会使用jinja2模板来修改被管理主机的配置文件等…在saltstack中同样会使用到jinja2 如果在100台主机上安装nginx,每台nginx的端口都不一样,如何解决?

Ansible如何使用Jinja2

使用Ansible的jinja2模板也就是使用template模块,该模块和copy模块一样,都是讲文件复制到远端主机上去,但是区别在于,template模块可以获取到文件中的变量,而copy则是原封不动的把文件内容复制过去。之前我们在推送rsync的backup脚本时,想把脚本中的变量名改成主机名,如果使用copy模块则推送过去的就是{ { ansible_fqdn }},不变,如果使用template,则会变成对应的主机名。

注意事项

  • Ansible允许jinja2模板中使用条件判断和循环,但是不允许在playbook中使用。
  • 只能在template模块要推送的文件中使用Jinja2语法
  • 使用Jinja2要注意,配置文件中是否有特殊符号

下面的写法是错误的:

[root@web02 ~]# vim a.yml
{% if ansible_hostname == 'db01' %}
	yum:
	  name: mariadb-serveer
	  state: present
{% else %}
    aaaa
{% endif %}

Jinja2语法

# 变量调用语法
{
  { 变量名 }}: 调用变量,输出变量的值
playbook使用template模块

#判断语法
{% if 条件 %}
      xxx
{% else %}
       aaa
{% endif %}


# for语法
{% for n in 变量 %}
      xxx
{% endfor %}


# 注释
{# 这里是注释内容 #}

ansible中jinja2 规范

所欲的jinja2模板文件要以 j2 结尾

简单的jinja2使用

准备motd.j2文件

[root@m01 ~]# vim motd.j2
本机内存: {
   {
    ansible_memtotal_mb }}
剩余内存: {
   {
    ansible_memfree_mb }}
本机外网: {
   {
    ansible_default_ipv4.address }}
本机内网: {
   {
    ansible_eth1.ipv4.address }}
本机名字: {
   {
    ansible_hostname }}vim 

准备playbook文件

[root@m01 ~]# vim a.yml
- hosts: all
  tasks:
    - name: motd
      template:
        src: ./motd.j2
        dest: /etc/motd

执行playbook

[root@m01 ~]# ansible-playbook a.yml 

PLAY [all] *******************************************************************************

TASK [Gathering Facts] *******************************************************************
ok: [db01]
ok: [nfs]
ok: [backup]
ok: [web02]
ok: [web01]

TASK [motd] ******************************************************************************
changed: [nfs]
changed: [web02]
changed: [db01]
changed: [web01]
changed: [backup]

PLAY RECAP *******************************************************************************
backup                     : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
db01                       : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
nfs                        : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web01                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
web02                      : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Jinja2管理nginx配置文件

upstream {
   {
    server_name }} {
   
{
   % for num in range(1,11) %}
	server 172.16.1.{
   {
    num }};
{
   % endfor %}
}

server {
   
	listen 80;
	server_name {
   {
    server_name }};
	
	location / {
   
		proxy_pass http://{
   {
    server_name }};
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值