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

相关推荐

  • mariadb基础应用

    mariadb基础应用 一、 前言 MariaDB is one of the most popular database servers in the world. It’s made by the original developers of MySQL and guaranteed to stay open source. Notable users …

    Linux干货 2016-12-16
  • Linux基本文本管理命令

    一.Linux上的文件管理命令都有哪些,其使用的方法及其相关演示1.cp命令:copy (文件复制功能)源文件,目标文件单源复制:cp [OPTION]…[-T] SOURCE DEST多源复制:cp [OPTION]…SOURCE…DIRECTORYcp [OPTION]… -T DIRECTORY SOURCE… 单源复制:cp [OPTION]…[-T…

    2017-09-20
  • Zabbix 发现功能中文文档

    说明:本文译自 zabbix 官方文档 Discovery 一节,包括 Network Discovery, Auto Registration和Low level discovery,同时对文章进行了补充以及更详细的说明。适用于Zabbix 2.0 版本。 发现包括三种类型: 网络发现 ( Network discovery) 主动客户端自动注册 ( Ac…

    Linux干货 2015-03-12
  • Linux 系统架构

    1.内核     1.1.组成部分         1.1.1.系统调用接口         1.1.2.进程管理 &n…

    Linux干货 2016-06-04
  • LINUX下的RPM应用

    一 前言 在进入RPM的应用前,关于可执行程序的一些基本知识有必要说明一下: 1 ABI:application binary interface,这是应用程序与系统间的协议,大家都知道同一个程序在不同的操作系统平台可能会无法执行,很大程度上就是因为ABI的不同,因此,对于可执行程序,选择对应操作系统平台是第一步 2 API:application prog…

    Linux干货 2017-04-17
  • WORD文档格式要求与linux学习规划

    WORD文档格式要求 一、封面               1、活动名称(隶书,小初号字,加粗)               2、主办单位、策划日期(宋体、3号字) 二、目录    &nbs…

    Linux干货 2016-12-12