irpas技术客

ansible自动化运维之template模块<八>_神慕蔡蔡_ansible template模块

网络投稿 976

文章目录 1.认识j2模板2.模板中变量,表达式,注释的表示方法3.引用变量不需要输入{{}}的场景:4.循环for的使用5.for循环与if判断组合使用6.j2模板内,变量的真假7.j2模板显示次数8.变量过滤器

1.认识j2模板

j2模板:用于模板文件,也可以引用playbook中的变量

2.模板中变量,表达式,注释的表示方法 {# COMMENT #} #注释 {{ EXPR }} #输出表达式,变量的结果 {% EXPR %} #循环等 {{ ansible_managed }} #一个变量,一遍引用模板文件时的开头标识 3.引用变量不需要输入{{}}的场景: 1.引用debug模块var参数时 2.playbook用when判断时 3.引用{% %}注释等功能时 4.循环for的使用

j2模板使用for语句来执行

#配置play如下 [root@clq ~]# cat test.yml --- - hosts: 192.168.136.234 gather_facts: no vars_files: - vars.yml tasks: - name: "test is for" template: src: hosts.j2 dest: /etc/hosts #配置变量如下 [root@clq ~]# cat vars.yml info: - oppo - vovi - app - apache #配置j2模板 [root@clq ~]# cat hosts.j2 {% for msg in info%} #for:循环语句,info:文件变量名,msg:类似item列表变量从而取值 {{ msg }} #输出打印的结果 {% endfor %} #endfor结束语句 #受管主机上查看 [root@localhost ~]# cat /etc/hosts oppo vovi app apache 5.for循环与if判断组合使用

所有的配置与上面for循环配置文件一样,只针对j2模板进行修改

俩种方式: 第一种: cat host.j2 {% for msg in info if msg == "oppo" %} {{ msg }} {% endfor %} 第二种: cat host.j2 {% for msg in info %} {% if msg != "oppo" %} {{ msg }} {% endif %} #if结束语句 {% endfor %} #for结束语句 6.j2模板内,变量的真假

当判断的变量为true时才生效

cat host.j2 {% if "" %} haha #if判断内容为无,即为False,haha内容不会被发送输出 {% endif %} {% if " " %} #if后只要有东西,即使是空格即为True,内容就会被发送至对端并显示使用 haha {% endif %} 7.j2模板显示次数

针对{{msg}}输出表达式进行进行相应操作

cat host.j2 {% for msg in info %} {% if msg != "oppo" %} count {{ loop.index }} of info is {{ msg }} {% endif %} {% endfor %} #运行,在收管主机看效果 [root@localhost ~]# cat /etc/hosts count 2 of info is vovi count 3 of info is app count 4 of info is apache 8.变量过滤器

列表:

abcd 进行转换后:

[‘a’, ‘b’, ‘c’, ‘d’]

实例: [root@clq ~]# cat vars.yml #yaml格式 info: - oppo - vovi - app - apache [root@clq ~]# cat test.yml --- #play - hosts: 192.168.136.234 gather_facts: no vars_files: - vars.yml tasks: - name: "test is for" template: src: hosts.j2 dest: /etc/hosts #j2模板 cat hosts.j2 {% for msg info info %} {{ info }} {% endif %} #运行play [root@master ~]# ansible-playbook test.yml #运行后受管主机查看 [root@localhost ~]# cat /etc/hosts ['oppo', 'vovi', 'app', 'apache']


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #ansible #template模块 #comment