阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux基础教程之ansible进阶(roles应用)

99次阅读
没有评论

共计 2012 个字符,预计需要花费 6 分钟才能阅读完成。

ansible 进阶

一、roles 简介

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

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

roles:是个目录,角色集合

 里面放的有:mysql/
    httpd/
    nginx/
    memcached/
每个角色是一个目录

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

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

- 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

Linux 基础教程之 ansible 进阶(roles 应用)

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

(4)vim tasks/main.yml

Linux 基础教程之 ansible 进阶(roles 应用)

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

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

Linux 基础教程之 ansible 进阶(roles 应用)

(7)运行结果

Linux 基础教程之 ansible 进阶(roles 应用)

五、其他配置添加

1、定义触发器

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

Linux 基础教程之 ansible 进阶(roles 应用)

(2)vim tasks/main.yml

Linux 基础教程之 ansible 进阶(roles 应用)

(3)ansible-playbook –check nginx.yml

Linux 基础教程之 ansible 进阶(roles 应用)

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

2、自定义变量的使用

(1)cd working/ ,vim myuser.yml

Linux 基础教程之 ansible 进阶(roles 应用)

(2)ansible-playbook myuser.yml

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

Linux 基础教程之 ansible 进阶(roles 应用)

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

mkdir -pv /etc/ansible/roles/memcached/tasks
cd /memcached
vim 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 是门庞大的课程,未完待续。

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-12-03发表,共计2012字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中