Ansible中Roles的使用

Roles的介绍

Roles是ansible自1.2版本引入的新特性,用于层次性,结构化地组织playbook,roles能够根据层次型结构自动自动装在变量文件、tasks以及handlers

等。要使用roles只需要在playbook中使用include指令即可。简单来讲,roles就是通过分别将变量、文件、任务、模板及处理器放置于单独的目录中

并可以便捷地include他们的一种机制,角色一般用于主机构建服务的场景中,但也可以是用于构建守护进程等场景中。



创建roles的步骤

  • 创建以roles命名的目录:
  • 在roles目录中分别创建以各角色名称命名的目录,如webservers等:
  • 在每个角色命名的目录中分别创建files、handlers、meta、tasks、templates和vars目录:用不到的目录可以创建为空目录,也可以不创建。
  • 在playbook文件中,调用各角色

roles内各目录中可用的文件

  • tasks目录:至少创建一个名为main.yml的文件,其定义了此角色的任务列表:此文件可以使用       include包含其他的位于此目录中的tasks文件:
  • files目录:存放由copy或者script等模块调用的文件:
  • templates目录:templates模块会自动在此目录中寻找Jinjia2模板文件:
  • handlers目录:此目录中应当包含一个main。
  • yml文件:用于定义此角色用到的各handler:在handler中使用include包含的其他的handler文件也应该位于此目录中:
  • vars目录:应当包含一个main.yml文件,用于定义此角色用到的变量
  • meta目录:应当包含一个main.yml文件,用于定义此角色的特殊设定及其依赖关系:ansible 1.3及其以后的版本才支持
  • default目录:为当前角色定义默认变量时使用此目录,应该包含一个main.yml文件

roles:

(1)目录名同角色名

(2)目录结构有固定格式:

(3) files:静态文件

(4) templates:Jinjia2 模板文件

(5) tasks:至少有一个main.yml文件,定义tasks:

(6)  hangdlers:至少有一个main.yml文件,定义各handlers

(7) vars:至少有一个main.yml文件,定义变量

(8)  meta:定义依赖关系等信息

Roles的使用案例

下面是一个role的目录结构

[email protected]:/etc/ansible/roles/wf_jdk$ tree
.
├── defaults
│   └── main.yml
├── files
│   └── rpm
│       └── jdk-8u66-linux-x64.rpm
├── handlers
├── Readme
└── tasks
    └── main.yml

解释说明:

上面这个role是用来安装JDK的,安装包放在files目录中,defaults目录下面的main.yml则是定义默认变量的,文件内容如下:

[email protected]:/etc/ansible/roles/wf_jdk$ cat defaults/main.yml 
---
# stable or latest
jdk_path: /etc/ansible/roles/wf_jdk

可以看到这个文件用来定义的是jdk_path这个变量

tasks目录下的main.yml文件内容:

[email protected]:/etc/ansible/roles/wf_jdk$ cat tasks/main.yml
---
- name: create /srv/jdk directory
  file: path=/srv/jdk state=directory mode=0755
- name: sync jdk rpm package
  synchronize: src={{ jdk_path }}/files/rpm/ dest=/srv/jdk/ delete=yes
- name: install jdk
  yum: name={{ item }} state=present disable_gpg_check=yes
  with_items:
    - /srv/jdk/jdk-8u66-linux-x64.rpm
- name: Edit profile JDK conf
  blockinfile:
    dest: /etc/profile
    backup: yes
    marker: "# {mark} jdk config"
    content: |
      JAVA_HOME=/usr/java/jdk1.8.0_66
      CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
      PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
      export JAVA_HOME CLASSPATH PATH

从上面的tasks中的main.yml文件可以看到安装JDK的一个基本流程,

1、在远程服务器上创建一个/srv/jdk的目录

2、将本地的JDK RPM包同步到远程主机上的/srv/jdk目录中,如果远程目录中存在这个文件,则先删除再同步

3、用yum模块安装这个RPM包

4、编辑远程主机上的/etc/profile文件,在文件中追加以下配置。

JAVA_HOME=/usr/java/jdk1.8.0_66
CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH

如何调用Roles

Roles写好之后,需要创建一个playbook文件,然后用ansible-playbook命令去调用这个playbook。所有的playbook可以放在一个目录中,这个目录名开始自己随便定义。例如生产环境的playbook目录名叫workflow。下面是所有的playbook

[email protected]:/etc/ansible/workflow$ ls
update_fm.yml              wf_init_iptables.yml      wf_iptables_disabled_port.yml  wf_start_app.yml
wf_add_user.yml            wf_init_kernel.yml        wf_iptables_open_port.yml      wf_stop_app.yml
wf_app_check.yml           wf_init_vim.yml           wf_link_latest_version.yml     wf_web_cdn.yml
wf_check_host.yml          wf_init.yml               wf_logstash.yml                wf_web_check.yml
wf_code_upload.yml         wf_init_zabbix_agent.yml  wf_pgdb.yml                    wf_web_code_upload.yml
wf_del_user.yml            wf_install_jdk.yml        wf_redis.yml                   wf_zabbix_add_template.yml
wf_init_command_audit.yml  wf_install_nginx.yml      wf_reload_nginx.yml            wf_zabbix_create_host.yml
wf_init_common.yml         wf_install_python27.yml   wf_slb_in.yml                  wf_zabbix_maintenance.yml
wf_init_deploy_user.yml    wf_install_tomcat.yml     wf_slb_out.yml

