一、roles介绍
roles(⻆⾊): 就是通过分别将variables, tasks及handlers等放置于单独的⽬录中,并可以便捷地调⽤它们的⼀种机制。
假设我们要写⼀个playbook来安装管理lamp环境,那么这个playbook就会写很⻓。所以我们希望把这个很⼤的⽂件分成多个功能拆分, 分成apache管理,php管理,mysql管理,然后在需要使⽤的时候直接调⽤就可以了,以免重复写。就类似编程⾥的模块化的概念,以达到代码复⽤的效果。
二、创建roles的目录结构
files:⽤来存放由copy模块或script模块调⽤的⽂件。
tasks:⾄少有⼀个main.yml⽂件,定义各tasks。
handlers:有⼀个main.yml⽂件,定义各handlers。
templates:⽤来存放jinjia2模板。
vars:有⼀个main.yml⽂件,定义变量。
meta:有⼀个main.yml⽂件,定义此⻆⾊的特殊设定及其依赖关系。
注意: 在每个⻆⾊的⽬录中分别创建files,tasks,handlers,templates,vars和meta⽬录,⽤不到的⽬录可以创建为空⽬录.
三、通过roles实现httpd
1.创建roles⽬录及⽂件,并确认⽬录结构
[root@m0 ~]# cd /etc/ansible/roles/
[root@m0 roles]# tree
.
└── httpd
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
└── vars
└── main.yml
2.准备httpd服务器的主⻚⽂件,php测试⻚和配置⽂件等
[root@m0 ~]# yum -y install httpd
[root@m0 roles]# echo "<?php\n\tphpinfo();\n?>" > /etc/ansible/roles/httpd/files/test.php
[root@m0 roles]# echo "test main page" > /etc/ansible/roles/httpd/files/index.html
[root@m0 roles]# cp /etc/httpd/conf/httpd.conf /etc/ansible/roles/httpd/files/
3.编写httpd⻆⾊的main.yml⽂件
[root@m0 roles]# vim /etc/ansible/roles/httpd/tasks/main.yml
---
- name: 安装httpd
yum: name=httpd,httpd-devel state=present
- name: 同步httpd配置文件
copy: src=/etc/ansible/roles/httpd/files/httpd.conf dest=/etc/httpd/conf/httpd.conf
notify: restart httpd
- name: 同步主页文件
copy: src=/etc/ansible/roles/httpd/files/index.html dest=/var/www/html/index.html
- name: 同步php测试页
copy: src=/etc/ansible/roles/httpd/files/test.php dest=/var/www/html/test.php
- name: 启动httpd并开机自启动
service: name=httpd state=started enabled=yes
4.编写httpd⻆⾊⾥的handler
[root@m0 ansible]# vim /etc/ansible/roles/httpd/handlers/main.yml
---
- name: restart httpd
service: name=httpd state=restarted
5.将两台主机添加到组
[root@m0 ~]# vim /etc/ansible/hosts
s1 ansible_ssh_host=192.168.1.68 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=q
s2 ansible_ssh_host=192.168.1.69 ansible_ssh_port=22 ansible_ssh_user=root ansible_ssh_pass=q
[s]
s1
s2
6.编写httpd的playbook⽂件调⽤前⾯定义好的⻆⾊
[root@m0 roles]# vim /etc/ansible/playbook/httpd.yaml
---
- hosts: s
remote_user: root
roles:
- httpd
8.执行playbook文件
[root@m0 roles]# ansible-playbook /etc/ansible/playbook/httpd.yaml //执行