本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • Ansible
  • 自动化运维之Ansible(8)Ansible roles使用方法

自动化运维之Ansible(8)Ansible roles使用方法

发布:TangLu2020-3-13 16:47分类: Ansible 标签: 自动化运维 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目录中创建以roles角色命名的目录,如web、mysql

mkdir roles/{web,mysql}


2、在每个角色目录中分别创建files、handlers、tasks(必须)、templates、vars等目录(记不住就参考galaxy所创建的目录

mkdir roles/web/{handlers,tasks,template,vars,files}


3、roles各子目录作用

roles/project/:project是项目名称,如web或mysql

files/:存放由copy或script等模块调用的文件,如网页文件。使用copy模块时会自动从该目录找文件

template/:template模块会自动在此目录中寻找jinja2模板文件,使用template模块就会自动从该目录找文件

tasks/:该目录必须存在,定义task基本元素,该目录中需要包含一个名为main.yml文件,其它文件需要在此main.yml中通过include进行包含


handlers/:应包含一个main.yml文件用于定义此角色用到的各handlers,没有handlers的话不用创建

vars/:应包含一个main.yml文件用于定义此角色用到的变量,没有变量的话不用创建

site.yaml文件:该文件定义了哪些主机用哪个角色


三、Ansible roles基本创建流程

1、为每个roles建立需要的工作目录,这里以创建nginx roles为例

mkdir -p /roles/nginx/{files,handlers,tasks,vars,templates}  #建立nginx角色
# mkdir -p /roles/mysql/{files,handlers,tasks,vars,templates}  #建立mysql角色
# touch /roles/nginx/{tasks,handlers,vars}/main.yml  #创建所需文件,仅以nginx角色为例

2、建立需要的tasks文件,写明需要执行的任务,这里建立了4个任务,用于安装和启动nginx

vi roles/tasks/group.yml
- name: create group
  group" name=nginx

vi roles/tasks/user.yml
- name: create user
  user: name=nginx group=nginx system=yes shell=/sbin/nologin

vi roles/tasks/nginx.yml
- name: install nginx
  yum: name=nginx

vi roles/tasks/service.yml
- name: start nginx
  service: name=nginx state=start enabled=yes.

vi roles/tasks/temp.yml
- name: copy conf
  template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf

3、为tasks创建main.yml文件作为入口,该文件里会定义每个任务的执行顺序,也可以include别的roles里的文件,只需要把路径写对即可
vi roles/tasks/main.yml
- include: group.yml
- include: user.yml
- include: nginx.yml
- include: temp.yml
- include: service.yml

4、写playbook调用roles。这个playbook文件需要和roles目录平级,这里创建了一个site.yaml的playbook文件,指定host4这台主机使用nginx这个roles,角色可以同时调用多个。

site.png


5、运行playbook调用roles

ansible-playbook site.yaml


四、Ansible roles的高级用法

1、handlers的创建。首先创建handlers目录,然后在其中创建main文件

handlers.png


2、vars的创建。首先创建vars目录,然后在其中创建main文件。把tasks文件中使用的变量或者template中使用的变量在这里定义好

vars.png


3、template的创建。首先创建templates目录,然后创建jinja2模板文件,通常可以复制一份应用自带的配置文件过来,比如nginx.conf,然后再通过变量结合facts的信息去定义需要修改的配置,也可以自己定义变量。这里只过滤出了nginx配置文件中需要用到ansible变量的部分

jinja2.png


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《自动化运维之Ansible(8)Ansible roles使用方法
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-281.html  [生成短网址]

已有 4/3296 人参与

评论:

笛声 2018-05-06 18:18
网站干货满满,不过网站速度稍慢,不管是主页还是文章页
TangLu 2018-05-06 18:20
@笛声:谢谢支持 用的万网的虚拟主机 主要是便宜
笛声 2018-05-07 06:42
@TangLu:是我网络问题 用手机网络访问很快
TangLu 2018-05-10 09:05
@笛声:那就好 阿里的主机这方面应该还是能保障的

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~