自动化运维-Ansible (第三部:Playbook 介绍)

前言

之前有两篇文章分别讲了 Ansible 的部署、Ansible 的 模块使用,对 Ansible 有了最初的了解,这篇文章最主要是要介绍 Playbook。
需要了解 Ansible 的部署请点击:Ansible 第一部 :部署
需要了解 Ansible 的模块庆典节:Ansible 第二部:模块使用


Playbook 介绍

Playbook 是由一个或多个play 组成的列表,主要功能是将task 定义好的角色归并为一组进行统一管理,也就是通过task 调用 Asible 的模板将多个 play 组织在一个 Playbook 中运行。

  playbook 由以下各部分组成:
        (1)Tasks :任务,即调用模块完成的一个操作;
        (2)Variables:变量;
        (3)Templates:模板;
        (4)Handlers:处理器,当一个条件满足时,触发执行的操作;
        (5)Roles:角色。

YAML 介绍

YAML 是一种用来表达资料顺序的格式,它由于餐卡了其他多种语言,所以具有很高的可读性。可以认为它就是一种语言格式,必须按照它的这种格式来写语言,才能生效。
它的特性:
1)具有很好的可读性,易于实现;
2)表达能力强,扩展性好;
3)和脚本语言的交互性好;
4)有一个一致的信息规模;
5)可以居于流来处理。

官网地址:http://www.yaml.org


YAML 常用的数据类型

YML 中有两种常用的数据类型,分别是:list 和 dictionary。
(1)list
列表(list)的所有元素均使用 “ - ” 开头,列如:

-Apple
-Orange
-strawberry
-Mango

(2)dictionary
字典(dictionary)通过 key 与 value 进行标识,如:

name: chenglong
Job: xuexi
Skill: Elite

也可以使用 key:value 的形式放置于 { } 中进行标识,如:

{ name: Exanple Developer,Job: Developer,Skill: Elite }

Ansilble 基础元素介绍

(1)Inventory(主机清单)

Ansible 为了更加便捷的管理主机,在主机清单中将被管理主机进行分组命名,默认的主机清单位置为:/etc/ansible/hosts 文件。



1)主机变量:
可以在定义主机时添加主机变量,以便在后续的 playbook 中使用,如:

[aaa_servers]
www1.baidu.com http_port=80 maxRequestsChild=800
www2.baidu.com http_port=8080 maxRequestsChild=900

2)组变量
组变量是指给指定主机设hi可以在 palybook 中直接使用的变量,如:

[aaa-vars]
net_server=ntp.example.org
nfs_server=nfs.example.org

3)组嵌套
在 Inventory 中的组还可以嵌套在其他的组,也可以向组中的主机指定变量,但是这些变量都只能在 ansible-playbook 工具中使用,直接使用 Ansible 工具并不会支持,如:

[aaa]
www1.baidu.com http_port=80 maxRequestsChild=800
www2.baidu.com http_port=8080 maxRequestsChild=900

[bbb]
192.168.100.100
192.168.100.101

[ccc:ddd]
aaa
bbb

(2)变量

在 Ansible 中变量名仅能由字母、数字和下划线组成,并且只能以字母开头。可以使用两种方式来传递 Ansible 变量。

1)通过命令行来传递变量。
在运行 playbook 的时候,可以通过命令行的方式传递变量,给 playbook 使用,如:

            ansible-playbook test.yml -e "http_port=8080"

2)在写 playbook 时定义,并且调用。

- hosts: aaa
  remote_user: root
  vars:          **  //定义变量**
  - package: apache      //变量定义 package
  - server: httpd             //变量定义 server

  tasks:
  - name: check latest
    yum: name={{ package }} state=latest           //调用变量  package
  - name: start apache
    service: name={{ server }} state=started        //调用变量  server

(3)条件测试

1)when 就是条件判断,你给与的条件成立,它就会执行 tasks 里的任务,如果不满足就不执行。

