上面几章我们已经学会了变量的使用,以及如何书写变量,但是,同学们有没有想过,简单的任务我们的确可以命令行、hosts文件或playbook中简单定义,但是这样同样也提高了耦合性,不利于更多工作或者更多同事的协同办公呢?
而且,其实有时候我们自己定义的变量并不能随着具体的配置来进行动态调整(而template可以),并且变量我们随便定义,也不易于我们管理,那么有没有ansible有没有一个统一的向shell中function一样定义变量的位置呢?其实是有的,那就是template;那么接下来我们开始规范我们的变量,一起来了解ansible中template的使用吧
模板templates简介
文本文件,嵌套有脚本(使用模板编程语言编写)
jinja2语言,使用字面量,有下面形式
字符串:使用单引号或者双引号
数字:整数、浮点数
列表:[item1,item2,....]
元组:[item1,item2,....]
字典:{key1:value1,key2:value2,.....}
布尔型:true/falue
算数运算:+,-,*,/,//,%,**
比较操作:==,!=,>,>=,<,<= #### '//':整除的意思,除完了取整 '%':取模,也叫作取余 '**':幂次方,取指数
逻辑运算:and,or,not
流表达式:For If When
templates功能
templates功能:根据模板文件动态生成对应的配置文件
templates文件必须存放于templates目录下,且命名为.j2结尾
并且template不能用于ad-hoc的命令行模式
yaml/yml文件需和templates目录平级,目录结构如下:
.
├── temnginx.yml
└── templates
└── nginx.conf.j2
示例:我们做一个nginx的测试
---
- hosts: ceshi
remote_user: root
tasks:
- name: install package
yum: name=nginx
- name: copy template
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
- name: start service
service: name=nginx state=started enabled=yes
将nginx的配置文件放在我们的templates/nginx.conf.j2里面,并以.j2结尾
ansible-playbook temnginx.yml
[root@ceshi ansible]# ansible -i hosts ceshi -m shell -a "ps -aux|grep nginx" ###我们看进程都已经起来了
10.0.194.83 | CHANGED | rc=0 >>
root 27410 0.0 0.0 120760 2228 ? Ss 16:29 0:00 nginx: master process /usr/sbin/nginx
nginx 27411 0.0 0.