该系列的一部分:
如何编写 Ansible Playbooks
Ansible 是一种现代配置管理工具,不需要在远程节点上使用代理软件,仅使用 SSH 和 Python 在托管服务器上进行通信和执行命令。本系列将带您了解可用于编写服务器自动化剧本的主要 Ansible 功能。最后,我们将看到一个实际示例,说明如何创建剧本以自动设置远程 Nginx Web 服务器并向其部署静态 HTML 网站。
Playbooks 使用 YAML 格式来定义一个或多个play。play 是一组有序的任务,它们以某种方式排列以实现流程自动化,例如设置 Web 服务器或将应用程序部署到生产中。
在剧本文件中,播放被定义为一个 YAML 列表。典型的游戏开始于确定哪些主机是该特定设置的目标。这是通过hosts
指令完成的。
将hosts
指令设置为all
是一个常见的选择,因为您可以通过运行ansible-playbook
带有-l
参数的命令来限制执行时播放的目标。这允许您在不同的服务器或组上运行相同的剧本,而无需每次更改剧本文件。
首先在您的主文件夹中创建一个新目录,您可以在其中保存练习手册。首先,确保您位于 Ubuntu 用户的主目录中。从那里,创建一个名为的目录ansible-practice
,然后使用以下cd
命令导航到该目录:
- cd ~
- mkdir ansible-practice
- cd ansible-practice
如果您遵循了所有先决条件,您应该已经有一个有效的清单文件。您现在可以将该文件复制到新ansible-practice
目录中。例如,如果您ansible
在主文件夹的目录中创建了测试清单文件,则可以使用以下命令将该文件复制到新目录:
- cp ~/ansible/inventory ~/ansible-practice/inventory
接下来,创建一个新的剧本文件:
- nano playbook-01.yml
以下 playbook 定义all
了给定库存中的 play 定位主机。它包含一个打印调试消息的任务。
注意:我们将在本系列的下一部分中了解有关任务的更多信息。
将以下内容添加到您的playbook-01.yml
文件中:
---
- hosts: all
tasks:
- name: Print message
debug:
msg: Hello Ansible World
完成后保存并关闭文件。如果您正在使用nano
,则可以通过键入CTRL+X
、 然后Y
和ENTER
进行确认。
要在您在清单文件中设置的服务器上试用此剧本,ansible-playbook
请使用您在本系列介绍中运行连接测试时使用的相同连接参数运行。在这里,我们将使用名为清单文件inventory
与萨米用户连接到远程服务器,但一定要改变这些细节,对齐用自己的清单文件和管理用户:
- ansible-playbook -i inventory playbook-01.yml -u sammy
你会看到这样的输出:
OutputPLAY [all] ***********************************************************************************
TASK [Gathering Facts] ***********************************************************************
ok: [203.0.113.10]
TASK [Update apt cache] **********************************************************************
ok: [203.0.113.10] => {
"msg": "Hello Ansible World"
}
PLAY RECAP ***********************************************************************************
203.0.113.10 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
您可能已经注意到,即使您在剧本中只定义了一个任务,但在播放输出中列出了两个任务。在每次播放开始时,Ansible 默认执行一项额外任务,用于收集有关远程节点的信息(称为事实)。因为可以在剧本上使用事实来更好地自定义任务的行为,所以事实收集任务必须在执行任何其他任务之前发生。
我们将在本系列的后面部分了解有关 Ansible 事实的更多信息。