ansible——利用角色简化playbook

一、基础知识

1. 角色介绍

  1. 角色(roles) 用于层次性,结构化地组织playbook。简单的说,roles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中、并可以便捷地include他们的一种机制。 角色一般用于基于主机构建服务的场景中、但也可以是用于构建守护进程等场景中。
  2. 角色的优点:
    (1)角色可以把内容分组,容易复用
    (2)可以用角色定义系统基本信息:web 服务器、数据库服务器等
    (3)角色可以使大型项目易管理
    (4)角色可以由不同人并行开发
  3. ansible 角色会把不同功能的 playbook 分开,一个标准的角色含有下列子目录:
    (1)defaults:其中的 main.yml 包含角色变量的默认值。在所有变量中优先级最低
    (2)files:包含角色任务引用的静态文件
    (3)handlers:主要定义处理程序
    (4)meta:角色相关信息,如作者、许可证等
    (5)tasks:定义任务
    (6)templates:任务引用的 jinja2 模板
    (7)tests:可以包含清单和 test.yml 的 playbook,用于测试
    (8)vars:定义角色的变量

2. 使用角色

示例:

---
- hosts: www.example.com
  roles:
    - role1
    - role2
      var1:var1
      var2:var2 #为 role2 定义了两个变量,任何 defaults 和 vars 中的变量都会被覆#######################控制执行顺序#######################
有时需要在角色之前或之后执行一些任务,这是就需要使用到关键字:
pre_tasks	#角色之前
post_tasks	#角色之后

二、利用系统角色重用内容

安装系统角色:dnf install -y  rhel-system-roles
查看安装好的角色位置:ls -l  /usr/share/ansible/roles
查看系统中有哪些角色可以使用: ansible-galaxy list
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


时间同步角色示例:
(1)创建目录保存变量: mkdir -p group_vars/all
(2)查看帮助获得示例:cat /usr/share/doc/rhel-system-roles/timesync/README.md
在这里插入图片描述
在这里插入图片描述
(3)时区设置的example:ansible-doc timezone | grep -A 5 “EXAMPLES”
在这里插入图片描述
(4)配置清单和配置文件:
在这里插入图片描述
(5)编辑主playbook:

---
- name: Time Sync
  hosts: groups
  roles:
    - rhel-system-roles.timesync	#使用系统角色
    
  post_tasks:		
    - name: Set Timezone
      timezone:				#同步时间
        name: "{{ host_timezone }}"
      notify: restart crond
    
  handlers:
    - name: restart crond
      service:
        name: crond
        state: restarted
...   

(6)创建针对主机组的变量目录: mkdir -p group_vars/{group1,group2}
(7)在创建的变量目录中分别编辑时间yml文件: vim group_vars/group1/timezone.yml

host_timezone: Asia/Shanghai

在这里插入图片描述
(8)检测和运行:
ansible-playbook --syntax-check configure_time.yml;
ansible-playbook configure_time.yml
在这里插入图片描述
在这里插入图片描述

三、创建角色

角色创建流程,分三个步骤:
1.创建角色目录结构;2.定义角色内容;3.在 playbook 中使用角色。


创建角色框架:
使用命令自动创建:ansible-galaxy init my_role

一般来说,默认情况下,ansible会在当前项目目录中的roles目录中查看角色,前提是roles目录存在。如果不存在就查找当前环境变量中指定的角色。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述结构说明:

my_role/		:具体的角色项目名称,比如 nginx、tomcat、php(自由设置)
├── defaults		:用于为当前角色设定默认变量,此目录应当包含一个 main.yml 文件
│   └── main.yml	:main.yml,类似代码中的主函数,进行统一管理
├── files		:用来存放由 copy 模块或 script 模块等模块调用的文件
├── handlers		:用于定义此角色中触发条件时执行的动作,此目录应当包含一个
main.yml 文件		
│   └── main.yml
├── meta		:用于定义此角色的特殊设定及其依赖关系,此目录应当包含一个
main.yml 文件
│   └── main.yml
├── README.md		:说明文件
├── tasks		:用于定义当前角色的任务列表,此目录应当包含一个 main.yml 文件
│   └── main.yml
├── templates		:用来存放 jinjia2 模板,template 模块会自动在此目录中寻找jinjia2 模板文件
├── tests		:用于存放测试 role 本身功能的 playbook 和主机定义文件,在开发测试阶段比较常用,此目录应当包含一个 main.yml 文件和自身资源设定 invetory
│   ├── inventory
│   └── test.yml
└── vars		:用于定义此角色用到的变量,此目录应当包含一个 main.yml 文件
    └── main.yml

角色实验示例: 使用角色配置虚拟主机
(1)创建并初始化:
在这里插入图片描述
(2)配置角色myvhost中tasks的playbook:
在这里插入图片描述

---
# tasks file for myvhost
- name: Install httpd
  yum:
    name: httpd
    state: latest
- name: Start and Enabled httpd
  service:
    name: httpd
    state: started
    enabled: true
- name: Install vhost file
  template:
    src: vhost.conf.j2
    dest: /etc/httpd/conf.d/vhost.conf
    owner: root
    group: root
    mode: 0644
  notify:
    - restart httpd

(3)编写角色myvhost中的处理程序handlers:
在这里插入图片描述
(4)在项目目录role-create中编写html文件:
在这里插入图片描述
(5)配置角色myvhost中的模板templates:
在这里插入图片描述
(6)在项目目录role-create中编写使用roles的主playbook:

---
- name: use myvhost
  hosts: web	
  pre_tasks:	#执行角色之前
    - name: pre_tasks message
      debug:	#输出信息
        msg: 'Ensure web server configuration'		
  roles:	#调用编辑好的角色
    - myvhost
  post_tasks:	#执行角色之后
    - name: Configure html
      copy:
        src: files/html/	#html文件源:上面步骤中配置的发布目录路径
        dest: "/var/www/vhosts/{{ ansible_hostname }}"
    - name: post_tasks message
      debug:	#打印信息
        msg: "Web server is configured."
...
注意:这里使用的主机清单是系统默认的。在/etc/ansible/hosts文件中的指定主机   

(7)编辑主机清单:指定主机组 vim /etc/ansible/hosts
(8)检测和运行:
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值