一:Roles的概述
Roles能够根据层次型结构自动装载变量文件、task以及handlers等。
简单来讲,Roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们。
Roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中。
1.1:Roles的目录
目录名称 | 具体含义 |
---|---|
files | 用来存放由copy模块或script模块调用的文件 |
templates | 用来存放j正则模板,template模块会自动在此目录中寻找正则模板文件 |
tasks | 此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件 |
handlers | 此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作 |
vars | 此目录应当包含一个main.yml文件,用于定义此角色用到的变量 |
defaults | 此目录应当包含一个main.yml文件,用于为当前角色设定默认变量 |
meta | 此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系 |
二:安装搭建LAMP架构实例演示
2.1:创建服务组件工作目录
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
'查看目录'
[root@shuai ~]# cd /etc/ansible/roles/
[root@shuai roles]# ls
httpd mysql php
[root@shuai roles]# ls httpd/
defaults files handlers meta tasks templates vars
[root@shuai roles]# ls mysql/
defaults files handlers meta tasks templates vars
[root@shuai roles]# ls php/
defaults files handlers meta tasks templates vars
2.2:创建yaml文件
touch /etc/ansible/roles/httpd/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/mysql/{defaults,vars,tasks,meta,handlers}/main.yml
touch /etc/ansible/roles/php/{defaults,vars,tasks,meta,handlers}/main.yml
2.3:编写http模块
'写一个简单的task/main.yml'
vim /etc/ansible/roles/httpd/tasks/main.yml
- name: ensure apache is at the latest version
yum: pkg={{ shuai }} state=latest
'定义变量,可以定义在全局变量中,也可以定义在roles角色变量中,一般定义在角色变量中'
vim /etc/ansible/roles/httpd/vars/main.yml
shuai: httpd
2.4:编写mysql模块
vim /etc/ansible/roles/mysql/tasks/main.yml
- name: ensure mysql is at the latest version
yum: pkg={{ shuai }} state=latest
'定义变量'
vim /etc/ansible/roles/mysql/vars/main.yml
shuai: mariadb*
2.5:编写php模块
vim /etc/ansible/roles/php/tasks/main.yml
- name: ensure php is at the latest version
yum: pkg={{ shuai }} state=latest
'定义变量'
vim /etc/ansible/roles/php/vars/main.yml
shuai: php*
2.6:编写roles实例控制里面服务
vim /etc/ansible/site.yml
- hosts: webservers
remote_user: root
roles:
- httpd
- mysql
- php
'执行剧本'
ansible-playbook site.yml
PLAY [webservers] **********************************************************************************************
TASK [Gathering Facts] *****************************************************************************************
ok: [20.0.0.46]
TASK [httpd : ensure apache is at the latest version] **********************************************************
ok: [20.0.0.46]
TASK [ensure mysql is at the latest version] *******************************************************************
changed: [20.0.0.46]
...省略信息........
安装完成后,查询验证指定服务是否安装
[root@localhost ~]# rpm -q httpd
httpd-2.4.6-93.el7.centos.x86_64
[root@localhost ~]# rpm -q mariadb
mariadb-5.5.65-1.el7.x86_64
[root@localhost ~]# rpm -q php*
php-5.4.16-46.1.el7_7.x86_64
本次角色使用安装已经完成