三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Ansible 如何配置 inventory 文件实现多环境分组管理?

Ansible 如何配置 inventory 文件实现多环境分组管理?

推荐采用 inventory 目录结构而非单文件,将不同环境拆分为独立子目录,配合 group_vars 管理变量,适合需要隔离配置的多环境场景。

核心结论:使用目录组织 inventory 是 Ansible 官方推荐的多环境管理方式,能避免变量冲突并提升可维护性。

  • 适用场景:拥有开发、测试、生产等多套独立环境的项目
  • 前置准备:规划好目录层级,区分主机列表与变量文件
  • 验收标准:通过 ansible-inventory 命令确认主机分组与变量加载无误

推荐目录结构

建议在项目根目录下创建 inventories 文件夹,按环境名称划分子目录。每个环境目录包含 hosts 文件及 group_vars 文件夹。示例结构如下:

project/
├── inventories/
│   ├── prod/
│   │   ├── hosts
│   │   └── group_vars/
│   │       └── all.yml
│   └── dev/
│       ├── hosts
│       └── group_vars/
│           └── all.yml
└── site.yml

配置文件编写示例

hosts 文件内容

在 inventories/prod/hosts 中定义主机分组,支持 INI 或 YAML 格式。以下为 INI 格式示例:

[webservers]
web1.prod.example.com
web2.prod.example.com[dbservers]
db1.prod.example.com

group_vars 变量文件

在 inventories/prod/group_vars/all.yml 中定义该环境通用变量,格式为 YAML:

http_port: 80
admin_user: admin
ntp_server: ntp.prod.example.com

执行与验证

执行 playbook 时通过 -i 参数指定环境目录,不要依赖默认路径:

ansible-playbook -i inventories/prod site.yml

使用 ansible-inventory 命令查看特定环境的主机列表与变量加载情况,输出为 JSON 格式:

ansible-inventory `--list` -i inventories/prod

预期输出片段示例:

{"all": {"hosts": {"web1.prod.example.com": {}},"children": ["webservers","dbservers"]},"webservers": {"hosts": ["web1.prod.example.com","web2.prod.example.com"]}
}

检查 groups 变量是否包含预期环境参数,确认没有混入其他环境主机。

注意事项

  • 变量优先级:inventory 目录下的 group_vars 变量优先级通常较高,具体规则建议参考官方变量优先级文档,避免在同名变量上产生冲突。
  • 敏感信息:不要将密码等敏感信息明文提交到版本控制,建议配合 ansible-vault 加密存储。
  • 语法检查:修改 hosts 或变量文件后,先运行 ansible-inventory 验证语法,再执行 playbook。

参考来源

  • Ansible Documentation, "Working with Inventory", https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
  • Ansible Documentation, "Best Practices", https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html

原文链接:https://www.zjcp.cc/ask/11065.html

← 返回列表