Ansible playbook

目录

1.1        playbook简介… 1

1.2        Playbook使用场景… 1

1.3        playbook格式… 2

1.4        playbook语法介绍… 3

1.5        Playbook执行结果解析… 4

1.5.1      收集facts 5

1.5.2      执行tasks 6

1.5.3      报告结果… 6

1.6        ansible-playbook实战小技巧… 6

1.6.1      例子一… 7

1.6.2      例子二… 7

1.6.3      例子三… 8

1.1       playbook简介

playbookansible用于配置,部署,和管理被控节点的剧本。通过playbook的详细描述,执行其中的一系列tasks,可以让远端主机达到预期的状态。playbook就像Ansible控制器给被控节点列出的的一系列to-do-list,而被控节点必须要完成。

也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在Ansible中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。

1.2      Playbook使用场景

执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook,就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式,一会会介绍。

使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。在你使用Ansible的过程中,你也会发现,你所处理的大部分操作都是编写playbook

1.3      playbook格式

       playbookYMAL语言编写。YAML参考了其他多种语言,包括:XMLC语言、PythonPerl以及电子邮件格式RFC2822Clark Evans20015月在首次发表了这种语言,另外Ingy döt NetOren Ben-Kiki也是这语言的共同设计者。

YMAL格式是类似于JSON的文件格式,便于人理解和阅读,同时便于书写。首先学习了解一下YMAL的格式,对我们后面书写playbook很有帮助。以下为playbook常用到的YMAL格式。

l  文件的第一行应该以 ”—” (三个连字符)开始,表明YMAL文件的开始。

l  在同一行中,#之后的内容表示注释,类似于shell,python和ruby。

l  YMAL中的列表元素以”-”开头然后紧跟着一个空格,后面为元素内容。就像这样

- apple
- banana
- orange

等价于JSON的这种格式

[
 “apple”,
 “banana”,
 “orange”
]

l  同一个列表中的元素应该保持相同的缩进。否则会被当做错误处理。

l  play中hosts,variables,roles,tasks等对象的表示方法都是键值中间以”:”分隔表示,”:”后面还要增加一个空格。

l  YMAL的有很多的字符串可以解释为true或false:

    YMAL Truhy: true ,  True ,  TRUE ,  yes ,  Yes ,  YES ,  on ,  On ,  ON ,  y ,

    YMAL falthy: false ,  False ,  FALSE ,  no ,  No ,  NO ,  off ,  Off ,  OFF ,  n ,  N

样例如下:

Ansible playbook

关于YMAL的更多信息,请参考

http://baike.baidu.com/link?url=10WYbxN7mNFp1I3Dq4ZD0RyhSeBWDYMfe8OOyjWyZMweFnze7eunGEWQNqypT9vXABeysp798Ld16g9qtvTWtq#1_1

1.4      playbook语法介绍

对比上述格式,下面我们看一个安装部署mysql服务的案例。Ansible playbook

mysql.yml中,主要由三个部分组成。

hosts部分:使用hosts指示使用哪个主机或主机组来运行下面的tasks,每个playbook都必须指定hostshosts也可以使用通配符格式。主机或主机组在inventory清单中指定,可以使用系统默认的/etc/ansible/hosts,也可以自己编辑,在运行的时候加上-i选项,指定清单的位置即可。在运行清单文件的时候,–list-hosts选项会显示那些主机将会参与执行task的过程中。

remote_user:指定远端主机中的哪个用户来登录远端系统,在远端系统执行task的用户,可以任意指定,也可以使用sudo,但是用户必须要有执行相应task的权限。

tasks:指定远端主机将要执行的一系列动作。tasks的核心为ansible的模块,前面已经提到模块的用法。tasks包含name和要执行的模块,name是可选的,只是为了便于用户阅读,不过还是建议加上去,模块是必须的,同时也要给予模块相应的参数。

1.5      Playbook执行结果解析

使用ansible-playbook运行playbook文件,得到如下输出信息,输出内容为JSON格式。并且由不同颜色组成,便于识别。一般而言

绿色代表执行成功,系统保持原样

黄色代表系统代表系统状态发生改变

红色代表执行失败,显示错误输出。

Ansible playbook

在被控节点可以看到软件包已经安装并且mysqld服务以及启动。

Ansible playbook

对比playbook文件内容与执行结果,可以得出playbook的执行步骤。

Ansible playbook

下面依次分析执行步骤

1.5.1    收集facts

首先默认的第一个task就是收集远端被管主机的ansible元数据信息,也被称为factsfacts信息包括,远端主机发行版,IP地址,CPU核数,系统架构,主机名等等,然后这些元数据可以作为变量供后面的task使用。你可以使用如下命令查看元数据的具体信息。

ansible <hostpattern> -m setup [-i inventory_file]

如下所示

Ansible playbook

在你执行的过程中,你会看到有大量的facts信息,这里我只是截取一小部分。你也可以禁止ansible收集facts,在playbook中的hosts指令下面设置gather_facts指令即可。如下

