Ansible使用角色的概念来更好地允许模块化代码并避免重复自己。
角色只是Ansible知道从何处加载vars文件,任务和处理程序的文件夹结构。一个例子可能看起来像这样:
apache/ ├── defaults │ └── main.yml ├── files │ ├── mod-pagespeed-stable_current_i386.deb │ ├── mod-pagespeed-stable_current_i386.rpm │ ├── mod-pagespeed-stable_current_amd64.deb | └── mod-pagespeed-stable_current_x86_64.rpm ├── tasks │ ├── debian.yml │ ├── main.yml │ └── redhat.yml ├── templates │ ├── httpd.conf.j2 │ └── sites-available │ └── virthualhost.conf.j2 └── vars ├── debian └── redhat
然后,您可以将该角色用于基本的剧本,如下所示:
- hosts: webservers roles: - apache
针对此剧本运行Ansible时,它将针对组中的所有主机并针对该主机webservers运行apache上面定义的角色,自动为该角色加载任何默认变量并运行中包含的所有任务tasks/main.yml。Ansible还知道要在角色友好位置查找某些类型的文件:
如果存在role / x / tasks / main.yml,则其中列出的任务将被添加到剧本中
如果存在role / x / handlers / main.yml,则其中列出的处理程序将添加到播放中
如果Roles / x / vars / main.yml存在,则其中列出的变量将添加到播放中
如果存在role / x / meta / main.yml,则其中列出的所有角色依赖项都将添加到角色列表中(1.3及更高版本)
(在角色中)任何副本,脚本,模板或包含任务都可以引用role / x / {文件,模板,任务} /(目录取决于任务)中的文件,而不必相对或绝对地进行路径