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


