云计算百科
云计算领域专业知识百科平台

Ansible 自动化运维实战系列(五):Roles详解

Ansible 自动化运维实战系列(五):Roles详解

  • 📚 系列导航
  • 一:概述
  • 二:初始化
    • 1)创建目录
    • 2)初始化
  • 三:目录结构
  • 四:案例
    • 1)初始化 `nfs-server role`
    • 2)编写 `role`
    • 3)编写 `nfs-server.yml` 剧本文件
    • 4)执行 `nfs-server.yml` 剧本文件
  • 总结

📚 系列导航

👉 第一篇:概述、部署与命令 👉 第二篇:主机清单详解 👉 第三篇:常用模块详解 👉 第四篇:Playbook详解 👉 第五篇:Roles详解 👉 第六篇:Valut详解 👉 第七篇:Galaxy详解


一:概述

roles 是一种用来模块化组织 Playbook 的机制,就像是把一堆散落的任务(tasks)、变量(vars)、模板(templates)等文件,按照固定的目录结构打包成一个“功能模块”。

如果 Playbook 里的内容越来越多,所有任务、模板、变量都写在一个文件里,会变得杂乱且难以维护。 roles 帮你:

  • 按功能拆分(比如 webserver、database、common)
  • 提高复用性(同一个 role 可在不同项目直接使用)
  • 方便团队协作(不同人负责不同 role)

二:初始化

1)创建目录

[root@m01 ansible]# mkdir -p playbook/roles

2)初始化

  • 自动创建

    ansible-galaxy init <role>:官方提供的脚手架

    [root@m01 ansible]# cd playbook/roles/
    [root@m01 roles]# ansible-galaxy init nfs-server
    – Role nfs-server was created successfully

  • 手动创建

    [root@m01 module]# cd playbook/roles/
    [root@m01 roles]# mkdir -p rsync-server/{tasks,files,templates,handlers}


三:目录结构

roles/
└─ myrole/
├── defaults # 默认变量目录(优先级最低,可被外部覆盖)
│ └── main.yml # – 定义默认值,比如端口、路径等
├── files # 存放要直接复制到目标主机的静态文件
├── handlers # 存放处理器(handlers),用于 notify 触发的任务
│ └── main.yml # – 例如“重启 nginx”这种操作
├── meta # 存放角色的元信息
│ └── main.yml # – 依赖的其他 roles、作者信息等
├── README.md # 角色说明文档(变量说明、使用方法等)
├── tasks # 主要任务目录(核心执行逻辑)
│ └── main.yml # – 必须存在,定义具体的任务步骤
├── templates # 存放 Jinja2 模板(可渲染变量的配置文件)
├── tests # 角色测试目录
│ ├── inventory # – 测试用的主机清单
│ └── test.yml # – 测试用的 playbook
└── vars # 固定变量目录(优先级高,不易被覆盖)
└── main.yml # – 定义不希望被轻易改动的变量


四:案例

通过 roles 实现 nfs-server 在指定组的机器部署

1)初始化 nfs-server role

[root@m01 roles]# ansible-galaxy init nfs-server

2)编写 role

  • 编写 /roles/nfs-server/tasks/install.yml 剧本

    [root@m01 roles]# vim nfs-server/tasks/install.yml
    – name: "01 install nfs-utils rpcbind"
    yum:
    name: "nfs-utils,rpcbind"
    state: "present"
    tags:
    "01 install"

  • 编写 /roles/nfs-server/tasks/config.yml 剧本

    [root@m01 roles]# vim nfs-server/tasks/config.yml
    – name: "02 vim file"
    lineinfile:
    path: "/etc/exports"
    line: "/backup-nfs/ 172.16.1.0/24(rw,all_squash)"
    create: true
    tags:
    "02 vim file"

    – name: "03 create dir"
    file:
    path: "/backup-nfs"
    owner: "nfsnobody"
    group: "nfsnobody"
    state: "directory"
    tags:
    "03 create dir"

  • 编写 /roles/nfs-server/tasks/start.yml 剧本

    [root@m01 roles]# vim nfs-server/tasks/start.yml
    – name: "04 start rpc nfs"
    systemd:
    name: "{{ item }}"
    enabled: "yes"
    state: "started"
    loop:
    "rpcbind"
    "nfs"
    tags:
    "04 start rpc nfs"

  • 编写 /roles/nfs-server/tasks/main.yml 剧本

    可以直接在剧本中使用 inclued,不使用 role


    – hosts: backup
    tasks:
    – include_tasks: install.yml
    – include_tasks: config.yml
    – include_tasks: start.yml

    [root@m01 roles]# vim nfs-server/tasks/main.yml

    – include_tasks: install.yml
    – include_tasks: config.yml
    – include_tasks: start.yml

3)编写 nfs-server.yml 剧本文件

[root@m01 roles]# vim nfs-server.yml
– hosts: backup
roles:
– role: nfs-server

4)执行 nfs-server.yml 剧本文件

[root@m01 roles]# ansible-playbook nfs-server.yml


总结

1 概述 用途:模块化组织 Ansible 剧本,便于复用与维护 结构:tasks + vars + handlers + templates + files + meta

2 核心案例 🆕 初始化 Role:ansible-galaxy init <role_name> 📂 编辑 Role:在 tasks/main.yml 中编写任务 🖋 编写主剧本:nfs-server.yml 调用 role ▶ 执行剧本:ansible-playbook nfs-server.yml

3 目录结构 📂 tasks:主要任务列表 📂 handlers:事件触发任务 📂 vars:变量定义 📂 templates:模板文件(Jinja2) 📂 files:静态文件 📂 meta:依赖声明

4 流程 1️⃣ 创建 Role 目录 2️⃣ 初始化 Role 3️⃣ 编写任务文件 4️⃣ 编写主剧本 5️⃣ 执行验证

5 提示与技巧 🛠 使用 –syntax-check 检查语法 🚀 使用 –step 单步执行 🎯 使用 –tags 只运行部分任务 ⚠ 忽略错误:ignore_errors 🔄 循环与条件:loop、when

赞(0)
未经允许不得转载:网硕互联帮助中心 » Ansible 自动化运维实战系列(五):Roles详解
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!