【Ansible 学习之旅】Roles介绍

系列文章

Ansible 介绍和架构
Ansible 安装和入门
配置控制机器和受控机器
Inventory文件介绍
Ansible核心工具介绍
Ansible常用模块介绍与演示
Playbook 的基本概念
Playbook 的使用实例
Ansible 中的变量
Playbook 中的 Include 语句



有 Ansible Playbook 的话,为何要用 Ansible 角色?

大多数自动化开发人员和系统管理员都会从单个 playbook 开始创建自动化内容。Playbook是针对定义的清单执行的自动化任务列表。任务可以组织成一个 play,其中包含一个或多个任务,分别映射到特定的主机并按顺序执行。一个playbook 则可以包含一个或多个 play,为在单个文件中执行 Ansible 自动化提供了灵活的机制。

虽然 playbook 是对使用 Ansible 实现自动化的强大助力,但在一个 playbook中编写所有任务并不一定是上佳之策。对于范围和变量更复杂的自动化任务,并且涉及重复使用的情况下,将自动化内容组织成可重用的 Ansible角色,并在 playbook 中进行调用可能是更合适的选择。


Roles

roles 基于一个已知的文件结构,去自动的加载某些 vars_files,tasks 以及 handlers。以便 playbook 更好的调用。相比 playbook,roles 的结构更加的清晰有层次。

角色的目录结构

一个标准的角色目录结构如下:

  • tasks:存放执行的任务清单
  • files:存放要上传到目标主机的文件
  • templates:存放Jinja2模板文件
  • handlers:存放响应通知的动作
  • vars:存放角色使用的变量
  • defaults:定义角色默认的变量值
  • meta:存放元数据,如依赖的角色等
  • library:存放自定义的Python模块
  • modules:存放自定义的Python模块

在 roles 目录下,可以使用如下命令创建目录:

ansible-galaxy init nfs roles   # 其中 nfs 为目录名称

这样创建的目录是全目录,但是我们可能只需要部分目录,因此实际应用中大多数都由我们自己创建目录,而不是用命令创建目录。

示例目录构造如下:

 1 [root@server1 tmp]$ tree ./
 2 ./
 3 ├── sit.yml
 4 ├── webservers.yml
 5 └── roles
 6     └── nfs                  # 角色名称
 7         ├── defaults         # 角色默认变量(最低优先级)
 8         │   └── main.yml
 9         ├── files            # 文件存放
10         ├── handlers         # 触发任务
11         │   └── main.yml
12         ├── meta             # 依赖关系
13         │   └── main.yml
14         ├── README.md        # 使用说明
15         ├── tasks            # 具体任务
16         │   └── main.yml
17         ├── templates        # 模板文件
18         └── vars             # 角色其他变量
19             └── main.yml
20 
21 10 directories, 10 files
  • 首先要有 roles 目录,然后在 roles 目录下创建相应的目录。

  • roles 下的目录名最好见文知意,如 common 目录表示基础目录,是必要的;nfs 目录表示安装 nfs 服务;memcached 目录表示安装 memcached 服务;等等。

  • 可以根据自身需要创建 roles 下的二级目录,不需要的目录可以不创建,没需要全目录创建。

  • roles 目录下的二级目录中,有些目录必须包含一个 main.yml 文件,以便 ansible 使用。

使用角色

在 Playbook 中使用角色非常简单,只需要在 roles 列表中指定角色名即可:

---
- name: Example Playbook
  hosts: all
  roles:
    - myrole

角色的变量

角色可以有自己的变量,这些变量可以通过多种方式定义:

  • 默认变量:在 defaults/main.yml 文件中定义的角色变量。
  • 角色变量:在 vars/main.yml 文件中定义的角色变量。
  • Playbook 变量:在 Playbook 中通过 vars 或 vars_files 定义的变量。
  • 命令行变量:通过 -e 或 --extra-vars 参数传递的变量。

角色变量的优先级从低到高依次为:

  • 默认变量 (defaults/main.yml)
  • 角色变量 (vars/main.yml)
  • Playbook 变量 (vars 或 vars_files 在 Playbook 中定义)
  • 命令行变量 (-e 或 --extra-vars)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不怕娜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值