目录
随着 playbook 的增多,有很多代码重用的机会。ansible 提供了一种方式——roles,只需将 roles 从一个项目复制到另一个项目,然后用 play 调用即可实现代码重用。这里的 roles 不是权限角色,应该认为是模板、框架。使用 ansible roles 可以更快地开发 playbook ,方便并行开发,方便大型项目管理。
一、roles的结构
目录结构
[student@workstation roles]$ ansible-galaxy init apache
- Role apache was created successfully
[student@workstation roles]$ ll
total 0
drwxrwxr-x. 10 student student 154 Sep 1 22:28 apache
[student@workstation roles]$ tree apache/
apache/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
- defaults,该目录下的 main.yml 包含角色变量的默认值,使用角色时可以覆盖这些默认值。这些变量优先级较低,应该在 play 中修改或自定义。比如一个 roles 是部署 mysql 数据库的,那么数据库名就应该自定义。
- files,该目录包含角色任务引用的静态文件。
- handlers,该目录下的 main.yml 文件包含角色的处理程序定义。
- meta,该目录下的 main.yml 文件包含与角色相关的信息,比如作者、许可、平台、依赖项等。
- tasks,该目录下的 main.yml 文件包含角色的任务定义。
- templates,该目录包含角色引用的 jinja2 模板。
- tests,该目录包含清单和 test.yml playbook,可用于测试角色。
- yars,该目录下的 main.yml 文件定义角色的变量值,通常用于角色内部用途。这些变量的优先级较高,在 playbook 中使用时也不应篡改。
二、RHEL系统roles
红帽自己有Ansible的roles,需要安装 rhel-system-roles 的包,角色都放在 /usr/share/ansible/roles 目录下面。
yum install rhel-system-roles
这些系统 roles 模板可以 copy 出来再使用。在 roles 的目录里面都有 README 文件可以查看用法。
三、创建角色
ansible-galaxy init apache
四、部署角色
安装角色,先编写 role file 告诉一下角色在什么位置,安装后叫什么名字。
---
- src: http:// roles location
name: roles name
- src: http:// roles location
name: roles name
再用 ansible-galaxy install 命令安装,-r 指定 role file 的位置, -p 指定安装的位置。
ansible-galaxy install -r role_file.yml -p roles/