40,.Ansible角色(roles)
Ansible角色(roles)
Ansible 角色是一种组织 Playbook 的高级方式。它将变量、任务、文件、模板和处理器等组件,按照特定的目录结构进行分组,使其成为一个独立的、可复用的单元
使用角色主要有以下好处:
- 模块化与可复用性:将配置分解为多个角色,每个角色功能单一。可以在多个 Playbook 或项目中重复使用同一个角色。
- 代码组织与清晰度:复杂的 Playbook 会变得很长,难以维护。角色将代码分割到不同的文件中,结构清晰,易于管理。
- 协作与共享:角色可以独立版本化,并通过 Ansible Galaxy(一个官方的角色共享平台)进行分享和获取。
- 易于测试:可以单独测试每个角色的功能
当使用 ansible-galaxy role init my_role
命令创建一个新角色时,它会生成以下标准结构
目录/文件 | 关键特性 | 使用建议 |
---|---|---|
tasks/main.yml | 核心,必须存在 | 保持逻辑清晰,可拆分为子文件。 |
defaults/main.yml | 优先级最低的变量 | 定义所有用户可配置的变量,提供合理的默认值。 |
vars/main.yml | 优先级高的变量 | 仅用于角色内部固定值。 |
handlers/main.yml | 由 notify 触发 | 通常用于服务重启、重载。 |
templates/ | 动态配置文件 | 使用 .j2 后缀,模板内变量名与 defaults/ 或 vars/ 中定义的一致。 |
files/ | 静态文件 | 存放无需动态变化的文件。 |
meta/main.yml | 定义依赖和元数据 | 准确声明依赖和支持的平台,便于分享。 |
README.md | 角色的使用手册 | 查看角色使用方法。 |
1.自定义角色
[student@master roles]$ ansible-galaxy init apache
[student@master roles]$ cd apache/
可以在vars里面给角色定义变量,在vars里面定义的变量>在defaults里面定义的变量
可以在tasks里面写任务
[student@master apache]$ vim tasks/main.yml
---
# tasks file for apache
- name: de1yum:name: httpdstate: present
编写一个剧本使用角色
[student@master ansible]$ vim http.yml
---
- name: httpd installhosts: node1roles: - apache
执行顺序
- pre_tasks 总是最先运行。
- roles: 列表中的角色是作为一个整体,在 pre_tasks 之后、tasks 之前运行的。
- tasks 中的任务在角色之后运行。
- post_tasks 总是最后运行。
- Handlers 在整个 Play 的末尾被统一触发执行,与它们在
pre_tasks
,roles
,tasks
还是post_tasks
中被通知(notify
)无关
系统角色
系统角色是由红帽(Red Hat) 发起并维护的一个官方、高质量的 Ansible 角色集合,旨在对 Linux 系统的基础组件进行标准化和自动化配置。
[student@master ansible]$ sudo yum install rhel-system-roles -y
角色名称 | 主要功能 | 关键特性 |
---|---|---|
rhel-system-roles.kdump | 配置 kdump 崩溃恢复服务 | 设置内核崩溃转储、配置内存保留大小、指定转储文件位置 |
rhel-system-roles.network | 配置网络接口 | 管理以太网、桥接、绑定、VLAN 等接口;替代传统 network-scripts |
rhel-system-roles.selinux | 配置和管理 SELinux | 设置 SELinux 模式( enforcing/permissive/disabled )、管理文件上下文、端口标签和布尔值 |
rhel-system-roles.timesync | 配置时钟同步 | 支持 Chrony、NTP 和 Systemd-timesyncd;配置 NTP 服务器和参数 |
rhel-system-roles.postfix | 配置邮件传输代理 | 使用 Postfix 服务配置主机为 MTA;设置域、网络和安全性选项 |
rhel-system-roles.firewall | 配置主机防火墙 | 管理 firewalld zones/services/ports;支持丰富规则和端口转发 |
rhel-system-roles.tuned | 系统性能调优 | 配置 Tuned 性能配置文件;自定义调优设置以适应不同工作负载 |
ansible-galaxy安装角色
默认情况下,角色安装到用户的roles_path下的第一个可写目录中。根据ansible设置的默认roles_path,角色通常安装到用户的~/.ansible/roles目录。默认的roles_path可能会被当前的ansible配置文件或环境变量ANSIBLE_ROLES_PATH覆盖,这将影响ansible-galaxy的行为
可以使用-p DIRECTORY选项,指定具体的目录来安装角色。
1.把需要安装的角色的路径写在roles目录下的playbook中
[student@master roles]$ vim t1.yml
---
- name: haproxysrc: http://ansible.example.com/roles/haproxy.tar- name: myphpsrc: http://ansible.example.com/roles/myphp.tar
其中src指定角色的来源远程http://,本地用file://
2.使用ansible-galaxy安装角色
[student@master ansible]$ ansible-galaxy install -r roles/t1.yml -p roles/
3.查看roles下安装好的角色
[student@master ansible]$ cd roles/
[student@master roles]$ ls
通过ansible-galaxy list列出本地角色
可以使用ansible-galaxy remove子命令本地删除角色