- hosts: aaa
  remote_user: root

  tasks:
  - name: install apache
    yum: name=httpd
    when:
     - ansible_distribution == "CentOS"     //满足条件 1
     - ansible_distribution_major_version == "6"   //满足条件 2


2)迭代,当需要执行重复任务时,如果一个一个写,就很麻烦,这时就需要用到 迭代,把需要重复执行的动作,定义为 item 变量并进行引用,然后通过 with_items 语句来指明元素。

- hosts: aaa
  remote_user: root

  tasks:
  - name: install pachages
    yum: name={{ item }} state=latest
    with_items:
    - httpd
    - openssh
    - mysql

Hosts 和 Users 介绍

palybook 的设计目的就是为了让某些主机以某个用户的身份去执行相应的任务。其中用于执行任务的主机用 hosts 定义,执行用户用 remote_user 来定义。如下:

- hosts: aaa
  remote_user: root

remote_user 可以定义指定用户通过 sudo 的方法在被管理主机上运行执行

- hosts: aaa
  remote_user: root
  become: yes
  become_user: oracle    切换用户为Oracle

任务列表和 action 介绍

  • > play 的主体是 任务列表(Tasks list)。任务列表中的任务按照次序逐个在hosts 中指定的所有主机上执行,在顺序执行这些任务时,如果有错误发生将会回滚。
  • > task 的任务是按照指定的参数去执行模块,每个 task 都使用 name 输出 palybook 的运行结果,一般输出的内容为描述该任务执行的步骤,如果没有提供将输出 action 的运行结果。
  • 列如:
- hosts: aaa
  remote_user: root

  tasks:
  - name: install pachages          // name: 自定义名称
    yum: name=httpd state=latest    // yum:安装 httpd 服务,检测是否是最新版本
  - name: disable selinux
    command: /sbin/setenforce 0       //关闭selinux
  - name: disable firewall
    command: systemctl stop firewalld    //关闭防火墙
  - name: apache
    service: name=httpd enabled=true state=started    //启动httpd服务,设置为开启自启

        ansible-playbook -C aaa.yml    检测语法与过程是否正确,不会正真的执行!

Handlers 介绍

Handlers 用于当关注的资源变化的时候采取的操作。在 notify 中累出的操作便成为 handler,也就是在 notify 中需要条用 handler 中定义的操作。而 notify 这个动作 在每个 play 的最后被触发,仅在所有的变化发生完成后一次性地执行指定操作。

Templates 介绍

Templates 可以看作是一个编译过的模板文件,用来产生目标文本,传递变量给模板去替换里面中的标记。

准备一个配置文件模板,必须以 .j2 格式。再对模板进行编辑,统一模板。
[[email protected] ~]# vim /etc/httpd/conf/httpd.conf.j2

- hosts: aaa
  remote_user: root

  tasks:
  - name: install pachages
    yum: name=httpd state=latest
  - name: disable selinux
    command: /sbin/setenforce 0
  - name: file to httpd
    template: src=/etc/httpd/conf/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf

Tages 介绍

如果多次执行修改 playbook 会涉及到一些没有变化的代码,可以使用tags 让用户选择跳过没有变化的代码,只运行 tags 标记的代码。它就是一个 “ 标签 ” 。

原文地址:http://blog.51cto.com/13746824/2309868

时间: 2024-10-16 22:41:18

自动化运维-Ansible (第三部:Playbook 介绍)的相关文章

自动化运维Ansible之Playbook剧本(持续更新)

附上前两篇关于Ansible的博客地址,以供查阅,欢迎学习交流!自动化运维之Ansible概述及Ansible部署Ansible命令应用之常用模块 Playbook简介 playbook是ansible用于配置,部署,和管理被控节点的剧本. 通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态.playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成. 也可以这么理解,playbook 字面意思,即剧本,现实中

Linux下的自动化运维ansible工具

