Ansible Inventory 完全指南:主机清单配置详解
Ansible Inventory 配置详解:主机清单管理完全指南
什么是 Inventory
Inventory(主机清单)是 Ansible 管理目标主机的列表。它定义了要管理的主机、分组、连接方式等信息。Ansible 支持多种 Inventory 格式和配置方式。
Inventory 格式
INI 格式
这是最常用的格式,简单直观:
[webservers]
web1.example.com
web2.example.com
192.168.1.10
192.168.1.11
[dbservers]
db1.example.com
db2.example.com
[production:children]
webservers
dbservers
[production:vars]
ansible_user=ansible
ansible_ssh_private_key_file=~/.ssh/ansible_key
YAML 格式
YAML 格式更加结构化,适合复杂配置:
all:
children:
webservers:
hosts:
web1.example.com:
ansible_host: 192.168.1.10
web2.example.com:
ansible_host: 192.168.1.11
vars:
http_port: 80
dbservers:
hosts:
db1.example.com:
db2.example.com:
vars:
db_port: 3306
vars:
ansible_user: ansible
ansible_ssh_private_key_file: ~/.ssh/ansible_key
主机分组
静态分组
[webservers]
web1 ansible_host=192.168.1.10
web2 ansible_host=192.168.1.11
[webservers:vars]
ansible_user=ansible
ansible_port=2222
嵌套分组
[webservers]
web1
web2
[dbservers]
db1
db2
[appservers]
app1
app2
[production:children]
webservers
dbservers
appservers
主机变量
行内变量
[webservers]
web1 ansible_host=192.168.1.10 ansible_user=ubuntu ansible_port=22
web2 ansible_host=192.168.1.11 ansible_user=ubuntu
组变量
[webservers]
web1
web2
[webservers:vars]
ansible_user=ansible
ansible_ssh_private_key_file=~/.ssh/id_rsa
http_port=80
https_port=443
连接变量
| 变量 | 说明 | 示例 |
|---|---|---|
| ansible_host | 主机地址 | 192.168.1.10 |
| ansible_port | SSH 端口 | 2222 |
| ansible_user | SSH 用户 | ansible |
| ansible_password | SSH 密码 | secret |
| ansible_ssh_private_key_file | SSH 密钥文件 | ~/.ssh/id_rsa |
| ansible_connection | 连接类型 | local/ssh/winrm |
| ansible_python_interpreter | Python 路径 | /usr/bin/python3 |
| ansible_become | 是否提权 | true/false |
| ansible_become_method | 提权方式 | sudo/su |
| ansible_become_user | 提权用户 | root |
动态 Inventory
动态 Inventory 可以从云平台、CMDB 等外部来源获取主机信息。
使用 AWS EC2 动态 Inventory
# 安装 AWS 动态 Inventory 插件
pip install boto3 boto
# 创建配置文件
cat > aws_ec2.yml << EOF
plugin: aws_ec2
regions:
- us-east-1
filters:
instance-state-name: running
tag:Environment:
- production
keyed_groups:
- key: tags.Environment
prefix: env_
- key: tags.Application
prefix: app_
EOF
# 使用动态 Inventory
ansible-playbook -i aws_ec2.yml playbook.yml
使用脚本生成 Inventory
#!/bin/bash
# dynamic_inventory.sh
echo '{"webservers": {"hosts": ["web1", "web2"]}}'
# 使脚本可执行
chmod +x dynamic_inventory.sh
# 使用脚本
ansible-playbook -i dynamic_inventory.sh playbook.yml
Inventory 文件位置
Ansible 按以下顺序查找 Inventory 文件:
- 命令行指定:
-i inventory.ini - 环境变量:
ANSIBLE_INVENTORY - 配置文件:
ansible.cfg中的inventory选项 - 默认位置:
/etc/ansible/hosts
测试 Inventory
# 列出所有主机
ansible all -i inventory.ini --list-hosts
# 列出特定组的主机
ansible webservers -i inventory.ini --list-hosts
# 查看主机变量
ansible web1 -i inventory.ini -m setup
# 验证 Inventory 语法
ansible-inventory -i inventory.ini --list
高级技巧
使用通配符和范围
[webservers]
web[01:10].example.com # web01 到 web10
[dbservers]
db[a:f].example.com # dba 到 dbf
[appservers]
app[1:3:2] # app1, app3(步长为2)
使用变量文件
# inventory.ini
[webservers]
web1
web2
[webservers:vars]
@webservers_vars.yml
webservers_vars.yml:
---
http_port: 80
https_port: 443
document_root: /var/www/html
最佳实践
- 结构化组织: 按环境、应用、功能等维度分组
- 使用变量: 避免硬编码,使用变量管理配置差异
- 版本控制: 将 Inventory 文件纳入 Git 管理
- 敏感信息加密: 使用 Ansible Vault 加密密码等敏感信息
- 文档化: 为复杂的 Inventory 结构添加注释
总结
Inventory 是 Ansible 的基础,合理组织和管理 Inventory 对于自动化运维至关重要。通过本文的学习,你已经掌握了 Inventory 的格式、分组、变量管理和动态配置等知识。接下来可以深入学习 Playbook 语法、模块使用等内容。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。







