Ansible教程(8)roles角色的配置

Tanglu 系统运维 2020-09-22 21333 8

一、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自动识别成一个新的角色

roles1.jpg


三、手动创建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文件用于定义此角色用到的变量,没有变量的话不用创建

roles.png


四、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最终目录结构

roles2.png

评论

精彩评论
2021-06-23 17:26:02

站长,页面的貌似有点问题

2021-06-25 11:54:56

@X先生 @X先生:额 具体是什么问题呢

2021-04-13 14:39:01

这网站是你一个人维护的吗,内容全部自己写啊

2021-04-13 17:49:23

@刀刀 @刀刀:是的 全部自己写的

2018-05-06 18:18:18

网站干货满满,不过网站速度稍慢,不管是主页还是文章页

2018-05-06 18:20:56

@笛声 @笛声:谢谢支持 用的万网的虚拟主机 主要是便宜

2018-05-07 06:42:29

@TangLu @TangLu:是我网络问题 用手机网络访问很快

2018-05-10 09:05:20

@笛声 @笛声:那就好 阿里的主机这方面应该还是能保障的