Ansible的roles角色详解

1. Roles目录结构
2. Roles基本使用
这个roles主要是将已知的文件结构预先是由roles定义好的,它会自动的加载这里面的文件内容,例如任务handlers,都会自动去加载,也就是roles对已知的进行分类分组,使我们很容易的去管理,roles提供一种层次化和结次化组织你的playbook,这也是我们去使用它的目的,它不像playbook是一个具体的使用,而roles它是一个组织的方式,这种方式也是通过ansible的一个最佳实践。

1. roles的目录结构

它在目录下有个site,yaml,这个是一个统一的入口,因为它会关联很多的文件,所以我们只需要对着这个统一的入口进行操作
另外就是角色或者功能模块进行部署,像下面的webservers.yaml和fooservers.yml

site.yml 统一的入口,会关联很多的文件
webservers.yml 角色或者功能模块进行部署
fooservers.yml hosts 角色或者功能模块进行部署
roles/ 角色目录,下面又分为不同的模块
common/ 像common 和webservers,相当于两个模块,common用于存放一些公共资源的地方,例如可能会有很多的项目会用到共同的变量,或者有相同的依赖,那么都可以在common的这模块下去定义,这个模块也可以称为角色,这个角色下面还有很多的目录,像下面的文件都是属于它的目录,这些目录就是区别不同的文件或者不同的任务
files/ 这个是角色部署时用到的文件,例如安装一个包,安装一个软件可能会用到它的一个包,那么这个包可以放在这个位置,
templates/ 这个是它角色部署时用到的模版,例如jinja渲染一个配置文件,这里存放一些动态生成文件的,而其他文件的一个目录,
tasks/ 任务,具体要做哪些事
handlers/ 处理程序
vars/ 角色的变量
defaults/ 角色的默认变量
meta/ 角色定义的一些元数据
webservers/ 跟上面的common一样属于模块,下面是所属的文件
files/。 角色部署时用到的文件
templates/ 角色部署时用到的模版
tasks/ 任务,具体要做哪些事
handlers/ 处理程序
vars/ 定义的变量

2. Roles的基本使用


  • hosts: webservers 主机组
    roles:

    • common 模块,下面可以定义很多的属于它的目录或者不同的任务
  • nginx. 这里就是引用下面的变量的,部署一个
  • php Nginx和php的网站平台

定义角色来定义变量,


  • hosts: webservers
    roles:

    • common 使用这个roles后面也可以直接定义变量
  • role: nginx vars:
    dir: ‘/opt/a‘
    app_port: 5000
    • role: php 在这个roles中直接去使用,
      vars:
      dir: ‘/opt/b‘
      app_port: 5001

这里我们创建了hosts,这个我们的主机清单,roles需要放我们的模块以及不同任务的目录,要有一个site.yaml

[[email protected] roles-demo]# ls
hosts  roles  site.yaml
[[email protected] roles-demo]# mkdir roles/{common,nginx,php}/{file,templates,tasks,handlers}

在每个tasks下面都写一个main的yaml,因为它会在你的task下找这个main,也就是这个tasks下的一个入口
查看目录树结构

[[email protected] roles-demo]# tree .
.
|-- hosts
|-- roles
|   |-- common
|   |   |-- file
|   |   |-- handlers
|   |   |-- tasks
|   |   |   -- main.yaml
|   |   -- templates
|   |-- nginx
|   |   |-- file
|   |   |-- handlers
|   |   |-- tasks
|   |   |   -- main.yaml
|   |   -- templates
|   -- php
|       |-- file
|       |-- handlers
|       |-- main.yaml
|       |-- tasks
|       -- templates
- site.yaml

检查语法,执行
[[email protected] roles-demo]# ansible-playbook site.yaml -i hosts --syntax-check
[[email protected] roles-demo]# ansible-playbook site.yaml -i hosts
在site下去定义新的调用的变量这个会找目录下对应的任务比如tasks下的任务

---
- hosts: webservers
  gather_facts: no
  remote_user: root

  roles:
    - role: common

    - role: nginx
      vars:
        dir: /opt/a
        app_port: 80

    - role:  php
      vars:
        dir: /opt/b
        app_port: 81

在tasks下面去定义任务这个会找site.yaml下面的roles,然后执行相关目录下面的操作

[[email protected] nginx]# cat tasks/main.yaml
- name: nginx task test
  debug: msg="nginx task test > {{dir}} {{app_port}}"

也可以写一个组,在组里面去定义变量,这个all会帮你交给所有组,也可以定义webservers,就是定义单一这个组

[[email protected] roles-demo]# ls
group_vars  hosts  roles  site.yaml
[[email protected] roles-demo]# cd group_vars/
[[email protected] group_vars]# ls
all
[[email protected] group_vars]# cat all
nginx_ver: 1.15
php_ver: 5.6

如果单一给这个site的单独单个任务就可以定义标签在执行的时候就可以执行单个roles下的任务

[[email protected] roles-demo]# vim site.yaml 

---
- hosts: webservers
  gather_facts: no
  remote_user: root

  roles:
    - role: common

    - role: nginx
      vars:
        dir: /opt/a
        app_port: 80
      tags: nginx

    - role:  php
      vars:
        dir: /opt/b
        app_port: 81
      tags: php
[[email protected] roles-demo]# ansible-playbook site.yaml -i hosts --tags nginx

PLAY [webservers] *******************************************************************************************************************

