1. roles简介
- Ansible roles是为了层次化、结构化地组织Playbook。
- roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们。
- roles一般用于基于主机构建服务的场景中,在企业复杂业务场景中应用的频率很高。
- 以特定的层级目录结构进行组织的tasks、variables、handlers、templates、files等;相当于函数的调用把各个功能切割成片段来执行。
2.roles目录结构
- roles::所有的角色都必须放在roles目录下,进行统一管理;可以自定义roles目录位置;默认存放在/etc/ansible/roles
protect: 具体的角色项目名称;eg:php,apache,firewalld…
files: 存放copy模块会使用到的静态文件
tasks: 任务目录,存放各项任务列表
vars:专门用于定义角色中用到的变量目录
meta:用于定义此角色的特殊设定及其依赖关系
defaults:用于为当前角色设定默认变量
template:用于存放".j2"模板文件
handlers:专门用于存放触发事件
main.yml :主文件;在有些目录中, 必须存在 eg:tasks、handlers这些目录中都必须存在
3. roles 简单示例
roles的创建
[devops@server1 ansible]$ pwd
/home/devops/ansible ##在用户家目录下建立
[devops@server1 ansible]$ mkdir roles
需要在配置文件中添加识别roles标识
创建角色
[devops@server1 roles]$ ansible-galaxy init apache ##创建apache角色
[devops@server1 roles]$ cd apache
[devops@server1 apache]$ ls
defaults files handlers meta README.md tasks templates tests vars
[devops@server1 ansible]$ ansible-galaxy list ##列出角色
# /home/devops/ansible/roles
- apache, (unknown version)
[devops@server1 ansible]$ pwd
/home/devops/ansible
以apache服务为例简单示例
[devops@server1 ansible]$ cd roles/apache/
[devops@server1 apache]$ pwd
/home/devops/ansible/roles/apache
[devops@server1 apache]$ ls
defaults files handlers meta README.md tasks templates tests vars
[devops@server1 apache]$ cd tasks/
[devops@server1 tasks]$ ls
firewalld.yml main.yml
[devops@server1 tasks]$ cat firewalld.yml
---
- name: start firewalld
service:
name: firewalld
state: started
- name: config firewalld
firewalld:
service: http
permanent: yes
state: enabled
immediate: yes
[devops@server1 tasks]$ cat main.yml
---
- import_tasks: firewalld.yml
- name: install httpd
yum:
name: httpd
state: present
- name: config httpd
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart httpd
- name: start httpd
service:
name: httpd
state: started
[devops@server1 tasks]$ cd ..
[devops@server1 apache]$ ls
defaults files handlers meta README.md tasks templates tests vars
[devops@server1 apache]$ cd templates/
[devops@server1 templates]$ ls
httpd.conf.j2
[devops@server1 templates]$ cd ..
[devops@server1 apache]$ cd handlers/
[devops@server1 handlers]$ ls
main.yml
[devops@server1 roles]$ cd apache
[devops@server1 apache]$ ls
defaults files handlers meta README.md tasks templates tests vars
[devops@server1 ansible]$ pwd
/home/devops/ansible
[devops@server1 ansible]$ ansible-playbook apache.yml
变量的定义: