ansible的roles(角色)功能
1.角色的相关概念
角色集合,实际是相当于多种不同的tasks的文件的集中存储在某个目录下,该目录就是角色集合就是roles(默认是/etc/ansible/roles/目录,可通过ansible的配置文件来调整默认的角色目录),在该目录下有很多子目录,就是一个一个的不同角色目录,而在每个角色目录下就会有分别有具体的功能的实现
如:/etc/ansible/roles/ 此为角色集合,目录下有自定义的各个子目录,如
mysql/子目录,也就是mysql角色
httpd/子目录,也就是httpd角色
nginx/子目录,也就是nginx角色
2.角色的目录结构
每个角色的定义,以特定的层级目录结构进行组织:以mysql/子目录(mysql角色)为例:(每种角色的目录结构都一样)
files/子目录
存放由copy或script等模块调用的文件
templates/子目录
存放template模块查找所需要的模板文件的目录,如之前示例中用于给被管理主机提供nginx的模板配置文件
tasks/子目录
任务存放的目录,至少应该包含一个main.yml的文件,文件中定义了需要执行的任务清单,该目录下也可以有
其他.yml文件,但是需要在main.yml文件中用include指令将其他.yml文件包含进来
handlers/子目录
存放相关触发执行器的目录,至少应该包含一个main.yml的文件,文件中定义了触发器的任务清单,该目录下
也可以有其他.yml文件,但是需要在main.yml文件中用include指令将其他.yml文件包含进来
vars/子目录
变量存放的目录,至少应该包含一个main.yml的文件,文件中定义了相关的变量及其值,该目录下也可以有其
他.yml文件,但是需要在main.yml文件中用include指令将其他.yml文件包含进来
meta/
用于存放此角色元数据,至少应该包含一个main.yml的文件,文件中定义当前角色的特殊设定及其依赖关系,
该目录下也可以有其他.yml文件,但是需要在main.yml文件中用include指令将其他.yml文件包含进来
default/
默认变量存放的目录,至少应该包含一个main.yml的文件,文件中定义了此角色使用的默认变量,该目录下也
可以有其他.yml文件,但是需要在main.yml文件中用include指令将其他.yml文件包含进来
3.在playbook中调用角色方法一
在某些主机上完成某些任务:此时就需要调用相关的角色
如:(相关示例详见实战部分)
- hosts: webserver
remote_user: root
roles:
- mysql
- httpd
可以只调用一个角色,也可以调用多个角色
ansible会到角色集合的目录(默认/etc/ansible/roles/ 目录)去找 roles:调用的角色,也就是在角色集合 目录下找同名的子目录,将子目录下的所有代码运行一遍
4.在playbook中调用角色方法二
如:(相关示例详见实战部分)
- hosts: webserver
remote_user: root
roles:
- {role: mysql,var1: value1,var2: value2,...}
- {role: httpd,var3: value3,var4: value4,...}
表示调用两个角色,(role键用于指定调用的角色名称,后续的key/value用于传递变量给角色,每个键后面对应的值之间有空格) 一个角色是mysql,向该角色传递变量var1,其值为value1,... 调用另一个角色httpd,向该角色传递变量var3,其值为value3,...
5.在playbook中调用角色时,实现条件判断
如:(相关示例详见实战部分)
- hosts: webserver
remote_user: root
roles:
- {role: mysql,var1: value1,when:ansible_distribution_major_version=='7'}
- {role: httpd,when:ansible_distribution_major_version=='6'}
表示当ansible_distribution_major_version的值为7时,调用mysql角色,传递变量var1,变量值为value1 表示当ansible_distribution_major_version的值为6时,调用httpd角色