ansible剧本-template中的for循环和if的使用(1)
原创 Cloud研习社 Cloud研习社 2023-05-04 07:53 发表于山东 收录于合集 #一站式教程233个 #linux231个 #计算机206个 #云计算220个 #ansible35个教程每周二、四、六更新
for的使用
当我们需要创建如下类型的文件时
server {
listen 80
}
server{
listen 81
}
server{
listen 82
}
可以使用循环和模板结合的方式来实现,我们来看:
创建模板文件和playbook:
[root@m01 ansible]# cat for_http.conf.j2
{% for port in ports %}
server {
listen {{ port }}
}
{% endfor %}
[root@m01 ansible]# cat template_for.yaml
---
- hosts: com
remote_user: root
vars:
ports:
- 80
- 81
- 82
tasks:
- name: test for
template:
src: /root/ansible/for_http.conf.j2
dest: /data/for_http.conf
# 执行
[root@m01 ansible]# ansible-playbook template_for.yaml
到此我们就可以看看是不是得到了对应的结果:
[root@web01 data]# cat for_http.conf
server {
listen 80
}
server {
listen 81
}
server {
listen 82
}
确实是我们想要的结果,大功告成!
小结:
-
模板文件中的
ports
列表来源于yaml
文件中vars
定义的ports
变量 -
{% for语句 %}
和{% endfor %}
是成对出现,缺一不可. -
重复部分直接写到for循环中间,不同的部分用变量代替
-
for
循环中的变量需要使用{{ 变量名 }}
进阶:
上面的循环用到的列表还可以进行多层嵌套:
[root@m01 ansible]# cat template_for2.yaml
---
- hosts: com
remote_user: root
vars:
ports:
- web1:
ip: 10.0.0.14
port: 80
name: web01
- web2:
ip: 10.0.0.15
port: 81
name: web02
tasks:
- name: test for
template:
src: /root/ansible/for_http.conf.j2
dest: /data/for_http.conf
[root@m01 ansible]# cat for_http2.conf.j2
{% for ins in ports %}
server {
listen {{ ins.port }} # 通过点号.来引用最终相应的变量
servername {{ ins.name }}
}
{% endfor %}
雷哥开通了抖音(云计算雷哥)和微信视频号,求关注!!!和大家一起学习 技术!
推荐阅读
《一站式教程之集群架构》:
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
![图片](/i/l/?n=23&i=blog/2948384/202305/2948384-20230511154858659-41511812.png)