本公众号内容大多由平时操作记录,如果有错误地方欢迎留言指
Ansible的角色(roles)
ansible的角色是把所有的工作模块化实现,要实现模块化的对象是playbook,根据playbook的功能,如tasks,handlers,templates,files等要实现的工作进行拆分,将各自的功能块放在相应目录中。在roles目录下,分别创建不同的目录,每个目录就是不同的角色,roles目录下是角色的集合:
除此外,每个角色根据其要实现的步同功能,在该角色目录下创建相应的子目录来存放被模块化分解的剧本文件,然后根据各个模块要实现的工作在相应的子目录中编写剧本,大致如下:
roles中角色的调用
根据使用规范,ansible的roles目录要与playbook文件在同一目录层级,并且具体某一个角色的tasks任务要定义一个main.yml文件来引用。
编写roles文件
这里以安装nginx为例,使用roles的方式来编写,在编写一个角色前先理清步奏,因为整个过程在main.yml主文件中引用是有先后顺序的,比如:安装nginx的过程如下:
创建nginx组
创建用户
安装nginx
复制模板文件
重启服务
如果将上面的每一个步奏都用单独的yaml文件来实现,那么tasks文件中要创建5个yaml文件,同样,也可以将上面的5个步奏放在一个yaml文件中,用一个文件时文件名要命名为mian.yml,如果分开编写则需要新建一个main.yml文件将各个功能的yaml文件引用进来。
编写group.yml:
因为tasks文件中只定义要做的具体任务,所以不需要再定义hosts内容了,直接编写playbook中tasks部分的内容就好了。其他文件也是这样
编写user.yml文件
编写inst_nginx.yml文件
编写restart.yml文件
最后编写main.yml文件,将上面的文件按照要执行的顺序引用
我觉得不是非常复杂的应用场景下将每个模块都拆开并不是特别方便,也可以将上面的5个步奏放在一个文件中实现:
vim main.yml
上面的角色定义完,要将使用到的模板文件放到相应的位置,然后执行测试:
[root@Ansible nginx]# ansible-playbook -C /data/nginx_roles.yml
测试没有问题后再执行
因为在nginx.conf模板文件中使用setup的变量定义了work_process的值取决于CPU个数,所以会有2个和4个work进程
领取专属 10元无门槛券
私享最新 技术干货