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 %}

 


 

雷哥开通了抖音(云计算雷哥)和微信视频号,求关注!!!和大家一起学习 技术!

图片

推荐阅读

 

《一站式教程之集群架构》:

 

ansible剧本-变量-常用参数

ansible剧本-变量的引用与定义

ansible剧本-变量的定义

ansible剧本-变量的定义(2)

ansible - 模板template

ansible剧本-when

 

 

 

看完本文有收获?请分享给更多人

推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!

Cloud研习社
为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等
188篇原创内容

图片


图片

 

Cloud研习社
收录于合集 #一站式教程
 233
上一篇ansible剧本-循环下一篇ansible剧本-template中的for循环和if的使用(2)
阅读 62
 
posted @ 2023-05-11 15:48  往事已成昨天  阅读(315)  评论(0编辑  收藏  举报