Ansible playbookAnsible playbook

facts经常被用在条件语句模板当中,也可以用于根据指定的标准根据group_by模块创建动态主机组,我们后面会详细介绍,这里我简单列出一个facts的用法实例,使用条件判断语句关闭指定发行版的主机。

Ansible playbook

1.5.2    执行tasks

这里为实际执行的task,每个任务都给出了它们的执行状态,是否改变了机器的状态。

Ansible playbook

我们可以看到每个task都有自己定义的名称,我们也可以去除task的名称。Ansible playbook

然后查看输出信息

Ansible playbook

可以看到task没有名称了,一般我们建议使用name来标示任务,便于人更好的阅读。

1.5.3    报告结果

执行结果报告。第一次运行,系统状态改变了两次。

Ansible playbook

第二次运行,系统状态不再发生改变,这也说明了,ansible的幂等性,我们可以多次的重复执行一个playbook。而不用考虑系统重复执行task

Ansible playbook

1.6      ansible-playbook实战小技巧

上面执行playbook的过程中,我们使用了ansile-playbook命令,为了灵活的控制playbookansible提供了ansible-playbook命令行工具,可以一些调整playbook执行流的选项,这里举出一些有用的实例。更多用法请参考ansible-playbook –h

1.6.1    例子一

查看当前任务,然后指定从哪里开始执行任务

Ansible playbook

Ansible playbook

1.6.2    例子二

执行或者跳过playbook中指定的tag,修改mysql.yml增加tags指令。

Ansible playbook

如下,结果,可以知道—tags—skip-tags的区别。

Ansible playbook

1.6.3    例子三

使用—step来一步一步的确认命令。

Ansible playbook

提示:如果你感觉输出信息不够详细,使用-v选项,使用-vv选项,信息更加详细,信息最详细的为-vvvv选项,自行尝试。

 

回顾下今天所讲内容:

1、  playbook是什么

2、  playbook的基本格式

3、  playbook剧本组成

4、  playbook执行过程

5、  ansibel-playbook的几个基本案例

 

原创文章,作者:艾贺,如若转载,请注明出处:http://www.178linux.com/9570

(0)
艾贺艾贺
上一篇 2015-12-06
下一篇 2015-12-07

相关推荐

  • Linux文件管理和Bash特性

    一、Linux基本文件管理命令 主要介绍cp、mv、rm命令的基本用法以及使用示例 cp命令 cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录 cp (选项) (参数) 常用选项: -a:此参数的效果和同时指定”-dpR”参数相同,用于实现归档; -d:复制符号链接文件本身,而非其指向的源文件; -f:强行复制文件或目录,不论目标文件或目录是…

    Linux干货 2017-07-09
  • Linux系统程序包管理之RPM

    rpm包概述 RPM 是 Red at Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理工具;在Fedora 、Redhat、Mandriva、SuSE、YellowDog等主流发行版本,以及在这些版本基础上二次开发出来的发行版采用。 RPM包里面都包含什么?里面包含可执行的二进制程序,…

    Linux干货 2016-08-24
  • MYSQL数据库基础教程

    一、数据库介绍 1.数据库管理系统的产生背景 (1)数据时代的到来要求对数据进行有效和安全的管理 涉及的数据量大 数据不随程序的结束而消失 数据被多个应用程序共享 大数据时代的到来 (2)传统文件系统管理上的缺陷要求改变数据管理方式 编写应用程序不方便 数据冗余不可避免 应用程序依赖性 不支持对文件的并发访问 数据间联系弱 难以按用户视图表示数据 无安全控制…

    Linux干货 2017-10-05
  • linux第五周小结

    不知不觉已经第五周了,好快啊!这周我们主要讲了读命令,查找命令,压缩,解压缩,安装等命令,今天我总结一下查找命令 查找命令主要有:locate和find命令,但我们经常用到的也最实用的当属find,下面我重点总结一下find命令 有时可能需要在系统中查找具有某一特征的文件(例如文件权限、文件属主、文件长度、文件类型等等)。这样做可能有很多原因。可能出于安全性…

    2017-08-13
  • 网络25期第一周作业

    一、计算机硬件的组成及功能 1、控制器       控制器负责从存储器中取出指令,并对指令进行译码。控制器主要是由指令寄存器、译码器程序计数器、操作控制器等组成。 2、运算器      运算器又称算数逻辑单元,是计算机进行算术计算和逻辑计算的部件。 3、存储器 &nbs…

    Linux干货 2016-12-06
  • gzip压缩输出

    一、gzip介绍          gzip是GNU zip的缩写,它是一个GNU自由软件的文件压缩程序,也经常用来表示gzip这种文件格式。软件的作者是Jean-loup Gailly和Mark Adler。1992年10月31日第一次公开发布,版本号是0.1,目前的稳定版本是…

    Linux干货 2015-07-29