Playbook的内容如下:

[email protected]:/etc/ansible/workflow$ cat wf_install_jdk.yml
---
  - hosts: ‘{{ HOST if HOST|length()>0 }}‘
    remote_user: root
    roles:
      - yaegashi.blockinfile
      - wf_jdk

注意:上面安装JDK的playbook中多了一个

yaegashi.blockinfile

这个是因为生产环境的ansible是1.9版本,不支持blockinfile模块。所以单独写了一个roles,来解决这个问题。

总结:

上面这个安装JDK的roles是一个比较简单的roles,使用的都是一些比较常用的模块,如果看不明白,则需要熟悉下ansible的相关模块的使用。

Ansible官方文档有所有模块的介绍,下面是官网链接

http://docs.ansible.com/ansible/modules_by_category.html

时间: 2024-10-13 09:59:25

Ansible中Roles的使用的相关文章

Ansible中Roles的实战使用

项目实现功能 用playbook调用roles实现编译安装httpd服务 使用rools搭建,代码复用,便于日常维护管理 1. 在服务器端生成公钥,将公钥文件导入到客户端主机 注:同步过程需要输入yes和各自的root密码即可; 完成后可直接ssh [email protected] 就可以无密码登录上去了 ssh-keygen -P "" -f "/root/.ssh/id_rsa" ssh-copy-id 192.168.109.142 ssh-copy-id

Ansible 之 roles使用

1  概述 角色(roles):把playbook根据功能,如handler,tasks等分门别类的放在在各自的子目录下,形成一个集合,就是角色,建议把角色放在固定的目录下,目录可以ansible的配置文件中的roles_path来定义. role模板查看链接:https://github.com/ansible/ansible-examples 2  配置介绍 以层级结构组织Playbook的核心元素,成为roles. 核心元素包括以下几点: Hosts:主机 Tasks:任务列表 Varia

掌握Ansible角色(Roles)自动化部署配置LAMP架构

Roles简介: Ansible为了层次化.结构化地组织Playbook,使用了角色(roles).Roles能够根据层次型结构自动装载变量文件.task以及handlers等.简单来讲,roles就是通过分别将变量.文件.任务.模块及处理器放置于单独的目录中,并可以便捷地include它们,roles一般用于基于主机构建服务的场景中,但也可以用于构建守护进程等场景中.? 在一个playbook中创建使用Roles的步骤: 1.创建以roles命令的目录. * mkdir /etc/ansibl

ansible基础-roles

一 简介 注:本文demo使用ansible2.7稳定版 在我看来,role是task文件.变量文件.handlers文件的集合体,这个集合体的显著特点是:可移植性和可重复执行性. 实践中,通常我们以部署某个服务为单元作为一个role ,然后将这些服务单元(role)放在一个roles目录下.主playbook文件通过调用roles目录下的role,来实现各种灵活多变的部署需求. 本节主要为大家介绍下roles的目录结构.引用方法及其他特性. 二 创建与目录结构 2.1 创建roles 通常创建

Ansible的roles功能(五)

针对大型项目使用Roles进行编排,更便利 目录结构编排 一键安装httpd并提供服务 创建目录结构 [[email protected] ansible]# mkdir -p roles/httpd/{tasks,files,vars} [[email protected] ansible]# cd roles/httpd/tasks [[email protected] roles]#touch httpd/{files/main.yml,tasks/{groupadd.yml,instal

ansible中的playbook

ansible中的playbook,将常用的模块任务,写入到playbook中,ansible方便快捷的管理主机. playbook使用yaml语言来书写,简单说下yaml语言. 1.YAML简介 YAML是一个可读性高的用来表达资料序列的格式.优点 YAML的可读性好 YAML和脚本语言的交互性好 YAML使用实现语言的数据类型 YAML有一个一致的信息模型 YAML易于实现 YAML可以基于流来处理 YAML表达能力强扩展性好 YAML的语法和其他高阶语言类似并且可以简单表达清单.散列表.标

ansible之roles

软件lamp目录结构: files:存文件的,ansible默认就会到这里目录去找文件,对应task里面的copy模块 tasks:存放tasks的 handlers:存放handlers templates:存放模板,对应task里面的模块template vars:这里面定义的变量,只对当前role有作用 meta:定义role和role直接的依赖关系. [[email protected]_2 ~]# tree /root/lamp/ /root/lamp/ ├── hosts ├── r

ansible中的循环都是借助迭代来实现的。

1. 循环 ansible中的循环都是借助迭代来实现的.基本都是以"with_"开头.以下是常见的几种循环. 1.1 with_items迭代列表 ansibel支持迭代功能.例如,有一大堆要输出的命令.一大堆要安装的软件包.一大堆要copy的文件等等. 例如,要安装一堆软件包. --- - hosts: localhost tasks: - yum: name="{{item}}" state=installed with_items: - pkg1 - pkg2

ansible中的playbook详解

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