云计算学习100天-第14天
Ansible角色——
- roles能够根据层次型结构自动装载变量文件、tasks以及handlers等
- 要使用roles只需要在playbook中使用include指令引入即可
- 简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷的include它们的一种机制
- 角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中
- playbook局限在于如果文件较多的情况,不清楚哪些主机执行了哪些状态的yml文件,roles能清楚哪些主机应用哪些角色,主要使用场景代码复用度较高的情况。
Roles目录结构
roles: #角色必须放在roles目录下,可以自定义位置,默认/etc/ansible/roles/
project: #角色项目名称
files: #用于存放静态文件,如copy或script模块需要调用的文件
templates: #用于存放动态文件,即jinja2模板,template模块会自动到此目录下寻找模板文件
tasks: #定义任务列表的地方
main.yml #任务列表内容编写在此文件中
handlers: #定义触发器的地方
main.yml #触发器内容编写在此文件中
vars: #定义变量的地方(优先级高)
main.yml #变量定义在此文件中
defaults: #定义变量缺省值的地方(优先级低)
main.yml
meta: #定义作者、版本等描述信息、依赖关系等
main.yml
README.md #整个角色的描述信息
使用Playbook结合template文件完成文件同步
# 编写j2模板
[root@pubserver ansible]# vim motd.j2
Hostname: \"{{ansible_hostname }}\"
Date: \"{{ansible_date_time.date}}\"
Contact to: \"{{admin}}\"
# 编写Playbook
[root@pubserver ansible]# vim motd.yml
---
- name: modify /etc/motd
hosts: webservers
vars:
admin: root@tedu.cn
tasks:
- name: modify motd
template:
src: motd.j2
dest: /etc/motd
# 执行剧本测试结果
[root@pubserver ansible]# ansible-playbook motd.yml
[root@pubserver ansible]# ansible webservers -a \"cat /etc/motd\"
创建一个角色用于安装指定软件
# 创建角色
[root@pubserver ansible]# ansible-galaxy init roles/pkgs
- Role roles/pkgs was created successfully
[root@pubserver ansible]# ansible-galaxy list
- motd, (unknown version)
- pkgs, (unknown version)
# 配置角色
[root@pubserver ansible]# vim roles/pkgs/tasks/main.yml
---
# tasks file for roles/pkgs
- name: install pkg
yum:
name: \"{{pkg}}\"
state: present
[root@pubserver ansible]# vim roles/pkgs/defaults/main.yml #defaults优先级低于vars
---
# defaults file for roles/pkgs
pkg: nginx
# 测试角色
[root@pubserver ansible]# vim inst_nginx.yml
---
- name: install nginx with role
hosts: webservers
roles:
- pkgs
[root@pubserver ansible]# ansible-playbook inst_nginx.yml
# 使用角色
[root@pubserver ansible]# vim inst_mysql.yml
---
- name: installl mysql with role
hosts: dbs
vars:
pkg: mysql-server
roles:
- pkgs
[root@pubserver ansible]# ansible-playbook inst_mysql.yml