一、ansible roles概述
角色是ansible自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等。
要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷地include它们的一种机制。
角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中
运维复杂的场景:建议使用roles,代码复用度高
roles:多个角色的集合, 可以将多个的role,分别放至roles目录下的独立子目录中
二、ansible roles目录结构
role官方目录结构,必须按如下定义,在每个目录中必须有main.yaml文件,这属于强制要求
mysql #角色名称
├── files #存放普通文件
├── handlers #触发任务
│ └── main.yml
├── meta #依赖关系
│ └── main.yml
├── tasks #具体任务
│ └── main.yml
├── templates #模板文件
└── vars #定义变量
└── main.yml
三、ansible roles依赖关系
roles允许你在使用role时自动引入其他的role,role依赖关系存储在role目录页中的meta/main.yml文件中
例如安装WordPress需要先确保nginx与php都能正常运行,此时可以在WordPress的role定义,依赖nginx和php-fpm的roles
cat meta/main.yml
---
dependencies:
- { role: nginx }
- { role: php-fpm}
四、ansible roles案例实战
1、创建roles目录结构,手动一级级创建,
或者使用ansible-galaxy init apache
[root@db2 memcache]# mkdir /project2
[root@db2 memcache]# cp hosts /project2
[root@db2 memcache]# cd /project2/
[root@db2 project2]# ansible-galaxy init memcached
- Role memcached was created successfully
[root@db2 project2]# touch site.yml
[root@db2 project2]# tree
.
├── hosts
├── memcached
│ ├── defaults
│ │ └── main.yml
│ ├── files
│ ├── handlers
│ │ └── main.yml
│ ├── meta
│ │ └── main.yml
│ ├── README.md
│ ├── tasks
│ │ └── main.yml
│ ├── templates
│ ├── tests
│ │ ├── inventory
│ │ └── test.yml
│ └── vars
│ └── main.yml
└── site.yml
[root@db2 project2]# cat hosts
[webserver]
192.168.10.128
[dbserver]
192.168.10.130
[all:vars]
ansible_ssh_port=22
ansible_ssh_user=root
ansible_ssh_pass='123456'
[root@db2 project2]# cat memcached/tasks/main.yml
---
- name: Install Memcached Server
yum: name=memcached state=present
- name: Configure Memcached Server
template: src=memcached.j2 dest=/etc/sysconfig/memcached
notify: Restart Memcached Server
- name: Service Memcached Server
service: name=memcached state=started enabled=yes
[root@db2 project2]# cat memcached/handlers/main.yml
- name: Restart Memcached Server
service: name=memcached state=restarted
[root@db2 project2]# cat memcached/templates/memcached.j2
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="{{ ansible_memtotal_mb //2 }}"
OPTIONS=""
[root@db2 project2]# cat site.yml
- hosts: webserver
roles:
- memcached
五、ansible galaxy
Ansible Galaxy 是一个免费共享和下载 Ansible 角色的网站,可以帮助我们更好的定义和学习roles。
ansible-galaxy命令默认与https://网站API通信,可以查找、下载各种社区开发的 Ansible 角色。
ansible-galaxy在 Ansible 1.4.2 就已经被包含了。
ansible提供了ansible-galaxy命令行工具,可以使用init(初始化)、search(查找)、install(安装)、remove(移除等操作)