Ansible roles简介
- Ansible roles是为了层次化、结构化地组织Playbook。
- roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们。
- roles一般用于基于主机构建服务的场景中,在企业复杂业务场景中应用的频率很高。
- 以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;相当于函数的调用把各个功能切割成片段来执行。
roles目录结构
roles: <--所有的角色必须放在roles目录下,这个目录可以自定义位置,默认的位置在/etc/ansible/roles
project: <---具体的角色项目名称,比如nginx、tomcat、php
files: <--用来存放由copy模块或script模块调用的文件。
templates: <--用来存放jinjia2模板,template模块会自动在此目录中寻找jinjia2模板文件。
tasks: <--此目录应当包含一个main.yml文件,用于定义此角色的任务列表,此文件可以使用include包含其它的位于此目录的task文件。
main.yml
handlers: <--此目录应当包含一个main.yml文件,用于定义此角色中触发条件时执行的动作。
main.yml
vars: <--此目录应当包含一个main.yml文件,用于定义此角色用到的变量。
main.yml
defaults: <--此目录应当包含一个main.yml文件,用于为当前角色设定默认变量。
main.yml
meta: <--此目录应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系。
main.yml
角色基本使用:
创建role的步骤
1.创建以roles命名的目录
2.在roles目录中分别创建以各角色名称命名的目录,如httpd等
在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录;用不到的目录可以创建为空目录,也可以不创建
3.在playbook文件中,调用个角色
先创建一个roles目录:
[root@browserlb ~]# mkdir ansible
[root@browserlb ~]# cd ansible/
[root@browserlb ansible]# mkdir roles
[root@browserlb ansible]# mkdir roles/{httpd,mysql,memcache} -pv
mkdir: created directory ‘roles/httpd’
mkdir: created directory ‘roles/mysql’
mkdir: created directory ‘roles/memcache’
[root@browserlb ansible]# tree roles/
roles/
├── httpd
├── memcache
└── mysql
3 directories, 0 files
创建nginx目录
[root@browserlb ansible]# mkdir roles/nginx
卸载之前安装的nginx:
[root@browserlb ansible]# ansible all -m shell -a "yum -y remove nginx"
删除已有的nginx组和nginx用户:
[root@browserlb ansible]# ansible all -m shell -a "userdel -r nginx"
确保已删除:
[root@browserlb ansible]# ansible all -m shell -a "getent passwd | grep nginx"
[root@browserlb ansible]# ansible all -m shell -a "getent group | grep nginx"
# roles(角色)和playbook.yml(剧本)是同级单位;
创建需要的任务文件和模板文件:
[root@browserlb roles]# cd nginx/
[root@browserlb nginx]# mkdir tasks templates
[root@browserlb nginx]# ll
total 0
drwxr-xr-x. 2 root root 6 Apr 14 13:40 tasks
drwxr-xr-x. 2 root root 6 Apr 14 13:40 templates
编写所需的任务
[root@browserlb nginx]# cd tasks/
创建组
[root@browserlb tasks]# vi group.yml
- - name: create group
- group: name=nginx gid=80
创建用户
[root@browserlb