role类似于salt-stack里面的state,state有一定的组织架构。而role则是ansible中playbook的目录组织架构,如果把所有内容都写到playbooks里,可能会导致playbooks臃肿,难读。而模块化之后,有效解决了上述的问题。目录结构示例:[root@web02 web]# tree.├── group_vars│ └── salt├── hosts├── roles│ ├── mysql│ │ ├── handlers│ │ │ └── main.yml│ │ ├── tasks│ │ │ ├── configure.yml│ │ │ └── main.yml│ │ ├── templates│ │ │ └── my.cnf│ │ └── vars│ │ └── main.yml│ └── webserver│ ├── files│ │ └── index.html│ ├── handlers│ │ └── main.yml│ ├── meta│ │ └── main.yml│ ├── tasks│ │ └── main.yml│ └── templates│ └── httpd.conf└── site.yml第一级目录下有俩文件夹,俩文件group_vars这里面存的组变量,定义规则等同于/etc/ansible/group_vars里面的组变量group_vars下的salt文件里的变量只对salt组有效,如果文件名为all,则对所有主机组有效,而相对于roles这里面的变量则是全局的。web]# cat group_vars/salthttp_port: 80
hosts存放主机及组信息:web]# cat hosts[salt]192.168.137.130
roles下有两个role,分别为mysql,webservermysql和webserver目录下可以有下面这些目录:files:存文件的,文件放此目录,ansible默认就会到这个目录去找文件,对应task里面的copy模块tasks:显然是存放tasks的handlers:存放handlerstemplates:存放模板,对应task里面的模块templatevars:这里面定义的变量,只对当前role有作用meta:定义role和role直接的依赖关系。
查看webserver目录下文件内容:webserver]# for dir in {‘tasks’,’handlers’,’meta’};do echo -e “