ansible的roles


roles 不管是Ansible还是saltstack,我在写一键部署的时候,都不可能把所有的步骤全部写入到一个'剧本'文件当中,我们肯定需要把不同的工作模块,拆分开来,解耦,那么说到解耦,我们就需要用到 roles 官方推荐,因为 roles 的目录结构层次更加清晰。
例如:我们之前推荐大家写一个 base.yml 里面写所有基础优化的项目,其实把所有东西摞进去也是很鸡肋的,不如我们把这些功能全部拆分开,谁需要使用,就调用即可。
建议:每个roles最好只使用一个tasks这样方便我们去调用,能够很好的做到解耦。

目录结构

group_vars/ 			# 主机群组的变量
	group1.yml 			# here we assign variables to particular groups
	group2.yml
host_vars/ 				# 单台主机的变了
	hostname1.yml 		# here we assign variables to particular systems
	hostname2.yml
library/ 				# if any custom modules, put them here (optional)
module_utils/ 			# if any custom module_utils to support modules, put
them here (optional)
filter_plugins/ 		# if any custom filter plugins, put them here
(optional)
site.yml 				# master playbook # 入口文件 回去调用roles一些目录
webservers.yml			 # playbook for webserver tier
- 部署web的
dbservers.yml 			# playbook for dbserver tier
- 部署数据库的
roles/
	common/    # 项目的名称
		tasks/ ## 所有的任务全部写在tasks
		main.yml ## 写到main.yml
		warranted
		handlers/ ## 触发器
		main.yml # <-- handlers file
		templates/ # <-- # 里面放带有变量的配置文件
             ntp.conf.j2 
    	files/ ## 放不带变量的配置文件
			bar.txt # <-- 
			foo.sh # <-- 
		vars/ ## 变量
			main.yml # <-- variables associated with this role
		defaults/ ## 优先级比较低的变量
			main.yml # <-- default lower priority variables for this role
		meta/ ## 依赖 wordpress nginx php mariadb
			main.yml # <-- role dependencies
		library/ # roles can also include custom modules
		module_utils/ # roles can also include custom module_utils
		lookup_plugins/ # or other types of plugins, like lookup in this case
	webtier/ # same kind of structure as "common" was above, donefor the webtier role
	monitoring/ # ""
	fooapp/ # ""