ansible中roles的简单使用

一.初识roles

  上节中我们已经了解了playbook,详见  https://www.cnblogs.com/wangtaobiu/p/10691689.html

  当我们在配置playbook时会发现它会越来越庞大,所有的tasks,handles,templates等任务或文件都写在一个yml文件中,这样在修改中难免会浪费时间,显得缺乏条理性.而roles的出现刚好解决了这一问题.

  roles的特点 : 目录结构清晰.在使用roles的时候,我们会将不同的任务放在不同的目录下,结构一目了然,在修改的过程中也更方便寻找.

        可以相互调用.在roles中,所有的任务和文件都可以自由调用,通过import或include方法,可以将要执行的任务导入一个文件中,使roles在实现playbook功能的情况下更有条理性.下边是roles目录下安装nginx的目录结构 :

nginx/
├── files     存放静态的文件
│   └── fstab
├── handlers  存放需要触发的任务,里面必须main.yml文件
│   └── main.yml
├── tasks     存放的执行的任务 ,里面必须main.yml文件
│   ├── copyfile.yml
│   ├── install.yml
│   ├── main.yml
│   └── start.yml
├── templates 存放的模板文件
│   ├── centos6.conf
│   └── nginx.conf
└── vars      存放的是参数,里面必须main.yml文件
    └── main.yml  

  从上图中可以看出handles,tasks,vars文件需要用main.yml文件来触发任务,而且针对Contos的不同版本做了相应的判断,所有任务一目了然.

二.roles入口文件设置

  当我们把roles中所有的任务都配置好以后,最后就需要在roles同级的目录下设置入口文件.入口文件的设置最好以任务名命名,方便识别.例如上边的例子中入口文件可以命名为nginx.yml,下边是文件中的内容,重点在于roles下指定nginx目录.

- hosts: web
  remote_user: root
  roles:
  - nginx  

三.roles中任务的导入

  以下是tasks目录下的main文件 : 

- import_tasks: install.yml   #下载
- import_tasks: copyfile.yml  #复制文件到远程主机
- import_tasks: start.yml     #启动nginx
- name: fstab
  copy: dest=/tmp/wq.txt src=fstab
  tags: fstab

  注意 : 因为在main文件中任务是自上而下执行的,所以在导入任务时必须按顺序进行.

四.roles的执行顺序

- 先查找当前目录下roles目录里面指定的对应文件夹
- 找tasks目录下面的main.yml文件,如果import_tasks 就导入
- 如果遇到了templates,去找templates文件夹下面的对应文件
- 如果遇到了notify,去找handlers里面的main.yml文件
- 如果遇到了copy,去找files里面的对应文件
- 如果看到了变量,如果是setup收集的变量就去setup,如果不是就去vars里面的main.yml文件查找

  

猜你喜欢

转载自www.cnblogs.com/wangtaobiu/p/10719190.html