|
1 | 1 | # 角色
|
| 2 | + |
| 3 | +角色让咱们,可以根据已知文件结构,自动加载相关变量、文件、任务、处理程序和其他 Ansible 工件。在咱们将咱们的内容,分组到角色后,咱们就可以轻松地重用他们,并与其他用户共享。 |
| 4 | + |
| 5 | +## 角色目录结构 |
| 6 | + |
| 7 | +Ansible 角色有个定义好的目录结构,有 7 个主要标准目录。在每个角色中,咱们必须至少包含其中一个目录。咱们可以省略角色未用到的所有目录。例如: |
| 8 | + |
| 9 | +```console |
| 10 | +# playbooks |
| 11 | +site.yml |
| 12 | +webservers.yml |
| 13 | +fooservers.yml |
| 14 | +``` |
| 15 | + |
| 16 | +```console |
| 17 | +roles/ |
| 18 | + common/ # 这个层次结构,表示某个 “角色” |
| 19 | + tasks/ # |
| 20 | + main.yml # <-- 如有必要,任务文件可包含一些较小文件 |
| 21 | + handlers/ # |
| 22 | + main.yml # <-- 处理程序文件 |
| 23 | + templates/ # <-- 用于使用模板资源的文件 |
| 24 | + ntp.conf.j2 # <------- 以 .j2 结尾的模板 |
| 25 | + files/ # |
| 26 | + bar.txt # <-- 用于 copy 模组资源的文件 |
| 27 | + foo.sh # <-- 用于 script 模组资源的脚本文件 |
| 28 | + vars/ # |
| 29 | + main.yml # <-- 与本角色相关的变量 |
| 30 | + defaults/ # |
| 31 | + main.yml # <-- 本角色的默认较低优先级变量 |
| 32 | + meta/ # |
| 33 | + main.yml # <-- 角色依赖项 |
| 34 | + library/ # 角色也可以包含定制模组 |
| 35 | + module_utils/ # 角色也可以包含定制的 module_utils |
| 36 | + lookup_plugins/ # 或其他插件类型,比如这种情形下的查找 |
| 37 | + |
| 38 | + webtier/ # 如同上面 "common" 这种同类型的结构,用于 webtier 角色 |
| 39 | + monitoring/ # "" |
| 40 | + fooapp/ # "" |
| 41 | +``` |
| 42 | + |
| 43 | +默认情况下,Ansible 会在大多数角色目录中,查找 `main.yml` 文件以获取相关内容(也包括 `main.yaml` 和 `main`): |
| 44 | + |
| 45 | +- `tasks/main.yml` - 角色提供给 play 用于执行的任务列表; |
| 46 | +- `handlers/main.yml` - 导入到父 play 中,供该角色,或 play 中的其他角色及任务使用的处理程序; |
| 47 | +- `defaults/main.yml` - 该角色提供的变量的低优先级值(更多信息请参阅 [“使用变量”](vars.md))。角色自身的默认值,将优先于其他角色的默认值,但任何/所有其他变量来源,都将优先于此; |
| 48 | +- `vars/main.yml` - 角色提供给 play 的高优先级变量(更多信息请参阅 [“使用变量”](vars.md)); |
| 49 | +- `files/stuff.txt` - 对角色及其子角色可用的一或多个文件; |
| 50 | +- `templates/something.j2` - 在角色或子角色中使用的模板; |
| 51 | +- `meta/main.yml` - 角色的元数据,包括角色的依赖项及可选的 Galaxy 元数据,如支持的平台等。对于以独立角色上传到 Galaxy,这是必须的,但在咱们的 play 中使用角色时,则不需要。 |
| 52 | + |
| 53 | + |
| 54 | +> **注意**: |
| 55 | +> |
| 56 | +> - 对于某个角色来说,上述任何文件都不是必需的。例如,咱们可以只提供 `files/something.txt` 或 `vars/for_import.yml`,其仍然是个有效的角色; |
| 57 | +> |
| 58 | +> - 在独立角色中,咱们也可以包含自定义模组和/或插件,例如 `library/my_module.py`,这些模组和/或插件可在该角色中使用(更多信息,请参阅 [在角色中嵌入模组和插件](#在角色中嵌入模组和插件)); |
| 59 | +> |
| 60 | +> - 所谓 “独立” 角色,指的是不属于某个专辑,而是作为可单独安装内容的角色; |
| 61 | +> |
| 62 | +> - `vars/` 和 `defaults/` 中的变量,会被导入到 play 的作用域中,除非咱们通过 `import_role`/`include_role` 中的 `public` 选项禁用他。 |
0 commit comments