Ansible(4)—— Playbook

目录

[一、Ansible Playbook :](#一、Ansible Playbook :)

[1、Play :](#1、Play :)

2、Playbook:

[二、Ansible Playbook 格式:](#二、Ansible Playbook 格式:)

1、空格:

[2、破折号( - ):](#2、破折号( - ):)

[3、Play 格式:](#3、Play 格式:)

三、查找用于任务的模块:

1、模块:

2、查找模块:

[(1)Ansible Content Collection :](#(1)Ansible Content Collection :)

[(2)ansible.builtin :](#(2)ansible.builtin :)

[四、运行 Playbook :](#四、运行 Playbook :)

1、语法检验:

[2、运行 Playbook :](#2、运行 Playbook :)

3、提高输出的详细程度:

[五、编写多个 Play( Multiple Play ) :](#五、编写多个 Play( Multiple Play ) :)


一、Ansible Playbook :

1、Play :

任务( task )指应用模块 ( module )来执行特定工作单元,而play 包含一系列 tasks ,在清单中选择一台或多台主机并按顺序运行。play 将一系列冗⻓而复杂的手动管理任务转变为可轻松重复的例程,且具有可预测的结果。

2、Playbook:

playbook 中则包含由一个或多个按特定顺序运行的 play 组成的列表 。Ansible 使用 playbook 可以轻松且可重复地对一组目标主机运行多项复杂任务,在 playbook 中,可将 play 内的任务序列保存为人类可读并可立即运行的形式。根据任务的编写方式,任务本身记录了部署应用或基础架构所需的步骤。

二、Ansible Playbook 格式:

playbook 是 YAML 格式的文本文件,扩展名通常为 yml,playbook 使用带空格字符的缩进来表示数据的结构,可以添加空行以增加可读性。

1、空格:

YAML 文件对缩进使用了多少空格没有严格的要求,但是有两个基本规则:

(1)层次结构中相同级别 的数据元素必须具有相同的缩进

(2)子项 必须父项缩进更多

注:编写 playbook 文件时,只能使用空格缩进,不能使用 Tab 键。但使用 vi 编辑器,可以通过编辑 $HOME/.vimrc 将 Tab 转化为 2 个空格。

2、破折号( - ):

playbook 以三个破折号( --- )作为文档开始的标记。

注:以三个点( ... )作为文档结束的标记,不过此标记在实践中经常被省略。

在开始标记与结束标记之间,playbook 由一组 plays 构成。YAML 列表中的 item一个破折号开始,后跟空格

3、Play 格式:

play 本身是 key-value 对的集合,同一 play 中的 keys 应该有相同缩进 。play 的第一行以破折号和空格开始

1)第一个 key:name描述play 的目的 。name key 是可选项,但推荐使用,有助于记录 playbook ;

2)第二个 key :hosts 属性指定运行 play 任务的主机

3)最后一个 key :tasks 属性表示这个 play 运行的任务列表。tasks 属性需列出要在主机上运行的任务,列表中的每个任务本身也都是键值对的集合。

三、查找用于任务的模块:

1、模块:

模块play 用于完成任务的工具 ,现已有数百个模块来执行不同的操作。模块使用完全限定集合名称 ( FQCN )命名,因此两个 Ansible Content Collection 中的不同模块也可以使用相同的名称,不会导致冲突。例如,ansible.builtin Ansible Content Collection 提供的 copy 模块将以 ansible.builtin.copy 为其 FQCN 。

2、查找模块:

(1)Ansible Content Collection :

Ansible Core 2.11 及更高版本会将任务所用模块打包到名为 Ansible Content Collection的集合中。每个 Ansible Content Collection 都包含模块和文档。

注:RHAAP 2.2 中的 ansible-navigator 还包含其他很多 Ansible Content Collection 。可通过运行 ansible-navigator collections 命令来浏览这些 collections 。在交互式 UI 中,可以键入冒号 ( : ) 后跟集合行号来获取更多的相关信息,包括模块列表及其提供的其他 Ansible 内容。也可对模块的行号执行相同操作,获取该模块的相关文档。按 Esc 键可以返回上一列表。

(2)ansible.builtin :

ansible-core 软件包提供名为 ansible.builtin 的单个 Ansible内容集合,且这些模块随时可用。如需 ansible.builtin 集合中的模块列表,可点此访问:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/

四、运行 Playbook :

1、语法检验:

在执行 playbook 前,可以先对其进行验证,确保语法正确无误。ansible-navigator run --syntax-check 命令,可用于验证 playbook 文件语法

注:(1)若语法验证失败,将报告语法错误,此时输出中包含语法问题在 playbook 中的大致位置。

(2)若直接使用 --C( --check )选项,Ansible 将报告在执行该 playbook 时会发生什么更改,但不会对受管主机进行任何实际更改。

2、运行 Playbook :

在控制节点上使用 ansible-navigator run 命令执行 playbook ,运行 playbook 时,将显示所执行的 play 、任务以及执行的的结果。使用 ansible-navigator run -m stdout命令可将 playbook 运行的输出结果打印到标准输出

注:(1)如未提供 -m stdout 选项,则 ansible-navigator 将以交互模式运行。

(2)前面讲述 playbook 的格式时说道:name 属性是可选项,但建议使用。此处可以看出 playbook 在执行时会显示 name 属性的值,因此对于具有多个 play 和 tasks 的 playbook ,使用 name 属性会给监控 playbook 的执行进程提供非常大的帮助,所用建议使用。

一般来说,Ansible playbook 中的任务是幂等的( idempotent ),可以安全地多次运行 playbook。如果目标托管主机已经处于正确的状态,则不应进行任何更改。

如,将上图中执行的 playbook 再次执行,此时所有的任务状态为 ok,且没有发生任何 change ,即不做任何更改。

注:社区 Ansible 提供名为 ansible-playbook 的早期工具,该工具的很多选项与 ansible-navigator run -m stdout 相同,且以控制节点为执行环境。但该工具不能使用自动化执行环境,红帽仅支持在 RHEL9 中使用该工具用于有限用例。

3、提高输出的详细程度:

ansible-navigator run 命令的默认输出并没有提供详细的信息,可使用 -v 选项增加输出内容,输出的详细程度如下表:

选项 描述
-v 显示任务结果
-vv 显示任务结果与任务配置
-vvv 显示关于受管主机连接情况的更多信息
-vvvv 在上述基础上,增加了与连接插件相关的额外详细程度选项,包括受管主机上用于执行脚本的用户,以及所执行的脚本。

五、编写多个 Play( Multiple Play ) :

若一个 playbook 中含有多个 play,则每个 play 针对一组主机进行操作,有助于实现对不同主机执行不同任务的复制部署。

相关推荐
飞雪20071 小时前
Alibaba Cloud Linux 3 在 Apple M 芯片 Mac 的 VMware Fusion 上部署的完整密码重置教程(二)
linux·macos·阿里云·vmware·虚拟机·aliyun·alibaba cloud
路溪非溪1 小时前
关于Linux内核中头文件问题相关总结
linux
木易双人青1 小时前
01-Docker-简介、安装与使用
运维·docker·容器
专注API从业者2 小时前
Python + 淘宝 API 开发:自动化采集商品数据的完整流程
大数据·运维·前端·数据挖掘·自动化
Lovyk4 小时前
Linux 正则表达式
linux·运维
Fireworkitte4 小时前
Ubuntu、CentOS、AlmaLinux 9.5的 rc.local实现 开机启动
linux·ubuntu·centos
sword devil9005 小时前
ubuntu常见问题汇总
linux·ubuntu
ac.char5 小时前
在CentOS系统中查询已删除但仍占用磁盘空间的文件
linux·运维·centos
中科米堆7 小时前
中科米堆CASAIM自动化三维测量设备测量汽车壳体直径尺寸
运维·自动化·汽车·视觉检测
淮北也生橘127 小时前
Linux的ALSA音频框架学习笔记
linux·笔记·学习