Bootstrap

自动化运维工具ansible:(二)playbook剧本的讲解与应用

目录

一:playbook概述

1.1playbook介绍

1.2 Ansible playbook使用场景

1.3yaml基本语法规则

1.4yaml支持的数据结构

1.5示例

二:Inventory中变量

2.1inventor 变量参数 

三:playbook示例 

3.1为每个任务定义远程执行用户 

3.2指定远程主机切换用户执行剧本 

3.3tasks忽略错误,强制返回成功 

3.4针对多个主机节点执行剧本 

3.5Handlers介绍

3.6引入变量 

3.6.1通过ansible命令参数-e传递

3.6.2直接在yaml中定义,或者内置变量 

3.6.3引用主机清单内自定义变量 

3.7条件测试 

3.7.1单条件判断

3.7.2多条件判断 

3.7.3组条件判断 

3.7.4迭代

一:playbook概述

1.1playbook介绍

playbook 是 ansible 用于配置,部署,和管理被控节点的剧本。通过 playbook 的详细描述,执行其中的一系列 tasks ,可以让远端主机达到预期的状态。playbook 就像 Ansible 控制器给被控节点列出的的一系列 to-do-list ,而被控节点必须要完成。也可以这么理解,playbook 字面意思,即剧本,现实中由演员按照剧本表演,在 Ansible 中,这次由计算机进行表演,由计算机安装,部署应用,提供对外服务,以及组织计算机处理各种各样的事情。

playbook是剧本的意思
通过 task 调用 ansible 的模块将多个 play 组织在一 个playbook中运行。

playbook本身由以下各部分组成:

  • Tasks: 任务,即调用模块完成的某操作;原理和事务一样,要么一起执行,要么一起不执行。
  • Variables: 变量;声明变量的三个场景:hosts文件中定义、剧本中定义、在命令中加上-e定义。
  • Templates: 模板;定义模板同一格式,解决每个服务可能因格式不一样而不兼容的问题。
  • Handlers: 处理器,当某条件满足时,触发执行的操作
  • Roles: 角色;将任务分类执行,彼此之间互不干扰

Playbook 的核心元素:

  • Hosts:主机组;
  • Tasks:任务列表;
  • Variables:变量,设置方式有四种;
  • Templates:包含了模板语法的文本文件;
  • Handlers:由特定条件触发的任务;

1.2 Ansible playbook使用场景

  • 执行一些简单的任务,使用ad-hoc命令可以方便的解决问题,但是有时一个设施过于复杂,需要大量的操作时候,执行的ad-hoc命令是不适合的,这时最好使用playbook。
  • 就像执行shell命令与写shell脚本一样,也可以理解为批处理任务,不过playbook有自己的语法格式。
  • 使用playbook你可以方便的重用这些代码,可以移植到不同的机器上面,像函数一样,最大化的利用代码。在你使用Ansible的过程中,你也会发现,你所处理的大部分操作都是编写playbook。可以把常见的应用都编写成playbook,之后管理服务器会变得十分简单。

1.3yaml基本语法规则

playbook yaml语法是换行空两格,-和:后必须空一格

YAML:是一种非标记语言。是用来写配置文件的语言,非常简洁合强大;

YAML语法和其他语言类似,也可以表达散列表、标量等数据结构

结构通过空格来展示,序列里配置项通过 - 来表示;Map里的键值用:来分隔;YAML的扩展名为yaml

  1. 大小写敏感
  2. 使用缩进表示层级关系
  3. 缩进时不允许使用tab键、只允许使用空格
  4. 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

语法介绍:

  1. 在单一档案中,可用连续三个连字号(---)区分多个档案。另外,还有选择性的连续三个点号( ... )用来表示档案结尾
  2. 次行开始正常写Playbook的内容,一般建议写明该Playbook的功能
  3. 使用#号注释代码
  4. 缩进必须是统一的,不能空格和tab混用
  5. 缩进的级别也必须是一致的,同样的缩进代表同样的级别,程序判别配置的级别是通过缩进结合换行来实现的
  6. YAML文件内容是区别大小写的,k/v的值均需大小写敏感
  7. k/v的值可同行写也可换行写。同行使用:分隔
  8. v可是个字符串,也可是另一个列表
  9. 一个完整的代码块功能需最少元素需包括 name: task
  10. 一个name只能包括一个task
  11. YAML文件扩展名通常为yml或yaml
hosts 定义节点,可以是组
remote_user 是你以什么用户身份进行登陆
tasks 是你的任务
become:yes 表示切换用户
become_user: mysql 表示切换到mysql用户,配合上一条使用
- name: 为下面执行的操作起名

1.4yaml支持的数据结构

  1. 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes)/ 字典(dictionary)
  2. 数组:一组按次序排列的值,又称为序列(sequence)/ 列表(list)
  3. 纯量:单个的、不可再分的值

1.对象:键值对的集合,又称为映射(mapping) /哈希(hashes) /字典(dictionary)
例如: name:Test Developer
     变量名:对象名  属性

2.数组: 一组按次序排列的值,又称为序列(sequence) / 列表(list)
例如: -Apple
     -Green

3.纯量: 单个的,不可再分的值
例如: number: 17.50
     变量名:数值

1.5示例

---
#安装与运行mysql服务
- hosts: node1
  remote_user: root
  tasks:
 
    - name: install mysql-server package
      yum: name=mysql-server state=present
    - name: starting mysqld service
      service: name=mysql state=started

我们的文件名称应该以 .yml

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;