(1)
(1.1)ansible自1.2版本引入的新特性,用于层次性、结构化地组织playbook。roles可以根据层次型结构自动装载变量文件、task以及handlers等。要使用roles只须要在playbook中使用include指令便可。简单来讲,roles就是经过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并能够便捷地include它们的一种机制。角色通常用于基于主机构建服务的场景中,但也能够是用于构建守护进程等场景中。
复杂场景:建议使用roles,代码复用度高。变动指定主机或主机组;如命名不规范维护和传承成本大;某些功能需多个playbook,经过include便可实现
官方建议是在/etc/ansible/roles/下建立角色,可是咱们是能够在任意的路径下建立的,所以咱们选择在/root/ansible/roles目录下建立角色,咱们能够建立httpd,mysql,memcache这些目录。
需求:咱们建立一个nginx服务,咱们须要建立一个nginx的组,还须要建立一个nginx用户,同时还要安装nginx的包,还能够把相关的配置文件拷贝到各服务器中,最后还要把nginx的服务启动起来
# mkdir roles/{httpd,mysql,memcache} -pv
在/root/ansible/roles目录下建立httpd,mysql,memcache这些目录
(1.2)roles目录结构及各目录做用--nginx服务
每一个角色,以特定的层级目录结构进行组织,roles目录结构在roles/project/目录下:
1.files/ 目录:存放由copy或scrip模块等调用的文件
2.templates/ 目录:templates模块查找所须要模板文件的目录
3.tasks/ 目录:定义task,role的基本元素,至少应该包含一个名为main.yaml的文件;其余的文件须要在此文件中经过include进行包含
4.handlers/ 目录:至少应该包含一个名为main.yaml的文件;其余的文件须要在此文件中经过include进行包含
5.vars/ 目录(不经常使用):定义变量,至少应该包含一个名为main.yaml的文件;其余的文件须要在此文件中经过include进行包含
6.meta/ 目录(不经常使用):定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yaml的文件,其它文件须要在此文件中经过include进行包含
7.default/ 目录(不经常使用):设定默认变量时使用此目录中的main.yaml文件
需求:咱们建立一个nginx的角色,而后使用角色能够直接安装软件
# vim group.yaml
在/root/ansible/roles/nginx/tasks目录下建立一个group.yaml用来建立组的文件
# vim user.yaml
在/root/ansible/roles/nginx/tasks目录下建立一个user.yaml用来建立user的文件
# vim yum.yaml
在/root/ansible/roles/nginx/tasks目录下建立一个yum.yaml用来安装文件
# vim start.yaml
在/root/ansible/roles/nginx/tasks目录下建立一个start.yaml文件,用来启动系统的服务
# vim restart.yaml
在/root/ansible/roles/nginx/tasks目录下建立一个restart.yaml文件,用来重启系统的服务
# cp /etc/nginx/nginx.conf nginx.conf.j2
将/etc/nginx/nginx.conf文件拷贝到/root/ansible/roles/nginx/templates目录下并命名为nginx.conf.j2
# vim nginx.conf.j2
编辑nginx.conf.j2配置文件
# vim templ.yaml
在/root/ansible/roles/nginx/tasks目录下建立一个templ.yaml文件用来指定模板文件复制到的具体地址下面
# vim main.yaml
在/root/ansible/roles/nginx/tasks目录下建立一个main.yaml文件,用来定义task文件谁先执行谁后执行的顺序
# vim nginx_role.yaml
在/root/ansible目录下建立一个nginx_role.yaml文件,这个文件和/root/ansible/roles文件是平级的关系
# ansible-playbook nginx_role.yaml
咱们使用playbook执行nginx_role.yaml定义的配置文件,而后便可以给各主机安装nginx服务
# ansible all -m shell -a 'ss -tnl'
查看其它主机的80端口是否有开启
# ansible all -m shell -a 'ps aux | grep nginx'
查看各主机的nginx服务是否有启动
(1.3)roles目录结构及各目录做用--httpd服务
需求:咱们须要在各主机上建立apache用户同时将本机的httpd服务下的httpd.conf文件传送到对应主机的配置目录下。
# cp /etc/httpd/conf/httpd.conf /root/ansible/roles/httpd/files/
把本机的httpd服务下的httpd.conf文件拷贝到/root/ansible/roles/httpd/files/目录下
# vim user.yaml
在/root/ansible/roles/httpd/tasks目录下建立user.yaml文件,用来建立用户
# vim copyfile.yaml
在/root/ansible/roles/httpd/tasks目录下建立一个copyfile.yaml文件,用来传输文件
# vim main.yaml
在/root/ansible/roles/httpd/tasks目录下建立一个main.yaml的主的配置文件
# vim httpd_role.yaml
咱们在/root/ansible目录下建立一个httpd_role.yaml配置文件,并指定使用建立的角色httpd
# ansible-playbook httpd_role.yaml
在/root/ansible目录下使用playbook执行建立的httpd_role.yaml配置文件
# ansible all -m shell -a 'ls -l /data'
查询/data目录下是否有生成httpd.conf配置文件
# ansible all -m shell -a 'getent passwd apache'
查询是否有生成apache用户
(1.4)roles目录结构及各目录做用--同时安装httpd和nginx服务
# vim some_role.yaml
若是咱们想在各主机上安装两个服务,那么咱们能够在yaml文件中定义安装两个角色便可
(1.5)roles目录结构及各目录做用--若是咱们想在nginx中调用httpd角色中task下的文件
# vim /root/ansible/roles/nginx/tasks/main.yaml
编辑nginx下的main.yaml文件
# vim /root/ansible/roles/httpd/tasks/copyfile.yaml
编辑httpd角色下的copyfile.yaml文件,将须要拷贝的文件修改写上绝对路径
# ansible-playbook nginx_role.yaml
在/root/ansible目录下使用playbook执行建立的nginx_role.yaml配置文件
(2)
(2.1)针对不一样的role角色添加标签
# vim some_role.yaml
在/root/ansible目录下对some_role.yaml文件进行配置
# ansible-playbook -t web some_role.yaml
咱们使用playbook执行/root/ansible目录下的web some_role.yaml 文件,其中使用的tag标签指明为web
(2.2)针对不一样的role角色添加when选择关键字
在/root/ansible目录下对some_role.yaml文件进行配置
# ansible-playbook some_role.yaml
使用playbook执行some_role.yaml文件,当系统的版本是7的时候会执行安装nginx服务的操做
(2.3)使用role搭建一个规模化的批量部署程序
# vim group.yaml
在/root/ansible/roles/app/tasks目录下编辑group.yaml配置文件
# vim user.yaml
在/root/ansible/roles/app/tasks目录下编辑user.yaml配置文件
# vim yum.yaml
在/root/ansible/roles/app/tasks目录下编辑yum.yaml配置文件
# cp /etc/httpd/conf/httpd.conf /root/ansible/roles/app/templates/httpd.conf.j2
将httpd服务下的httpd.conf文件拷贝到/root/ansible/roles/app/templates目录下
# vim httpd.conf.j2
编辑httpd.conf.j2配置文件
# vim main.yaml
在/root/ansible/roles/app/vars目录下建立main.yaml配置文件
# vim templ.yaml
在/root/ansible/roles/app/vars目录下建立templ.yaml配置文件
# vim main.yaml
在/root/ansible/roles/app/handlers目录下建立main.yaml配置文件
# vim start.yaml
在/root/ansible/roles/app/tasks目录下建立start.yaml配置文件
# vim copyfile.yaml
在/root/ansible/roles/app/tasks/copyfile.yaml配置文件中编辑
# vim main.yaml
在/root/ansible/roles/app/tasks/main.yaml配置文件中编辑
# vim app_role.yaml
在/root/ansible目录下的app_role.yaml配置文件中编辑
# ansible-playbook app_role.yaml
使用playbook执行/root/ansible目录下的app_role.yaml文件
# ansible all -m shell -a 'ss -tnlp'
查询各主机上启动的进程号是不是咱们本身定义的
# ansible all -m shell -a 'ps aux | grep httpd'
查询各主机上启动的进程是不是app用户
# ansible all -m shell -a 'ls /etc/httpd/conf.d'
查询各主机上/etc/httpd/conf.d目录下是否有生成vhosts.conf文件
(2.4)roles目录结构及各目录做用--memcached缓存批量设置
# yum install memcached -y
在130服务器的本机安装memcached服务
# rpm -ql memcached
在本机查找到/etc/sysconfig/memcached配置文件
# cat /etc/sysconfig/memcached
查看内存当缓存使用,查看缓存占用的空间大小为64M
# ansible all -m setup -a 'filter="ansible_memtotal_mb"'
查询各主机的系统缓存信息
# cp /etc/sysconfig/memcached templates/memcached.j2
把/etc/sysconfig/memcached配置文件拷贝到/root/ansible/roles/memcached/templates目录下并命名为memcached.j2
# vim /root/ansible/roles/memcached/templatesmemcached.j2
编辑建立的模板文件
# vim yum.yaml
在/root/ansible/roles/memcached/tasks目录下编辑yum.yaml配置文件
# vim start.yaml
在/root/ansible/roles/memcached/tasks目录编辑start.yaml配置文件
# vim main.yaml
在/root/ansible/roles/memcached/tasks目录编辑main.yaml配置文件
# vim templ.yaml
在/root/ansible/roles/memcached/tasks目录编辑templ.yaml配置文件
# vim memcached_role.yaml
在/root/ansible目录下建立一个memcached_role.yaml配置文件
# ansible-playbook memcached_role.yaml
使用playbook执行/root/ansible/memcached_role.yaml文件
# ansible all -m shell -a 'ss -tnlp | grep 11211'
查看各主机上的11211的memcached的端口是否有打开
# ansible all -m shell -a 'cat /etc/sysconfig/memcached'
查看各主机上的/etc/sysconfig/memcached文件中的缓存配置是不是内存的四分之一
若是还须要其余更丰富的role,咱们也能够参考官方站定:https://galaxy.ansible.com/home ,http://www.ansible.com.cn/index.html 学习更多的知识。html
—————— 本文至此结束,感谢阅读 ——————mysql