云计算学习100天-第14天
Ansible角色——
- roles能够根据层次型结构自动装载变量文件、tasks以及handlers等
 - 要使用roles只需要在playbook中使用include指令引入即可
 - 简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中,并可以便捷的include它们的一种机制
 - 角色一般用于基于主机构建服务的场景中,但也可以是用于构建守护进程等场景中
 - playbook局限在于如果文件较多的情况,不清楚哪些主机执行了哪些状态的yml文件,roles能清楚哪些主机应用哪些角色,主要使用场景代码复用度较高的情况。
 
Roles目录结构
roles:                  #角色必须放在roles目录下,可以自定义位置,默认/etc/ansible/roles/
     project:            #角色项目名称
         files:          #用于存放静态文件,如copy或script模块需要调用的文件
         templates:      #用于存放动态文件,即jinja2模板,template模块会自动到此目录下寻找模板文件
         tasks:          #定义任务列表的地方
             main.yml        #任务列表内容编写在此文件中
        handlers:       #定义触发器的地方
             main.yml        #触发器内容编写在此文件中
         vars:           #定义变量的地方(优先级高)
             main.yml        #变量定义在此文件中
         defaults:       #定义变量缺省值的地方(优先级低)
             main.yml
         meta:           #定义作者、版本等描述信息、依赖关系等
             main.yml
         README.md       #整个角色的描述信息
使用Playbook结合template文件完成文件同步
# 编写j2模板
 [root@pubserver ansible]# vim motd.j2
 Hostname: \"{{ansible_hostname }}\"
 Date: \"{{ansible_date_time.date}}\"
 Contact to: \"{{admin}}\"
# 编写Playbook
 [root@pubserver ansible]# vim motd.yml
 ---
 - name: modify /etc/motd
   hosts: webservers
   vars:
     admin: root@tedu.cn
   tasks:
     - name: modify motd
       template:
         src: motd.j2
         dest: /etc/motd
        
 # 执行剧本测试结果
 [root@pubserver ansible]# ansible-playbook motd.yml
 [root@pubserver ansible]# ansible webservers -a \"cat /etc/motd\"
创建一个角色用于安装指定软件
# 创建角色
 [root@pubserver ansible]# ansible-galaxy init roles/pkgs
 - Role roles/pkgs was created successfully
 [root@pubserver ansible]# ansible-galaxy list
 - motd, (unknown version)
 - pkgs, (unknown version)
# 配置角色
 [root@pubserver ansible]# vim roles/pkgs/tasks/main.yml
 ---
 # tasks file for roles/pkgs
 - name: install pkg
   yum:
     name: \"{{pkg}}\"
     state: present
 [root@pubserver ansible]# vim roles/pkgs/defaults/main.yml  #defaults优先级低于vars
 ---
 # defaults file for roles/pkgs
 pkg: nginx
# 测试角色
 [root@pubserver ansible]# vim inst_nginx.yml
 ---
 - name: install nginx with role
   hosts: webservers
   roles:
     - pkgs
 [root@pubserver ansible]# ansible-playbook inst_nginx.yml
# 使用角色
 [root@pubserver ansible]# vim inst_mysql.yml
 ---
 - name: installl mysql with role
   hosts: dbs
   vars:
     pkg: mysql-server
   roles:
     - pkgs
 [root@pubserver ansible]# ansible-playbook inst_mysql.yml


