这是我参与8月更文挑战的第9天php
@TOCmysql
往期Ansible目录 一、自动化运维工具-Ansible实战指南 二、自动化运维工具-Ansible的Playbook的使用 三、自动化运维工具-Ansible的Roles的使用 四、B站学习连接nginx
编写playbook有个弊端就是没法实现复用web
假设在同时部署Web、db、ha 时或不一样服务器组合不一样的应用就须要写多个yml文件。很难实现灵活的调用。。sql
roles 用于层次性、结构化地组织playbook。roles可以根据层次型结构自动装载变量文件、tasks以及handlers等。shell
要使用roles只须要在playbook中使用include指令便可。服务器
简单来说,roles就是经过分别将变量(vars)、文件(file)、任务(tasks)、模块(modules)及处理器(handlers)放置于单独的目录中,并能够便捷地include它们的一种机制。markdown
角色通常用于基于主机构建服务的场景中,但也能够是用于构建守护进程等场景中。app
假如咱们如今有3个被管理主机,第一个要配置成httpd,第二个要配置成php服务器,第三个要配置成MySQL服务器。咱们如何来定义playbook?运维
第一个play用到第一个主机上,用来构建httpd,第二个play用到第二个主机上,用来构建php,第三个play用到第三个主机上,用来构建MySQL。这些个play定义在playbook中比较麻烦,未来也不利于模块化调用,不利于屡次调。好比说后来又加进来一个主机,这个第4个主机既是httpd服务器,又是php服务器,咱们只能写第4个play,上面写上安装httpd和php。这样playbook中的代码就重复了。
为了不代码重复,roles可以实现代码重复被调用。定义一个角色叫websrvs,第二个角色叫phpappsrvs,第三个角色叫dbsrvs。
hosts: host1
role:
- websrvs
hosts: host2
role:
- phpappsrvs
hosts: host3
role:
- dbsrvs
hosts: host4
role:
- websrvs
- phpappsrvs
复制代码
roles每一个角色中,以特定的层级目录进行组织
Mysql/ 角色
#建立固定目录结构
[root@ansible roles]# tree
.
├── httpd
│ ├── files
│ │ └── httpd.conf
│ └── tasks
│ ├── copyfile.yml
│ ├── main.yml
│ └── user.yml
├── memcache
├── mysql
└── nginx
├── main.yml
├── tasks
│ ├── group.yml
│ ├── restart.yml
│ ├── start.yml
│ ├── user.yml
│ └── yum.yml
└── templates
8 directories, 10 files
[root@ansible roles]# cd nginx/
#定义执行的顺序
[root@ansible nginx]# cat main.yml
- include: group.yml
- include: user.yml
- include: yum.yml
- include: start.yml
#每一个任务分别写出来
[root@ansible nginx]# cd tasks/
[root@ansible tasks]# cat group.yml
- name: create group
group: name=nginx gid=80
[root@ansible tasks]# cat restart.yml
- name: start service
service: name=nginx state=restarted
[root@ansible tasks]# cat start.yml
- name: start service
service: name=nginx state=started enabled=yes
[root@ansible tasks]# cat user.yml
- name: create user
user: name=nginx group=nginx uid=80 system=yes shell=/sbin/nologin
[root@ansible tasks]# cat yum.yml
- name: yum install package
yum: name=nginx
编写yml调用nginx角色
[root@ansible ansible]# cat role_nginx.yml
- hosts: wsr
remote_user: root
roles:
- role: nginx
经过ansible-playbook来执行
[root@ansible ansible]# ansible-playbook role_nginx.yml
PLAY [wsr] *****************************************************************************
TASK [Gathering Facts] *****************************************************************
ok: [192.168.100.10]
ok: [192.168.100.20]
PLAY RECAP *****************************************************************************
192.168.100.10 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
192.168.100.20 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
复制代码
往后再更~~~