订阅本站
收藏本站
微博分享
QQ空间分享

ansible进阶(roles应用)

alen 分类:Linux入门 时间:2018/12/21 22:17:06 浏览: 评论: 加入收藏

ansible 进阶

一、roles简介

一个项目从开始到结束,不是简单几十个playbook就可以完事了,当文件数很多,有上百个的话,仅通过简单的includes不停的引用,那最终的结果错综复杂。这个时候ansible roles就可以很好的发挥它的作用了。

roles,字面意思是角色的含义,可以理解为有相互关联功能的集合。我们把安装ntp、mem、nginx、db等等的功能角色放在一个大仓库里,然后用到哪个,从那里面去拿,拿一个,拿两个都可以。

roles:是个目录,角色集合

123456789101112131415161718 里面放的有:     mysql/    httpd/    nginx/    memcached/每个角色是一个目录 每个角色的格式,一特定的层级目录结构进行组织,如下: mysql/    files/    templates/    tasks/    handlers/    vars/    meta/用到哪个目录,给出哪个目录

二、在playbook中调用角色的方式

123456 - hosts: webservers  remote_user: root  roles:  - mysql  - memcached  - nginx

三、以mysql/为例,分别介绍各个目录的意思

(1)files/:存放copy或script模块等调用的文件

(2)templates/:templates查找所需要模块文件的目录;

(3)tasks/:(必须要有)至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含;

(4)handlers/:至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含;

(5)vars/:定义的是变量,至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含;

(6)meta/:定义此当前角色的特殊设定及其他依赖关系,至少应该包含一个名为main.yml的文件,其他的文件需要在此文件中通过include进行包含;

(7)default/:为当前角色设定默认变量时使用目录中的main.yml文件

四、例子

(1)mkdir /etc/ansible/roles/nginx{files,tasks,templates,handlers,vars,default,meta} -pv

(2)tree /etc/ansible/roles/nginx

ansible进阶(roles应用)

(3)cd /etc/ansible/roles/nginx/

(4)vim tasks/main.yml

ansible进阶(roles应用)

(5)cp /root/working/files/nginx.conf.j2 templates/

(6)调用,去working目录下,建立一个ansible文件夹,cd到里面去,然后vim nginx.yml

ansible进阶(roles应用)

(7)运行结果

ansible进阶(roles应用)

五、其他配置添加

1、定义触发器

(1)cd /etc/ansible/roles/nginx 放在handlers目录下:vim handlers/main.yml

ansible进阶(roles应用)

(2)vim tasks/main.yml

ansible进阶(roles应用)

(3)ansible-playbook –check nginx.yml

ansible进阶(roles应用)

定义tags,直接在tasks/main.yml上加上tags: instconf就可以了

2、自定义变量的使用

(1)cd working/ ,vim myuser.yml

ansible进阶(roles应用)

(2)ansible-playbook myuser.yml

(3)再那两台机子上看一下:

ansible进阶(roles应用)

3、调用roles的第二种方法:传递变量给角色

123456789101112131415161718 mkdir -pv /etc/ansible/roles/memcached/taskscd /memcachedvim tasks/main.yml - name: install package  yum: name=memcached state=present- name: start memcached  service: name=memcached state=started enabled=true 调用:vim lnm.yml- hosts: all  remote_user:  roles:  - { role:nginx, when:ansible_distribution_major_version == '7' }  - { role:memcached, when:ansible_hostname == 'memcached' }  ansible-playbook --check lnm.yml

大致先写到这,ansible是门庞大的课程,未完待续。

 

TAG:

文章评论

留言与评论(共有 0 条评论)
   
验证码: