四、ansible的templates

4、ansible的templates

jinja2模板:该模板文件里面可以包含普通字符串,也可以使用变量,部署该文件时需要使用template模块,文件里面的变量会对应转换成变量所对应的值。

bash 复制代码
https://jinja.palletsprojects.com/en/3.1.x/ #官方文档
http://docs.jinkan.org/docs/jinja2/ #中文文档

jinjia2中的条件判断:

bash 复制代码
#写法1
{% if EXPR %}
...
{% endif %}

#写法2
{% if EXPR %}
...
{% else %}
...
{% endif %}
#写法3
{% if EXPR %}
...
{% elif EXPR %}
...
{% else %}
...
{% endif %}

jinjia2中的for循环:

bash 复制代码
{% for i in EXPR %}
...
{% endfor %}

示例1:

bash 复制代码
[devops@master chap03]$ cat test1.j2
{{ username }}
{{ ansible_facts.default_ipv4.address }}
[devops@master chap03]$ cat template.yml
---
- name: test template
  hosts: master
  vars:
    - username: test1
  tasks:
    - name: test template
      template:
        src: ./test1.j2
        dest: /tmp/test1.txt
[devops@master chap03]$ ansible-playbook  template.yml
[devops@master chap03]$ cat /tmp/test1.txt
test1
192.168.168.10

示例2:

bash 复制代码
[devops@master chap03]$ cat test2.j2
{% if var1 != 'hello' %}
var1 is hi
{% endif %}

{% if var2 > 3 %}
var2 > 3
{% elif var2 == 3 %}
var2 == 3
{% else %}
var2 < 3
{% endif %}

{% for i in range(1,4) %}
{{ i }}  {{ i+10 }}
{% endfor %}

{% for i in var3 %}
{{ i.ip }} : {{ i.port }}
{% endfor %}
[devops@master chap03]$ cat template2.yml
---
- name: test template
  hosts: master
  vars:
    var1: hi
    var2: 4
    var3:
      - ip: 192.168.168.10
        port: 22
      - ip: 192.168.168.21
        port: 80
  tasks:
    - template:
        src: ./test2.j2
        dest: /tmp/template.yml
[devops@master chap03]$ ansible-playbook  template2.yml
[devops@master chap03]$ cat  /tmp/template.yml
var1 is hi

var2 > 3

1  11
2  12
3  13

192.168.168.10 : 22
192.168.168.21 : 80

示例3:

bash 复制代码
[devops@master chap03]$ cat hosts.j2
{% for host in groups.all %}
{{ hostvars[host]['ansible_facts']['fqdn'] }} {{ hostvars[host]['ansible_facts']['default_ipv4']['address'] }}
{% endfor %}
[devops@master chap03]$ cat hosts.yml
---
- name: test template hosts
  hosts: all
  tasks:
    - name: template hosts
      template:
        src: ./hosts.j2
        dest: /tmp/hosts
[devops@master chap03]$ ansible-playbook  hosts.yml
[devops@master chap03]$ ansible all -a 'cat /tmp/hosts'
master | CHANGED | rc=0 >>
node02 192.168.168.22
master 192.168.168.10
node01 192.168.168.21
node02 | CHANGED | rc=0 >>
node02 192.168.168.22
master 192.168.168.10
node01 192.168.168.21
node01 | CHANGED | rc=0 >>
node02 192.168.168.22
master 192.168.168.10
node01 192.168.168.21
相关推荐
百度Geek说13 分钟前
QCon上海2026:百度 SRE Agent 规模化落地实践解读
运维·自动化运维
叼烟扛炮19 分钟前
Linux 学习笔记(五十八):IO 多路复用封神——epoll 底层原理揭秘
linux·运维·服务器·网络·笔记·学习·php
叼烟扛炮28 分钟前
Linux 学习笔记(五十一):数据链路层与 ARP 协议——局域网寻址与黑客骗局
linux·网络·网络协议·php·tcpdump
星恒随风1 小时前
Linux网络编程:彻底理解IO多路复用select!从fd_set位图、读写就绪到手写TCP多客户端字典服务器
linux·服务器·网络
陈布衣2 小时前
MySQL(1)_MySQL 5.7.21 Linux 安装笔记
linux·笔记·mysql
分布式存储与RustFS3 小时前
给 RustFS 桶加一层内存缓存:用 Alluxio 让热数据少跑一遍网络
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
Oiiouui4 小时前
linux服务器部署Logto后端与对应前端的实现
linux·服务器·前端·后端
ITKEY_4 小时前
用 Emacs Dired 实现 em:退出文件管理器后,让终端自动切换目录
linux·服务器·emacs
wt95274 小时前
VMware 虚拟机磁盘扩容实战文档(Ubuntu 22.04 + LVM)
linux·后端
就像楞次定律4 小时前
【Linux 学习记之二】C++ 构建体系与底层链接机制的深度透视(2)
linux·后端