Ansible角色定制—roles

本文承接本人的上一篇博文: Ansible playbook简介与配置
有需要的可以前去查看!!

角色定制:roles

对于以上所有的方式有个弊端就是无法实现复用假设在同时部署Web、db、ha 时或不同服务器组合不同的应用就需要写多个yml文件。很难实现灵活的调用。

roles 用于层次性、结构化地组织playbook。roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量(vars)、文件(file)、任务(tasks)、模块(modules)及处理器(handlers)放置于单独的目录中,并可以便捷地include它们的一种机制。角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。

roles目录结构

需要在/etc/ansible/roles目录下创建需要设置的服务文件目录:

/etc/ansible/roles/{mysql,tomcat,nginx}/

files/:存储由copy或script等模块调用的文件;

tasks/:此目录中至少应该有一个名为main.yml的文件,用于定义各task;其它的文件需要由main.yml进行“包含”调用;

handlers/:此目录中至少应该有一个名为main.yml的文件,用于定义各handler;其它的文件需要由

main.yml进行“包含”调用;

vars/:此目录中至少应该有一个名为main.yml的文件,用于定义各variable;其它的文件需要由main.yml进行“包含”调用;

templates/:存储由template模块调用的模板文本;

meta/:此目录中至少应该有一个名为main.yml的文件,定义当前角色的特殊设定及其依赖关系;其它的文件需要由main.yml进行“包含”调用;

default/:此目录中至少应该有一个名为main.yml的文件,用于设定默认变量;

实现步骤:

1、在roles目录下生成对应的目录结构

[root@CentOS7-master ~]# mkdir -pv /etc/ansible/roles/{nginx,mysql,tomcat}/{files,templates,vars,tasks,handlers,meta,default}

2、定义 /etc/ansible/roles/nginx/tasks/main.yml 的配置文件

[root@CentOS7-master ~]# vim /etc/ansible/roles/nginx/tasks/main.yml
- name: cp
  copy: src=nginx-1.10.2-1.el7.ngx.x86_64.rpm dest=/tmp/nginx-1.10.2-1.el7.ngx.x86_64.rpm

- name: install
  yum: name=/tmp/nginx-1.10.2-1.el7.ngx.x86_64.rpm state=latest

- name: conf
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
  tags: nginxconf
  notify: new conf to reload

- name: start service
  service: name=nginx state=started enabled=true

3、修改变量文件 /etc/ansible/roles/nginx/vars/main.yml

[root@CentOS7-master ~]# vim /etc/ansible/roles/nginx/vars/main.yml
nginxort: 8888  #该变量在此文件中定义后,会在nginx.conf.j2文件中被引用

4、定义 /etc/ansible/roles/nginx/handlers/main.yml 文件

[root@CentOS7-master ~]# vim /etc/ansible/roles/nginx/handlers/main.yml
- name: new conf to reload
  service: name=nginx state=restarted

5、定义 /etc/ansible/roles.yml 的playbook文件

[root@CentOS7-master ~]# vim /etc/ansible/roles.yml
- hosts: nginx   remote_user: root
  roles:
    - nginx

6、可以通过 /etc/ansible/roles.yml 传递变量

[root@CentOS7-master ~]# vim /etc/ansible/roles.yml
- hosts: nginx   remote_user: root
  roles:
    - { role: nginx, nginxport: 12345 }

7、也可以配置多个角色

[root@CentOS7-master ~]# vim /etc/ansible/roles.yml
- hosts: nginx
  remote_user: root
  roles:
    #- { role: nginx, nginxport: 12345 }
    - { role: memcached }

文件目录结构:

[root@CentOS7-master ~]# tree /etc/ansible/
/etc/ansible/
├── ansible.cfg
├── hosts
├── roles
│   ├── mysql
│   │   ├── default
│   │   ├── files
│   │   ├── handlers
│   │   ├── meta
│   │   ├── tasks
│   │   ├── templates
│   │   └── vars
│   ├── nginx
│   │   ├── default
│   │   ├── files
│   │   ├── handlers
│   │   │   └── main.yml
│   │   ├── meta
│   │   ├── tasks
│   │   │   └── main.yml
│   │   ├── templates
│   │   └── vars
│   │       └── main.yml
│   └── tomcat
│       ├── default
│       ├── files
│       ├── handlers
│       ├── meta
│       ├── tasks
│       ├── templates
│       └── vars
└── roles.yml

25 directories, 8 files

你可能感兴趣的:(知识点整理)