Loading... ### 一、for循环 **语法** {% for i in LIST %} ... {% endfor %} **示例-1**   `for-1.yml`文件内容 --- - hosts:websrvs remote_user: root vars: ports: - 80 - 81 - 82 #定义了一个变量ports,三个值分别是80、81、82 tasks: - name: Create Config template: src=for-1.conf.j2 dest=/data/for-1.conf #拷贝模板文件到受控主机   `for-1.conf.j2`文件内容 {% for i in ports %} server { listen {{ i }}; } {% endfor %} #将会生成三段都这样的内容 结果: server { listen 80; } server { listen 81; } server { listen 82; } **示例-2**   `for-2.yml`文件内容 --- - hosts: websrvs remote_user: root vars: ports: - port: 80 - port: 81 - port: 82 #变量中定义了键值,port为键,80为值 tasks: - name: Create Config template: src=for-2.conf.j2 dest=/data/for-2.conf #拷贝模板文件到受控主机   `for-2.conf.j2`文件内容 {% for i in ports %} server { listen {{ i.port }}; } {% endfor%} #注意的是要引用对应的键值,需要加上键的名称,结果和上一种相同 **示例-3** 在示例-2上我们可以看到使用了键值对,下面进行扩展使用   `for-3.yml`文件内容 --- - hosts: wensrvs remote_user: root vars: server: - web1: port: 80 hostname: web1.beijixs.cn root: /data/website1 - web2: port: 81 hostname: web2.beijixs.cn root: /data/website2 - web3: port: 82 hostname: web3.beijixs.cn root: /data/website3 #变量server 定义了多个键值(字典) tasks: - name: Copy Config template: src=for-3.conf.j2 dest=/data/code/for-3.conf   `for-3.conf.j2`文件内容 {% for i in server %} server { listen {{ i.port }}; server_name {{ i.hostname }}; root {{ i.root }}; } {% endfor %} # {{ i.key }}这样指定键 最后运行的结果就是: server { listen 80; server_name web1.beijixs.cn; root /data/website1; } server { listen 81; server_name web2.beijixs.cn; root /data/website2; } server { listen 82; server_name web3.beijixs.cn; root /data/website3; } ------------ ### 二、if条件语句 **语法** {% if NAME is defined %} #如果变量"NAME"被定义,就执行以下语句块;否则不执行 ... {% endif %} **示例-1**  借助上面的`for-3`示例进行测试: `if-1.yml`文件内容: --- - hosts: wensrvs remote_user: root vars: server: - web1: port: 80 #hostname: web1.beijixs.cn #注释掉部分的hostname的键值 root: /data/website1 - web2: port: 81 #hostname: web2.beijixs.cn #注释掉部分的hostname的键值 root: /data/website2 - web3: port: 82 hostname: web3.beijixs.cn root: /data/website3 #变量server 定义了多个键值(字典) tasks: - name: Copy Config template: src=if-1.conf.j2 dest=/data/code/if-1.conf 配置文件`if-1.conf.j2`内容: {% for i in server %} server { listen {{ i.port }}; {% if i.hostname is defined %} #表示hostname被定义了就加入下面的语句 server_name {{ i.hostname }}; {% endif %} #if结束 root {{ i.root }}; } {% endfor %} 测试结果为: server { listen 80; root /data/website1; } server { listen 81; root /data/website2; } server { listen 82; root /data/website3; server_name web3.beijixs.cn; } 前两个server都没有`server_name`;因为他们对于的键没有被定义; ------------ <center>趁阳光正好</center> <center>趁微风不噪</center> <center>趁繁花还未开至荼蘼</center> <center>趁现在还年轻</center> <center>还可以走很长很长的路</center> <center>还能诉说很深很深的思念</center> ------------ <center>可是她不知道还想她!</center> 最后修改:2019 年 10 月 20 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