TASK [nginx : nginx task test] ******************************************************************************************************
ok: [10.4.7.21] => {
    "msg": "nginx task test > /opt/a 80 1.15 5.6"
}
ok: [10.4.7.22] => {
    "msg": "nginx task test > /opt/a 80 1.15 5.6"
}

PLAY RECAP **************************************************************************************************************************
10.4.7.21                  : ok=1    changed=0    unreachable=0    failed=0
10.4.7.22                  : ok=1    changed=0    unreachable=0    failed=0  

原文地址:https://blog.51cto.com/14143894/2454892

时间: 2024-11-24 00:02:26

Ansible的roles角色详解的相关文章

Ansible系列命令用法详解与使用

Ansible系列命令用法与使用 在上一个文章中已经完成了Ansible的安装,这片文章主要的用来记录Ansible一些命令的用法详解及其使用场景.好了非话不多说,'上菜吧'. Ansible命令行执行方式有Ad-hoc.Ansible-playbook两种方式.Web化执行方式其官方提供了付费产品Tower(10台以内免费),个人的话可以基于API开发类似的Web化产品.此篇文章主要针对于Ad-hoc.Ansible-playbook两种方式做详细介绍. 什么是Ad-hoc.Ansible-p

超详细Ansible安装及模块详解

简介:ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet.cfengine.chef.func.fabric)的优点,实现了批量系统配置.批量程序部署.批量运行命令等功能. ansible是基于模块工作的,本身没有批量部署的能力.真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架.主要包括: (1).连接插件connection plugins:负责和被监控端实现通信; (2).host inventory:指定操作的主机,

[自动化] Ansible之使用Playbooks详解

一.Playbook简介 Playbook 是由一个或多个play组成的列表,主要功能是将task定义好的角色归并为一组进行统一管理,也就是通过Ansible的模板将多个play组织在一个Playbook中运行. 二.playbook格式 playbook由YMAL语言编写.YAML参考了其他多种语言,包括:XML.C语言.Python.Perl等.MAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写.以下为playbook常用到的YMAL格式. YMAL中的列表元素以"-&qu

设计模式之适配器模式 adapter 适配器模式分类概念角色详解 类适配器 对象适配器 接口适配器 双向适配器

现实世界中的适配器模型 先来看下来几个图片,截图自淘宝 上图为港版的插头与港版的插座 上图为插座适配器卖家的描述图 上图为适配后的结果 现实世界中适配器模式 角色分类 这就是适配器模式在电源插座上的应用 我们看下在插座适配器中的几个重要角色 可以看得出来,大陆和港版插座面板,都是作为电源的角色,他们的功能是相似的或者说相近的 插头要使用插座,进而接通电流 现实世界到代码的转换 电源插座代码示例 港版插座面板 package adapter; /**目标角色 Target 接口 * 香港地区使用的

Ansible之系列命令详解

ansible系列命令有:ansible.ansible-doc.ansible-playbook.ansible-vault.ansible-console.ansible-galaxy.ansible-pull,这些命令每个命令都有它独特的作用和用法,接下来我们一一来了解它的用法. 1.ansible-doc:这个命令主要作用是显示模块的帮助信息,有点类似Linux里的man命令. 命令用法: ansible-doc [options] [module...] 常用选项: -a:显示所有模块

ansible批量管理服务详解

在开始之前我们先试想一个场景,你的公司有成百上千台的服务器,这时候领导要求在所有服务器上都添加一个定时任务,或者是执行某个命令,你可能会说用xshell一个一个去连或者是编写一个shell脚本,但是如果过你经历过类似的事情,你一定可以体会到其中的痛苦,因为这么多服务器你用xshell去连的话工作量将变得特别大,但如果你是选择写一个脚本的话也会特别的麻烦,因为每执行一个不同的东西你就要去修改脚本的类容,而且批量脚本一般采用循环的方式去执行一些任务,如果节点太多的话,执行的效率会变得比较低,而批量管

ansible中的playbook详解

首先简单说明一下playbook,playbook是什么呢?根本上说playbook和shell脚本没有任何的区别,playbook就像shell一样,也是把一堆的命令组合起来,然后加入对应条件判断等等,在shell脚本中是一条一条的命令,而在playbook中是一个一个的task任务构成,每个task任务可以看做shell中的一条命令:shell脚本一般只是在当前服务器上执行,而playbook则是在不止一个服务器上执行,因此playbook需要在其中指定运行该playbook的服务器名. p

Ansible自动化运维详解

Ansible作为今年来越来越火的一款开源运维自动化工具,通过Ansible可以实现运维自动化,提高运维工程师的工作效率,减少人为失误.Ansible通过本身集成的非常丰富的模块可以实现各种管理任务,其自带模块超过上千个.更为重要的是,它操作简单,但提供的功能又非常丰富,在运维领域,几乎可以做任何事..Ansible自2012年发布以来,很快在全球流行,其特点如下: 1.Ansible基于Python开发,运维工程师对其二次开发相对比较容易2.Ansible丰富的内置模块,几乎可以满足一切要求3

ansible自动化运维必备工具详解

第2章 ansible简单介绍: 2.1 ansible是什么? ansible是新出现的 自动化 运维工具 , 基于Python研发 . 糅合了众多老牌运维工具的优点实现了批量操作系统配置.批量程序的部署.批量运行命令等功能. 仅需在管理工作站上安装 ansible 程序配置被管控主机的 IP 信息,被管控的主机无客户端. ansible 应用程序存在于 epel( 第三方社区 ) 源,依赖于很多 python 组件 python语言是运维人员必会的语言!ansible是一个基于Python开