ansible roles
在实际的工作当中, 一个完整的项目实际上是很多功能体的组合, 如果将所有的功能写在一个 playbook 中会存在如代码耦合程度高, playbook 长而维护成本大, 灵活性低等一系列的问题. 使用 roles 能巧妙的解决这一系列的问题. roles 是 ansible1.2 版本后加入的新功能, 适合于大项目 playbook 的编排架构.
ansible roles 目录结构
roles 能够根据层次型结构自动装载变量文件, task 以及 handlers 等. 简单来讲, roles 就是通过分别将变量, 文件, 任务, 模块及处理器放置于单独的目录中, 并可以便捷地 include 它们, roles 一般用于基于主机构建服务的场景中, 但也可以用于构建守护进程等场景中.
- roles/
- common/
- files/
- templates/
- tasks/
- handlers/
- vars/
- defaults/
- meta/
- web/
- files/
- templates/
- tasks/
- handlers/
- vars/
- defaults/
- meta/
roles 内各目录含义解释
files: 用来存放由 copy 模块或 script 模块调用的文件.
templates: 用来存放 jinjia2 模板, template 模块会自动在此目录中寻找 jinjia2 模板文件.
tasks: 此目录应当包含一个 main.YAML 文件, 用于定义此角色的任务列表, 此文件可以使用 include 包含其它的位于此目录的 task 文件.
handlers: 此目录应当包含一个 main.YAML 文件, 用于定义此角色中触发条件时执行的动作.
vars: 此目录应当包含一个 main.YAML 文件, 用于定义此角色用到的变量.
defaults: 此目录应当包含一个 main.YAML 文件, 用于为当前角色设定默认变量.
meta: 此目录应当包含一个 main.YAML 文件, 用于定义此角色的特殊设定及其依赖关系.
在一个 playbook 中使用 roles 的步骤:
1) 创建以 roles 命令的目录.
mkdir /etc/ansible/roles/ -p #yum 装完默认就有
2) 创建全局变量目录.
- mkdir /etc/ansible/group_vars/ -p
- touch /etc/ansible/group_vars/all #文件名自己定义, 引用的时候注意
3) 在 roles 目录中分别创建以各角色名称命令的目录, 如 httpd.
mkdir /etc/ansible/roles/common -p
4) 在每个角色命令的目录中分别创建 files,handlers,tasks,templates,meta,defaults 和 vars 目录, 用不到的目录可以创建为空目录, 但不可以不创建.
- mkdir /etc/ansible/roles/httpd/{
- files,templates,tasks,handlers,vars,defaults,meta
- } -p
- mkdir /etc/ansible/roles/MySQL/{
- files,templates,tasks,handlers,vars,defaults,meta
- } -p
5) 在每个角色的 handlers,tasks,meta,defaults,vars 目录下创建 main.YAML 文件, 千万不能自定义.
- touch /etc/ansible/roles/httpd/{
- defaults,vars,tasks,meta,handlers
- }/main.YAML
- touch /etc/ansible/roles/MySQL/{
- defaults,vars,tasks,meta,handlers
- }/main.YAML
6) 在 playbook 文件中, 调用各角色.
- vi /etc/ansible/site.YAML
- ---
- - hosts: webserver
- remote_user: root
- roles:
- - httpd
- - MySQL
角色管理, roles 安装搭建 LAMP 架构
- [[email protected] ~]# VIM /etc/ansible/hosts
- [ftpserver]
- 192.168.136.251
- # 创建目录, 子目录
- mkdir /etc/ansible/roles/httpd/{files,templates,tasks,handlers,vars,defaults,meta} -p
- mkdir /etc/ansible/roles/MySQL/{files,templates,tasks,handlers,vars,defaults,meta} -p
- mkdir /etc/ansible/roles/PHP/{files,templates,tasks,handlers,vars,defaults,meta} -p
- touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.YAML
- touch /etc/ansible/roles/MySQL/{defaults,vars,tasks,meta,handlers}/main.YAML
- touch /etc/ansible/roles/PHP/{defaults,vars,tasks,meta,handlers}/main.YAML
- #apachej 角色
- [[email protected] roles]# cd /etc/ansible/roles/httpd/tasks/
- [[email protected] tasks]# VIM main.YAML
- - name: install apache
- yum: pkg={{ servername }} state=latest
- # 定义 servername
- [[email protected] tasks]# cd ../vars/
- [[email protected] vars]# VIM main.YAML
- servername: httpd
- #MySQL 角色
- [[email protected] vars]# cd ../../MySQL/tasks/
- [[email protected] tasks]# VIM main.YAML
- - name: install mysqld
- yum: pkg={{servername}} state=latest
- [[email protected] tasks]# VIM ../vars/main.YAML
- servername: mariadb*
- #PHP 角色
- [[email protected] tasks]# cd ../../PHP/tasks/
- [[email protected] tasks]# VIM main.YAML
- - name: install PHP
- yum: pkg={{servername}} state=latest
- [[email protected] tasks]# cd ../vars/
- [[email protected] vars]# VIM main.YAML
- servername: PHP
- # 创建总体剧本去控制这些服务
- [[email protected] vars]# cd /etc/ansible/
- [[email protected] ansible]# VIM site.YAML
- - hosts: ftpserver
- remote_user: root
- roles:
- - httpd
- - MySQL
- - PHP
- [[email protected] ansible]# ansible-playbook site.YAML
- PLAY [ftpserver] ***********************************************************************************
- TASK [Gathering Facts] *****************************************************************************
- ok: [192.168.136.251]
- TASK [httpd : install apache] **********************************************************************
- changed: [192.168.136.251]
- TASK [MySQL : install mysqld] **********************************************************************
- changed: [192.168.136.251]
- TASK [PHP : install PHP] ***************************************************************************
- changed: [192.168.136.251]
- PLAY RECAP *****************************************************************************************
- 192.168.136.251 : ok=4 changed=3 unreachable=0 failed=0
来源: http://www.bubuko.com/infodetail-3414434.html