Playbook 使用 YAML 格式来定义一个或多个_游戏_。剧目是一组有序的任务,这些任务的安排方式是为了实现流程的自动化,例如设置 Web 服务器或将应用程序部署到生产中。
在 playbook 文件中,游戏被定义为一个 YAML 列表。一个典型的游戏首先要确定哪些主机是该特定设置的目标。这是由hosts 指令完成的。
将hosts 指令设置为all 是一个常见的选择,因为你可以在执行时通过运行带有-l 参数的ansible-playbook 命令来限制一个游戏的目标。这允许你在不同的服务器或组上运行相同的游戏手册,而不需要每次都改变游戏手册文件。
首先,在你的主文件夹上创建一个新的目录,你可以在那里保存你的练习游戏书。首先,确保你是在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 主机的游戏。它包含一个打印调试信息的任务。
注意:我们将在本系列的下一节中进一步了解任务。
在你的playbook-01.yml 文件中添加以下内容。
~/ansible-practice/playbook-01.yml
---
- hosts: all
tasks:
- name: Print message
debug:
msg: Hello Ansible World
完成后保存并关闭该文件。如果你使用的是nano ,你可以通过输入CTRL+X ,然后输入Y 和ENTER 来进行确认。
要在你在清单文件中设置的服务器上尝试这个游戏规则,用你在本系列介绍中运行连接测试时使用的相同连接参数运行ansible-playbook 。在这里,我们将使用一个名为inventory 的目录文件和sammy用户来连接到远程服务器,但请确保改变这些细节以符合你自己的目录文件和管理用户。
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默认执行一个额外的任务,收集关于远程节点的信息(称为_事实_)。因为事实可以用在playbook上,以更好地定制任务的行为,所以事实收集任务必须在执行任何其他任务之前发生。
我们将在本系列的后面一节中学习更多关于Ansible事实的知识。