roles为完全独立或相互依赖的变量,任务,文件,模板和模块集合提供框架。
在Ansible中,角色是将playbook分成多个文件的主要机制。这简化了编写复杂的playbook,并使其更易于重用。破坏playbook允许您在逻辑上将剧本分解为可重用的组件。
每个roles基本上仅限于特定功能或所需输出,并具有在该roles本身内或作为依赖项列出的其他角色中提供该结果的所有必要步骤。
roles不是playbook。roles是小功能,可以独立使用,但必须在playbook中使用。无法直接执行roles。roles没有明确设置roles将应用于哪个主机。
Ansible Galaxy
Ansible Galaxy 是一个网站,网站提供所有类型的由社区开发的 roles,可以在这个网站上下载其他人写好的roles,非常的方便
roles使用示例
roles是可以重用的, task中可以import_tasks yml文件 但入口总是main.yml 这个名字不能变
mkdir -p {nginx,uwsgi,mysql}/{tasks,templates,vars,files} #递归创建目录结构的命令
在自定义创建的data目录下实现示例
1.创建目录, 及yml文件, 实现roles的整体结构如下
data
├── nginx.yml # 角色文件, ansible-playbook nginx.yml执行,和roles文件同级
├── roles
│ ├── mysql
│ ├── nginx
│ │ ├── files # 用来存放file操作的src源文件
│ │ │ └── c.txt
│ │ ├── handlers # 存放handlers操作的yml文件
│ │ │ └── main.yml
│ │ ├── tasks # task目录必须存在,用来存放任务的yml文件
│ │ │ ├── copyfile.yml
│ │ │ ├── install.yml
│ │ │ ├── main.yml
│ │ │ └── start.yml
│ │ ├── templates
│ │ │ └── nginx.conf
│ │ └── vars # 存放变量文件
│ │ └── main.yml
│ ├── redis
│ └── uwsgi
│ └── tasks
│ └── main.yml
└── uwsgi.yml
nginx,uwsgi这些名字就是自定义起的,因为就是要对各被控机的这些软件操作,所以这么起名比较直观.以下是各文件内容,
nginx.yml(和roles文件夹同级的)
- hosts: web
roles:
- nginx
uwsgi.yml
- hosts: web
roles:
- uwsgi
roles/tasks/files/c.txt 这个目录存放的都是file要操作的源文件
源文件,测试情况下随便写写,可以放要copy的文件
roles/tasks/handlers/main.yml
- name: restart
service: name=nginx state=restarted
roles/tasks/tasks/main.yml
- import_tasks: install.yml
- import_tasks: copyfile.yml
- import_tasks: start.yml
- name: file
copy: dest=/tmp/aaa.txt src=c.txt
- name: createuser
user: name={{user}}
notify: restart
roles/tasks/tasks/install.yml
- name: install
yum: name=nginx
roles/tasks/tasks/copyfile.yml
- name: copyfile
template: src=nginx.conf dest=/etc/nginx/nginx.conf
roles/tasks/tasks/start.yml
- name: start
service: name=nginx state=started enabled=yes
roles/tasks/templates/nginx.conf
放的是nginx.conf的模版文件,结合setup中的参数来用
roles/tasks/vars/main.yml
{"user":Robertx}
2.执行:
ansible-playbook nginx.yml