Ansible教程(8)roles角色的配置
一、Ansible Roles介绍
Ansible的roles功能也叫做角色,它是一种让多个playbook协同工作的实现方法。roles将playbook中的vars变量、handlers、tasks任务、模块及处理器都进行了拆分,分别放置于各自目录然后进行引用的一种机制。通常一些复杂场景才会使用roles,让代码复用度更高。比如上架50台服务器,其中20台是数据库服务器,另外30台是Web服务器,那么就可以建立2个roles来各自负责对应的机器。
二、通过ansible-galaxy快速了解roles
1、该命令可以连接galaxy.ansible.com下载已经编排好的roles
ansible-galaxy list #列出已经安装的galaxy ansible-galaxy install geerlingguy.redis #安装一个galaxy角色 ansible-galaxy remove geerlingguy.redis #删除一个galaxy角色
2、安装好一个roles后可以看到在相应的目录中会生成一个以角色名命名的目录,并且还有许多子目录和yml文件,这些都是构成roles的成员。复制一份角色目录就会被Ansible自动识别成一个新的角色
三、手动创建Ansible roles
1、创建roles目录,保持和playbook同级,然后在roles目录中创建以角色命名的目录,如nginx、mysql
mkdir roles/{nginx,mysql}
2、在每个角色目录中分别创建files、handlers、tasks(必须)、templates、vars等目录(记不住就参考galaxy所创建的目录)
mkdir roles/nginx/{handlers,tasks,template,vars,files}
3、roles各子目录作用
roles/$project/:project是真实项目名称,如nginx或mysql
files/:存放由copy或script等模块调用的文件,如网页文件。使用copy模块时会自动从该目录找文件
template/:template模块会自动在此目录中寻找jinja2模板文件,使用template模块就会自动从该目录找文件
tasks/:该目录必须存在,定义task基本元素,该目录中需要包含一个main.yml文件,其它文件需要在此main.yml中通过include进行包含
handlers/:应包含一个main.yml文件用于定义此角色用到的各handlers,没有handlers的话不用创建
vars/:应包含一个main.yml文件用于定义此角色用到的变量,没有变量的话不用创建
四、Ansible roles创建httpd服务示例
1、为roles创建目录
cd /etc/ansible/roles/ mkdir -p httpd/{handlers,tasks,templates,vars} cd httpd/ tree . . ├── handlers ├── tasks ├── templates └── vars
2、创建变量文件
vim vars/main.yml PORT: 80 #指定httpd监听的端口
3、为httpd创建配置文件的template
# copy一个本地的配置文件,方便修改 cp /etc/httpd/conf/httpd.conf templates/httpd.conf.j2 vim templates/httpd.conf.j2 Listen {{ PORT }} #引用变量
4、建立tasks文件,写明需要执行的任务
# 创建组的task vim tasks/group.yml - name: Create a Startup Group #name会在执行过程中显示 group: name=www gid=60 system=yes # 创建用户的task vim tasks/user.yml - name: Create Startup Users user: name=www uid=60 system=yes shell=/sbin/nologin # 安装软件的task vim tasks/install.yml - name: Install Package Httpd yum: name=httpd state=installed # 配置软件的task vim tasks/config.yml - name: Copy Httpd Template File template: src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf notify: Restart Httpd # 启动软件的task vim tasks/start.yml - name: Start Httpd Service service: name=httpd state=started enabled=yes # 编写main.yml引用所有task vim tasks/main.yml - include: group.yml - include: user.yml - include: install.yml - include: config.yml - include: start.ym
5、建立handlers文件
vim handlers/main.yml - name: Restart Httpd service: name=httpd state=restarted #名字需要和task中的notify保持一致
6、建立playbook用于调用角色,这个playbook文件需要和roles目录平级
vim httpd_roles.yml --- - hosts: all remote_user: root roles: - role: httpd #指定角色名称 ansible-playbook -C httpd_roles.yml #正式运行前可以先-C测试一次
7、Roles最终目录结构
评论
X先生
回复站长,页面的貌似有点问题
TangLu
回复@X先生 @X先生:额 具体是什么问题呢
刀刀
回复这网站是你一个人维护的吗,内容全部自己写啊
TangLu
回复@刀刀 @刀刀:是的 全部自己写的
笛声
回复网站干货满满,不过网站速度稍慢,不管是主页还是文章页
TangLu
回复@笛声 @笛声:谢谢支持 用的万网的虚拟主机 主要是便宜
笛声
回复@TangLu @TangLu:是我网络问题 用手机网络访问很快
TangLu
回复@笛声 @笛声:那就好 阿里的主机这方面应该还是能保障的