Docs/Ansible/角色(Role).md
2022-10-18 16:59:37 +08:00

52 lines
No EOL
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

角色role用于层次化结构化组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单的说roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。
目录结构如下:
```
site.yml
webservers.yml
fooservers.yml
roles/
common/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
webservers/
files/
templates/
tasks/
handlers/
vars/
defaults/
meta/
```
yml文件用于定义此角色用到的各handler在handler中使用include包含的其他的handler文件也应该位于此目录中
files目录存放由copy或script等模块调用的文件
templates目录templates模块会自动在此目录中寻找Jinja2模板文件
tasks目录至少应该包含一个名为main.yml的文件其定义了此角色的任务列表此文件可以使用include包含其他的位于此目录中的task文件
handlers目录此目录中应当包含一个main
vars目录应当包含一个main.yml文件用于定义此角色用到的变量
meta目录应当包含一个main.yml文件用于定义此角色的特殊设定及其依赖关系ansible 1.3及其以后的版本才支持
default目录为当前角色设定默认变量时使用此目录应当包含一个main.yml文件
那么一个playbook就可以这样写
```
---
- hosts: webservers
roles:
- common
- webservers
```
这个 playbook 为一个角色 x 指定了如下的行为:
如果 roles/x/tasks/main.yml 存在, 其中列出的 tasks 将被添加到 play 中
如果roles/x/handlers/main.yml 存在, 其中列出的 handlers 将被添加到 play 中
如果roles/x/vars/main.yml 存在, 其中列出的 variables 将被添加到 play 中
如果roles/x/meta/main.yml 存在, 其中列出的 “角色依赖” 将被添加到 roles 列表中 (1.3 andlater)
所有 copy tasks 可以引用 roles/x/files/ 中的文件,不需要指明文件的路径。
所有 scripttasks 可以引用 roles/x/files/ 中的脚本,不需要指明文件的路径。
所有 template tasks 可以引用roles/x/templates/ 中的文件,不需要指明文件的路径。
所有 include tasks 可以引用roles/x/tasks/ 中的文件,不需要指明文件的路径。