什么是自动化运维     随着信息时代的持续发展,IT运维已经成为IT服务内涵中重要的组成部分.面对越来越复杂的业务, 面对越来越多样化的用户需求,不断扩展的IT应用需要越来越合理的模式来保障IT服务能灵活便捷.安 全稳定地持续保障,这种模式中的保障因素就是IT运维(其他因素是更加优越的IT架构等).从初期的 几台服务器发展到庞大的数据中心,单靠人工已经无法满足在技术.业务.管理等方面的要求,那么标 准化.自动化.架构优化.过程优化等降低IT服务成本的因素越来越被人们所重视.其中,自动化最开始作

自动化运维Ansible批量部署服务+shell脚本批量推送公钥

一.概述分析 由于互联网的快速发展导致产品更新换代速度逐渐加快,运维人员每天都要进行大量的维护操作,仍旧按照传统方式进行维护会使得工作效率低下.这时,部署自动化运维就可以尽可能安全.高效地完成这些工作.一般会把自动化运维工具划分为两类:一类是需要使用代理工具的,也就是基于专用的ABem程序来完成管理功能,如: Puppet.Func. Zabbix等:另外一类是不需要配置代理工具的,可以直接基于SSH服务来完成管理功能,如: Ansible. Fabric等. - 下面介绍几款功能类似的自动化运

自动化运维Ansible之playbook剧本的使用

YAML简介 YAML是一种表达资料序列的格式,由于参考了其他多种语言,所以具有很高的可读性.其特性如下: 具有很好的可读性,易于实现 表达能力强,扩展性好 和脚本语言的交互性好 有一个一致的信息模型 可以基于流来处理 1.YAML中两种常用的数据类型,分别是list和directory list -teacher -student 2.列表的所有元素均使用"-"开头 directory 3.字典通过key和value进行标识如: name:zhangsan job:teacher a

3.2 企业自动化运维ansible

ansible的Host-pattern ansible的Host-pattern 匹配主机的列表All :表示所有Inventory中的所有主机 ansible all –m ping:通配符 ansible "" -m ping 这个"*"号相当于all全部主机 ansible 192.168.1.* -m ping ansible "*srvs" -m ping 或关系 ansible "websrvs:appsrvs"

自动化运维Ansible之Roles部署配置LAMP架构

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

自动化运维-Ansible (第二部)

Ansible 命令应用基础 之前的一篇文章讲到了Ansible 的安装和作用,有兴趣的可以看看Ansible 介绍与安装.学习 ansible 就是重新学习一次命令和语法. Ansible 可以使用命令行进行自动化管理,基本语法如下: ansible <host-patterm> [-m module_name] [-a args] <host-patterm>:对哪些主机生效 [-m module_name]:要使用的模块 [-a args] :模块特有参数 Ansible 的

自动化运维Ansible实践(一)

第 1 章 Ansible概述 1.1 IT自动化的好处1.1.1 团队影响? 节省时间,提高工作效率? 消除重复任务? 更少的错误风险? 改善协作和工作满意度1.1.2 企业影响? 克服复杂性? 更多创新资源? 加强问责制和合规性1.2 Ansible是什么Ansible是一种IT自动化工具.它可以配置系统,部署软件以及协调更高级的IT任务,例如持续部署,滚动更新.Ansible适用于管理企业IT基础设施,从具有少数主机的小规模到数千个实例的企业环境.Ansible也是一种简单的自动化语言,可

自动化运维Ansible实践(二)

上篇提到了ansible基本安装.配置及命令行使用,这篇分享下ansible的高级用法即playbook,在生产环境如果需要完成负责任务,如大批量服务安装配置等,可以采用playbook方式来完成,高效且易于维护. 第 1 章 Playbook基本使用 使用Playbook的好处特点? 易读的编排语言? 适合配置管理和应用部署? 非常适合部署复杂的工作先来认识一下Playbook自动部署Nginx main.yml hosts: webserversvars:hello: Ansible tas