ansible剧本-template中的for循环和if的使用(1)
ansible剧本-template中的for循环和if的使用(1)
教程每周二、四、六更新
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研习社」,带你从零开始掌握云计算技术!
Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
公众号
收录于合集 #一站式教程
233个上一篇ansible剧本-循环下一篇ansible剧本-template中的for循环和if的使用(2)