变量优先使用顺序:
命令行变量--->play中的vars_files--->play中的vars变量-->host_vars中定义的变量--->group_vars/组--->group_vars/all
用vars.yml存储变量
vi vars.yml
vars1: httpd
vars2: vsftpd

剧本
--
- hosts: nginx
remote_user: root
vars_files:
- vars.yml
tasks:
- name: install package
yum: name={{ vars1 }}
- name: create file
file: name=/data/{{ vars2 }}.log state=touch
~

测试

直接在剧本里定义变量

执行

group_vars/web_server定义变量
group_vars/xxxx,这个xxxx必须与host inventory里,即hosts文件中的组名一样xxxx
注意:系统提供了特殊的组,all,也就说在group_vars目录下创建一个all文件,定义变量对所有的主机都生效,就好比我们平常如果只想测试所以被控端是否有哪些跌机了,可以用这个命令
ansible all -m ping 这个all就是hosts文件中所有组的所有主机加一起,即是同一个all



语法检查

因为这两台host我关机了,所以才会这样


注释掉group_vars/web_server里的var变量,因为group_vars/xxxx的优先级高于host_vars/xxxx。所以不注释掉是没法实现的

我们可以看到,还是可以的,语法上没错误

命令行指定,级别最高 加-e

group_vars/all这个我在这里就不展示了,因为这个级别最低。
playbook的语法格式如下: - hosts: webservers 是定义的主机组 也就是playbook中的 play 角色的意思 注意":" 冒号后面也必须价格空格不然就报错
tasks: 注意 他前面是有2个空格的, ansible 是用空格来区分规格的, 记住不能使用tab按键