【ansible】roles的介绍
1.已经有了playbook,为什么ansible还要使用角色?
Ansible 角色(Role)的出现,是为解决复杂部署场景中 Playbook 代码复用难、结构混乱、维护及协作成本高的问题。它通过标准化目录结构,将部署逻辑拆解为文件、任务、变量、模板、处理程序等独立模块,实现一次编写、多处调用,使 Playbook 从零散脚本升级为可维护、可复用的基础设施代码,是大规模集群与复杂服务部署管理的必需品,否则会陷入重复开发、逻辑混乱的困境 。
2.简单说说角色的目录结构。
- default:存放角色变量的默认值。
- files:专门存放无需变量替换的静态文件。
- handlers:包含角色的处理程序定义。
- meta:存放与角色相关的信息,关于角色的描述、依赖关系等信息。
- tasks:包含角色的任务定义。
- templates:存放Jinja2模板。
- vars:存放定义的角色变量。
- tests:存放角色测试相关文件。
3.Ansible 通过模块导入角色时, ansible.builtin.import_role 和 ansible.builtin.include_role 模块的核心区别?
- ansible.builtin.import_role :静态导入,解析 Playbook 时加载角色任务;
- ansible.builtin.include_role :动态导入,运行时才加载角色。
4.Ansible中,roles和tasks的执行顺序是怎样的?
roles 部分的角色会严格在 tasks
部分的任务之前执行。
5.特殊任务 pre_tasks 和 post_tasks 的执行顺序是怎样的?
pre_tasks 会在 roles 部分中的任何角色之前运行,post_tasks 在 play 的 tasks 以及 play 的 tasks 通知的任何处理程序之后运行。
6.Ansible中,角色的创建流程是怎样的?
- 创建角色目录结构:除了使用linux命令创建目录,还可以使用命令:ansible-galaxy init rolename。
- 定义角色内容。
- 在playbook中使用角色。
7.角色依赖项是什么?如何定义?
角色依赖项即就是角色可以将其他角色作为依赖项包含在内。依赖关系一般在 meta/main.yaml 文件中定义。如:一个定义文档服务器的角色doc_server
可能依赖其他的角色
# meta/main.yml
dependencies:- role: apache # 依赖 apache 角色port: 8080 # 传递参数给 apache 角色- role: postgres # 依赖 postgres 角色dbname: serverlistadmin_user: felix
当 Playbook 调用 doc_server
角色时,Ansible 会自动先执行 apache
→ 再执行 postgres
→ 最后执行 doc_server
。