介绍
Ansible 中的组变量允许定义适用于整个主机组的变量。它们提供了一种为特定主机组自定义 Ansible 行为并配置通用设置的方法。本次挑战将教你如何在 Ansible 清单(Inventory)中定义和使用组变量。
定义组变量
让我们首先学习如何在 Ansible 清单中定义组变量。这是一项基础技能,能够让你高效地管理不同主机组的配置。
任务
为特定的主机组定义组变量:
- 在
/home/labex/project目录下创建一个名为inventory的文件,内容如下:- 定义名为
web和db的组 - 为
web组添加变量http_port=80 - 为
db组添加变量db_port=3306 - 为了简化操作,使用
localhost作为主机,并将其同时添加到web和db组中
- 定义名为
要求
- 已预装 Ansible
- 已配置与受管主机的 SSH 连接
示例
完成此步骤后,你应该能够使用 Ansible 的 ping 模块来检查 web 组中主机的状态:
ansible web -i inventory -m ping
示例输出:
localhost | SUCCESS => {
"changed": false,
"ping": "pong"
}
在剧本中访问组变量
现在我们已经定义了组变量,接下来进入下一个关键步骤:在 Ansible 剧本(Playbook)中访问这些变量。这项技能将使你能够创建动态且灵活的剧本,以适应不同的主机组。
任务
在
/home/labex/project目录下创建一个名为my-playbook.yaml的新剧本文件,内容如下:- 将
hosts设置为web - 使用
debug模块访问并显示http_port组变量
- 将
使用
ansible-playbook命令运行该剧本,并指定清单文件。
要求
- 已预装 Ansible
- 已配置与受管主机的 SSH 连接
- 已创建并配置清单文件
示例
完成此步骤后,运行剧本应该产生类似于以下的输出:
PLAY [Print group variables] **************************************************
TASK [Gathering Facts] ********************************************************
ok: [localhost]
TASK [Print http_port variable] ************************************************
ok: [localhost] => {
"http_port": 80
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
总结
恭喜你!你已经完成了 Ansible 组变量挑战。你学习了如何在清单中定义组变量并在剧本中访问它们。这些技能是高效使用 Ansible 的重要组成部分,能够让你管理并自定义基础设施中不同主机组的配置。
通过有效地利用组变量,你可以创建更加灵活和模块化的自动化工作流。在继续你的 Ansible 学习之旅时,请尝试使用不同的组变量,并探索它们如何增强你的自动化流程。记住,实践是掌握这些概念的关键!


