> 技术文档 > 云计算学习100天-第14天

云计算学习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