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 针对一组主机进行操作,有助于实现对不同主机执行不同任务的复制部署。

相关推荐
低头不见2 分钟前
一个服务器算分布式吗,分布式需要几个服务器
运维·服务器·分布式
麻芝汤圆11 分钟前
使用 MapReduce 进行高效数据清洗:从理论到实践
大数据·linux·服务器·网络·数据库·windows·mapreduce
赋创小助手16 分钟前
Gartner预计2025年AI支出达6440亿美元:数据中心与服务器市场的关键驱动与挑战
运维·服务器·人工智能·科技·架构
令狐少侠201133 分钟前
Ubuntu 24.04.2 LTS 系统安装python,创建虚拟环境
linux·python·ubuntu
the_nov38 分钟前
11.多线程-信号量-线程池
linux·c++
XAL11 小时前
Docker的备份与恢复
运维·docker·容器
黑蛋同志1 小时前
Anolis系统下安装Jenkins
运维·jenkins
海鸥811 小时前
为 Jenkins Agent 添加污点(Taint)容忍度(Toleration)
运维·jenkins
程序员JerrySUN1 小时前
Linux UART 驱动开发全解析:从原理到实战
linux·运维·驱动开发
热爱运维的小七2 小时前
从数据透视到AI分析,用四层架构解决运维难题
运维·人工智能·架构