自动化运维工具-Ansible的Roles的使用

这是我参与8月更文挑战的第9天php

@TOCmysql


前言

往期Ansible目录 一、自动化运维工具-Ansible实战指南 二、自动化运维工具-Ansible的Playbook的使用 三、自动化运维工具-Ansible的Roles的使用 四、B站学习连接nginx

1、Roles是什么?

  1. 编写playbook有个弊端就是没法实现复用web

  2. 假设在同时部署Web、db、ha 时或不一样服务器组合不一样的应用就须要写多个yml文件。很难实现灵活的调用。。sql

  3. roles 用于层次性、结构化地组织playbook。roles可以根据层次型结构自动装载变量文件、tasks以及handlers等。shell

  4. 要使用roles只须要在playbook中使用include指令便可。服务器

  5. 简单来说,roles就是经过分别将变量(vars)、文件(file)、任务(tasks)、模块(modules)及处理器(handlers)放置于单独的目录中,并能够便捷地include它们的一种机制。markdown

  6. 角色通常用于基于主机构建服务的场景中,但也能够是用于构建守护进程等场景中。app

2、什么场景下会用roles?

假如咱们如今有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
复制代码

3、目录层级说明

roles每一个角色中,以特定的层级目录进行组织

Mysql/ 角色

  • Files/ #存放有copy或script模块等调用的文件;’
  • Tepmlates/ #template模块查找所须要模板文件目录;
  • Tasks/
    #定义任务;至少应该包含一个名为main.yml的文件;其余的文件须要在此文件中经过include进行包含。
  • Handlers/
    #定义触发器;至少应该包含一个名为main.yml的文件;其余的文件须要在此文件中经过include进行包含。
  • Vars/
    #定义变量;至少应该包含一个名为main.yml的文件;其余的文件须要在此文件中经过include进行包含。
  • Meta/ #定义变量;至少应该包含一个名为main.yml的文件;定义当前角色的特殊设定及其依赖 关系;其余的文件须要在此文件中经过include进行包含。
  • Default/ #设定默认变量时使用此目录中的main.yml文件。

3、调用Roles实例

#建立固定目录结构
[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   



复制代码

往后再更~~~

相关文章
相关标签/搜索