一、 roles简介
自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles能够根据层次型结构自动装载变量文件、tasks以及handlers等,只需要在playbook中使用include指令即可。
简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并通过include调用它们的一种机制,类似于其他开发语言中的项目。
二、roles目录结构
每个角色,以特定的层级目录结构进行组织
Roles各目录作用
- roles/project/:项目名称,有以下子目录
- files/ :存放由copy或script模块等调用的文件
- templates/:template模块查找所需要模板文件的目录
- tasks/:定义task,role的基本元素,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
- handlers/:定义handlers,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
- vars/:定义变量,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
- meta/:定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件;其它文件需在此文件中通过include进行包含
- default/:设定默认变量时使用此目录中的main.yml文件
三、 创建role
1. 创建步骤
- 创建以roles命名的目录
- 在roles目录中分别创建以各角色名称命名的目录,如webservers等
- 在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录;用不到的目录可以创建为空目录,也可以不创建
- 在playbook文件中,调用各角色
2. 实验:创建nginx roles
示例:建立nginx roles,在多台主机上部署nginx
- 创建nginx角色目录
cd /app/ansible/role mkdir nginx{tesks,templates,hanslers} -pv
讯享网
- 创建任务目录
讯享网cd tasks/ touch insatll.yml config.yml service.yml file.yml user.yml
- 创建main.yml文件,定义任务执行顺序
vim main.yml
- include: user.yml - include: insatll.yml - include: config.yml - include: file.yml - include: service.yml
- 准备配置文件(centos7,8)
讯享网ll /app/ansible/role/nginx/templates/ nginx7.conf.j2 nginx8.conf.j2
- 定义任务
vim tasks/install.yml
- name: install yum: name=nginx
vim tasks/config.yml
讯享网- name: config file template: src=nginx7.conf.j2 dest=/etc/nginx/nginx.conf when: ansible_distribution_major_version=="7" notify: restrat - name: config file template: src=nginx8.conf.j2 dest=/etc/nginx/nginx.conf when: ansible_distribution_major_version=="8" notify: restrat
vim tasks/file.yml
- name: file.html
copy: src=roles/httpd/files/index.html dest=/usr/share/nginx/html/
vim tasks/service.yml
讯享网- name: start service service: name=nginx state=started enabled=yes
- name: restrat service: name=nginx state=restarted
vim roles/role_nginx.yml
讯享网--- #test role - hosts: appsrvs roles: - role: nginx
- 测试安装
ansible-playbook role_nginx.yml
四、 playbook调用角色
1. 方法1
vim main.yml
讯享网--- - hosts: websrvs remote_user: root roles: - mysql - memcached - nginx
2. 方法2
传递变量给角色
vim main.yml
--- - hosts: remote_user: roles: - mysql - { role: nginx, username: nginx } # 不同的角色调用不同的变量,键role用于指定角色名称,后续的k/v用于传递变量给角色
例2
讯享网--- - hosts: webservers roles: - common - { role: foo_app_instance, dir: '/web/htdocs/a.com', port: 8080 }
3. 方法3
还可基于条件测试实现角色调用
roles: - { role: nginx, username: nginx, when: ansible_distribution_major_version == '7' }
参考:
《ansible权威指南》
https://www.bilibili.com/video/BV1HZ4y1p7Bf?from=search&seid=&spm_id_from=333.337.0.0
有道云笔记

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/70567.html