Playbook创建和配置教程介绍
Ansible 是一种基础设施即代码工具,可让你使用单个控制节点来管理和监控多个远程服务器。
借助 Ansible,你可以使用Playbook管理远程服务器。这些Playbook将指令中继到远程服务器并允许它们执行预定义的任务。
如何创建和配置Playbook?在本教程中,我们将介绍 Ansible playbook 是什么、它们如何工作以及如何创建和执行它们,包括相关的创建和配置Playbook示例。
先决条件
- 一个 Linux 系统(我们使用的是 Ubuntu 20.04)
- 访问命令行/终端窗口
- Ansible 安装和配置
什么是 Ansible Playbook?
Ansible playbook 是由 Ansible 网络中的远程计算机自动执行的作业指令列表。
注意:如果你还没有安装 Ansible,请查看我们在Ubuntu和Windows上安装 Ansible 的指南。
Ansible Playbook由Playbook组成。Plays 是一组精心设计的任务,一旦执行 playbook 就会完成。你可以将多个Playbook添加到一本Playbook中。
Plays 使用模块来定义需要进行哪些更改才能完成任务。每个模块为特定类别的工作提供一个框架,并且可以使用参数和变量进行定制。
Ansible Playbook保存为 . yaml 文件,这使得它们灵活且易于使用。
Playbooks 主要用于:
- 声明配置。
- 自动化某些需要很长时间手动完成的可重复任务。
- 同步或异步启动任务。
Playbook创建和配置教程:Ansible Playbook变量
Ansible playbook 使用变量来提供灵活性和易用性。变量可以是内置的(例如系统信息)或用户定义的。
注意: Ansible 中的所有变量名称都必须以字母或下划线开头,并且不能包含任何空格。数字是允许的。
在 Ansible playbook 中,变量是通过使用vars
关键字定义的:
在上面的例子中,我们定义了greeting
赋值为 的变量Hello World!
。
要访问该值,请将变量名称greeting
放在双大括号中:
一旦执行,Playbook就会打印出消息 Hello World!
除了具有单个值的变量之外,还有其他几种类型的 Ansible 变量。使用带有数组的变量,使用以下语法为一个变量分配多个值:
vars:
array_name:
- value1
- value2
…
- valueN
使用 访问特定值{{ array_name[value number] }}
,例如:
重要提示:数组值从零开始编号,因此请始终选择比要访问的数字低的数字。
带有字典的变量将多个值数组组合成一个变量:
vars:
array_name:
dictionary_name1:
item1: value1
item2: value2
dictionary_name2:
item1: value1
item2: value2
最后,特殊变量由 Ansible 预定义,用户无法设置。使用以下命令获取特殊变量列表:
ansible -m setup hostname
如何编写 Ansible Playbook?
如何创建和配置Playbook?使用系统上可用的任何文本编辑器创建 Ansible Playbook。例如,用 Nano 创建一个Playbook:
sudo nano /path/to/playbook/directory/playbook_name.yaml
Ansible playbook 遵循基本的 YAML 语法规则。
Playbook以三个 n 破折号 ( ---
)开头,后跟Playbook名称、执行Playbook的远程主机组的名称以及其他参数,例如become
(以管理员身份执行Playbook)。
下一部分包含所有用户定义的变量。它以与vars
上一节相同缩进级别的标记开始,然后是下一个缩进中的变量列表。
注意:按两次空格按钮足以创建一个新的缩进级别。
最后,任务列表以tasks
标签开始,缩进级别取决于任务类型和使用的参数。
YAML 语法允许你使用三个句点 ( …
) 来结束Playbook。尽管大多数Playbook以这种方式结束,但Playbook没有必要正常工作。
Ansible Playbook语法
在编写 Ansible playbook 时要牢记 YAML 语法的一些重要元素:
- 编写列表时,请在破折号 (
-
) 和列表条目之间使用空格。 - 使用
key: value
表格时,冒号后面必须跟一个空格。 - 布尔值既可以使用
yes
andno
,也可以使用true
andfalse
。 - 使用空格后跟
#
表示注释。
创建和配置Playbook示例:Playbook示例
如何创建和配置Playbook?对于此示例,我们将在 Ansible 安装文件夹中创建一个Playbook:
sudo nano /etc/ansible/example_playbook.yaml
该Playbook包含以下元素:
---
:表示Playbook的开始。name
:定义 Ansible Playbook的名称。hosts
:定义哪些主机执行Playbook。在上面的示例中,Playbook在清单文件中包含的所有主机上执行。become
: 指示远程主机以管理员身份执行Playbook。使用这个标签需要你在执行 playbook 时输入远程主机的管理员密码。vars
:定义变量——在我们的例子中,是一个以greeting
值命名的变量Hello World!
。tasks
:Playbook要执行的任务列表。在上面的示例中,第一个任务在远程主机上创建一个名为example_playbook的目录。第二个任务在该目录中创建一个新的文本文件,并将greeting
变量的值作为内容。...
:表示Playbook结束。
Playbook 是如何执行的?
Ansible playbook 按顺序执行,从上到下。这对于单个Playbook和这些Playbook中列出的任务都是正确的。
在上面的示例中,Playbook按顺序执行以下操作:
- 定义变量列表。
- 在远程主机上创建一个新文件夹。
- 在新文件夹中创建一个文本文件。
- 将变量的值添加为文件内容。
Playbook创建和配置教程:如何运行 Ansible Playbook
要执行 Ansible playbook,请使用:
ansible-playbook /path/to/playbook/directory/playbook_name.yaml
对于这篇文章的目的,我们将使用example_playbook.yaml
与-K
说法,这让我们对远程主机输入root用户密码和执行Playbook的管理:
ansible-playbook /etc/ansible/example_playbook.yaml -K
如何验证Playbook
如何创建和配置Playbook?使用--check
标志以检查模式运行Playbook以对其进行验证。这使你可以查看你的Playbook所做的更改,而无需实际进行更改:
ansible-playbook /path/to/playbook/directory/playbook_name.yaml --check
创建和配置Playbook示例 - 有关潜在更改的更详细概述,请使用--check
和--diff
标志的组合:
ansible-playbook /path/to/playbook/directory/playbook_name.yaml --check --diff
有用的 Ansible Playbook 提示
有几种方法可以使 Ansible playbook 更易于阅读和使用:
总是命名Playbook和任务
使用name
关键字来定义播放和任务的名称。添加简短而直接的名称可以更容易地一目了然地了解每个游戏或任务的作用。
使用评论
确保添加大量注释,尤其是在定义变量和任务时。
详细的注释有助于使Playbook更加清晰易懂。他们还可以帮助其他人使用你的Playbook。
格式化Playbook以方便使用
虽然你需要遵循缩进规则才能使 playbook 工作,但你仍然可以使用空格(例如任务之间的空行)使 playbook 更易于阅读。
Playbook创建和配置教程结论
如何创建和配置Playbook?完成本教程后,你现在应该对 Ansible playbook 有了一定的了解,包括如何创建和执行。Playbook 可用于定义远程主机要执行的各种任务,包括检查文件和文件夹是否存在。
如果你正在考虑 Ansible 替代方案,请在我们的Ansible vs Terraform vs Puppet文章中了解它们如何相互叠加。