Ansible 动态 Inventory:自动发现云服务器
·
Ansible 动态 Inventory:云服务器自动发现
动态 Inventory 允许 Ansible 通过脚本实时获取目标主机信息,特别适用于云环境自动发现服务器实例。以下是实现原理和步骤:
核心原理
-
动态脚本生成 Inventory
通过调用云平台 API(如 AWS EC2、阿里云 ECS)获取实例信息,返回 JSON 格式数据: $$ \text{API 请求} \rightarrow \text{JSON 响应} \xrightarrow{\text{Ansible 解析}} \text{动态主机清单} $$ -
主机分组逻辑
按实例标签/元数据自动分组,例如:"tag_Env_Prod": { "hosts": ["192.0.2.1", "192.0.2.2"], "vars": {"ansible_user": "ec2-user"} }
实现步骤(以 AWS 为例)
-
安装依赖包
pip install boto3 # AWS Python SDK -
创建动态脚本
aws_ec2.py#!/usr/bin/env python import boto3 import json ec2 = boto3.resource('ec2') instances = ec2.instances.filter(Filters=[{'Name': 'instance-state-name', 'Values': ['running']}]) inventory = {"_meta": {"hostvars": {}}} for instance in instances: public_ip = instance.public_ip_address inventory["_meta"]["hostvars"][public_ip] = { "ansible_ssh_host": public_ip, "instance_id": instance.id } # 按标签分组 for tag in instance.tags: if tag['Key'] == 'Env': group = f"env_{tag['Value']}" inventory.setdefault(group, {"hosts": []})["hosts"].append(public_ip) print(json.dumps(inventory)) -
配置 Ansible 使用脚本
在ansible.cfg中指定:[defaults] inventory = ./aws_ec2.py -
执行 playbook
ansible-playbook -i aws_ec2.py deploy.yml
关键优势
- 实时性:自动发现新增/删除的云服务器
- 自动化分组:利用元数据(如标签、区域)动态创建主机组
- 减少维护:无需手动更新静态 Inventory 文件
注意:脚本需赋予执行权限 (
chmod +x aws_ec2.py),并配置云平台 API 访问密钥(如 AWS 的~/.aws/credentials)。其他云平台实现逻辑类似,只需替换对应 SDK 和 API 参数。
更多推荐



所有评论(0)