AnsibleRoles
将 Ansible 视为一门编程语言(DSL)的现在,我们可以发现在 Ansible 文档中用 Roles 表示“模块”这个概念,用 import_tasks、include_tasks 等表示 import 这个概念
一个模块是一个业务功能的具体实现,当后期有修改的需求时只需要修改相关的模块即可,这正是 SOLID 原则中的 “SRP” (单一职责原则) 所提倡的。此外,模块化还支持像“搭积木”一样根据业务需求灵活地组织业务流程,这样就能最大限度地复用当前模块,这也符合编程原则中的 “DRY” (Don't Repeat Yourself)
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
这八个目录的作用是:
- tasks/main.yml:放置 role 执行任务时用到的文件。
- handlers/main.yml:处理程序,可以在 role 内部或外部使用
- library/my_module.py:模块,可以在 role 中使用(有关更多信息,请参见在rroles 中嵌入模块和插件)。
- defaults/main.yml:role 的默认变量(有关更多信息,请参阅使用变量)。这些变量具有所有可用变量中最低的优先级,并且可以被任何其他变量(包括库存变量)轻松覆盖。
- vars/main.yml:role 中的其他变量。(与 Ansible 模块中的 vars 作用一致,只不过这里的 vars 表示目录。)
- files/main.yml:role 部署时用到的文件。
- templates/main.yml:role 部署时用到的模板。与 Ansible 模块中的 templates 作用一致,只不过这里的 templates 表示目录。)
- meta/main.yml:role 使用到的元数据
Ansible 中已内置了一个命令行工具 ansible-galaxy 快速创建 role 的八大目录,减轻我们的工作量
Ansible Galaxy 也有一个在线社区 Galaxy[https://galaxy.ansible.com/home],上面有开发者分享的各种已经开发好的 roles。方便我们搜索现成的 role 下载,也可以上传自己开发的 role 到 Galaxy