目录
一.roles角色介绍
roles能够根据层次型结构自动装载变量文件,tasks以及handlers登。要使用roles只需在playbook中使用include指令即可。roles就是通过分别将变量,文件,任务,模块以及处理器放置于单独的目录中,并可以便捷的include他们的一种机制。角色一般用于基于主机构建服务的场景中,但是也可以用于构建守护进程等场景中。
ROLES目录结构
目录 | 含义 |
---|---|
roles | 所有脚色都必须放在roles目录下,这个目录可以自定义,默认位置/etc/ansible/roles |
project | 具体角色项目名称,比如nginx,tomcat,php |
files | 用来存放copy模块过scripit模块调用文件 |
templates | 用来存放jinjia2模板,template模块会自动在此目录寻找jinjia2模板文件 |
tasks | 此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其他的位于此目录的task文件 |
handlers | 此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作 |
vars | 此目录应当包含一个main.yml文件,用于定义此角色用到的变量 |
defaults | 此目录应当包含一个main.yml文件,用于为当前角色设定默认变量 |
meta | 此目录应当包含一个main.yml文件,用于定义此角色的特授及其依赖关系 |
二.示例
一.安装httpd服务
1.创建目录
[root@tdm1 ~]# cd /etc/ansible/roles/
# 创建需要用到的目录
[root@tdm1 roles]# mkdir -p httpd/{handlers,tasks,templates,vars}
[root@tdm1 roles]# cd httpd/
[root@tdm1 httpd]# tree .
.
├── handlers
├── tasks
├── templates
└── vars
4 directories, 0 file
2.准备变量文件
[root@tdm1 httpd]# vim vars/main.yml
PORT: 8088 #指定httpd监听的端口
USERNAME: www #指定httpd运行用户
GROUPNAME: www #指定httpd运行组
3.配置文件模板
# copy一个本地的配置文件放在templates/下并已j2为后缀
[root@ansible httpd]# cp /etc/httpd/conf/httpd.conf templates/httpd.conf.j2
# 找到一下几个参数,进行一些修改,调用上面定义的变量
[root@tdm1 httpd]# vim templates/httpd.conf.j2
Listen {{ PORT }}
User {{ USERNAME }}
Group {{ GROUPNAME }}
4.编写任务剧本,创建用户,创建组,安装软件,配置,启动登
# 创建组的task
[root@tdm1 httpd]# vim tasks/group.yml
- name: Create a Startup Group
group:
name: www
gid: 60
system: yes
# 创建用户的task
[root@tdm1 httpd]# vim tasks/user.yml
- name: Create Startup Users
user:
name: www
uid: 60
system: yes
shell: /sbin/nologin
# 安装软件的task
[root@tdm1 httpd]# vim tasks/install.yml
- name: Install Package Httpd
yum:
name: httpd
state: installed
# 配置软件的task
[root@tdm1 httpd]# vim tasks/config.yml
- name: Copy Httpd Template File
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: Restart Httpd
# 启动软件的task
[root@tmd1 httpd]# vim tasks/start.yml
- name: Start Httpd Service
service:
name: httpd
state: started
enabled: yes
# 编写main.yml,将上面的这些task引入进来
[root@tdm1 httpd]# vim tasks/main.yml
- include: group.yml
- include: user.yml
- include: install.yml
- include: config.yml
- include: start.ym
5.编写handlers
[root@tdm1 httpd]# vim handlers/main.yml
# 这里的名字需要和task中的notify保持一致
- name: Restart Httpd
service:
name: httpd
state: restarted
6.编写yml文件调用httpd角色
[root@tdm1 httpd]# cd ..
[root@tdm1 roles]# vim httpd_roles.yml
---
- hosts: all
remote_user: root
roles:
- role: httpd #指定角色名称
7.查看整个目录
[root@tdm1 roles]# tree
.
└── httpd
├── handlers
│ └── main.yml
├── httpd_roles.yml
├── tasks
│ ├── config.yml
│ ├── group.yml
│ ├── install.yml
│ ├── main.yml
│ ├── start.yml
│ └── user.yml
├── templates
│ └── httpd.conf.j2
└── vars
└── main.yml
5 directories, 10 files
8.测试playbook语法是否正确
[root@tdm1 roles]# ll
total 4
drwxr-xr-x 6 root root 4096 Sep 6 14:13 httpd
[root@tdm1 roles]# ansible-playbook httpd/httpd_roles.yml -C
PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]
TASK [httpd : create group] ********************************************************************************************changed: [47.93.98.117]
TASK [httpd : create user] *********************************************************************************************changed: [47.93.98.117]
TASK [install httpd] ***************************************************************************************************ok: [47.93.98.117]
TASK [httpd : configure template file] *********************************************************************************changed: [47.93.98.117]
TASK [start httpd] *****************************************************************************************************changed: [47.93.98.117]
RUNNING HANDLER [restart httpd] ****************************************************************************************changed: [47.93.98.117]
PLAY RECAP *************************************************************************************************************47.93.98.117 : ok=7 changed=5 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
9.执行剧本
[root@tdm1 httpd]# ansible-playbook httpd_roles.yml
PLAY [web] *************************************************************************************************************
TASK [Gathering Facts] *************************************************************************************************ok: [47.93.98.117]
TASK [httpd : create group] ********************************************************************************************ok: [47.93.98.117]
TASK [httpd : create user] *********************************************************************************************ok: [47.93.98.117]
TASK [install httpd] ***************************************************************************************************ok: [47.93.98.117]
TASK [httpd : configure template file] *********************************************************************************changed: [47.93.98.117]
TASK [start httpd] *****************************************************************************************************changed: [47.93.98.117]
RUNNING HANDLER [restart httpd] ****************************************************************************************changed: [47.93.98.117]
PLAY RECAP *************************************************************************************************************47.93.98.117 : ok=7 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0