简介
本教程将指导你找到默认的 Ansible 清单目录,在该目录中你可以为 Ansible 部署定义主机和组。了解清单目录对于使用 Ansible 有效管理你的基础设施至关重要。
本教程将指导你找到默认的 Ansible 清单目录,在该目录中你可以为 Ansible 部署定义主机和组。了解清单目录对于使用 Ansible 有效管理你的基础设施至关重要。
Ansible 清单是基础设施自动化的一个基本组件,用于定义和组织目标主机,以进行配置管理和部署。它充当服务器、组及其连接参数的集中映射。
Ansible 支持多种清单文件格式:
格式 | 扩展名 | 描述 |
---|---|---|
INI | .ini | 传统的键值配置 |
YAML | .yml/.yaml | 结构化的、人类可读的格式 |
动态 | .py | 通过编程生成的清单 |
在 Ubuntu 22.04 上创建一个简单的清单文件(hosts
):
[webservers]
web1 ansible_host=192.168.1.100 ansible_user=ubuntu
web2 ansible_host=192.168.1.101 ansible_user=ubuntu
[databases]
db1 ansible_host=192.168.1.200 ansible_user=ubuntu
清单文件允许指定关键的连接参数:
ansible_host
:目标机器的 IP 地址ansible_user
:SSH 登录用户名ansible_port
:自定义 SSH 端口ansible_ssh_private_key_file
:SSH 密钥路径Ansible 清单通过变量和嵌套组实现灵活的主机组织:
[production:children]
webservers
databases
[production:vars]
environment=prod
deployment_region=us-east-1
这种结构支持通过可扩展、模块化的配置进行复杂的基础设施管理。
Ansible 支持多种清单配置技术,以便高效地组织和管理基础设施。了解这些技术能够实现精确的主机管理和连接设置。
[webservers]
web1 ansible_host=192.168.1.100 ansible_user=ubuntu
web2 ansible_host=192.168.1.101 ansible_user=ubuntu
[databases]
db1 ansible_host=192.168.1.200 ansible_user=ubuntu
[production:children]
webservers
databases
all:
hosts:
web1:
ansible_host: 192.168.1.100
ansible_user: ubuntu
db1:
ansible_host: 192.168.1.200
ansible_user: ubuntu
children:
webservers:
hosts:
web1:
databases:
hosts:
db1:
参数 | 描述 | 示例 |
---|---|---|
ansible_host | 目标机器 IP | 192.168.1.100 |
ansible_user | SSH 用户名 | ubuntu |
ansible_port | 自定义 SSH 端口 | 22 |
ansible_ssh_private_key_file | SSH 密钥路径 | /home/user/.ssh/id_rsa |
[datacenter:children]
webservers
databases
[datacenter:vars]
ansible_connection=ssh
environment=production
动态清单允许通过编程方式生成主机列表:
#!/usr/bin/env python3
import json
def get_inventory():
return {
'webservers': {
'hosts': ['web1', 'web2'],
'vars': {'http_port': 80}
}
}
print(json.dumps(get_inventory(), indent=2))
这种方法为复杂的基础设施环境提供了灵活、自动化的主机管理。
动态清单通过以编程方式生成主机列表,实现自动化、可扩展的基础设施配置。
#!/usr/bin/env python3
import boto3
import json
def get_ec2_inventory():
ec2 = boto3.client('ec2')
instances = ec2.describe_instances()
inventory = {
'webservers': {
'hosts': [
instance['PrivateIpAddress']
for reservation in instances['Reservations']
for instance in reservation['Instances']
if instance.get('PrivateIpAddress')
]
}
}
return inventory
print(json.dumps(get_ec2_inventory(), indent=2))
插件类型 | 功能 | 使用场景 |
---|---|---|
AWS EC2 | 云发现 | 动态主机供应 |
GCP Compute | 谷歌云集成 | 自动化基础设施 |
OpenStack | 私有云管理 | 可扩展部署 |
[webservers:vars]
ansible_python_interpreter=/usr/bin/python3
deploy_environment=production
[databases:vars]
backup_schedule=daily
performance_tier=high
## 针对特定组
ansible webservers -m ping
## 使用模式过滤主机
ansible 'webservers:&production' -m command -a 'uptime'
## 排除特定主机
ansible 'all:!deprecated' -m setup
plugin: constructed
strict: false
groups:
web_servers: "'web' in inventory_hostname"
prod_servers: "environment == 'production'"
这种方法为跨不同环境提供了灵活的、可编程的基础设施管理。
在本教程中,你已经学习了如何找到默认的 Ansible 清单目录、对其进行配置以及定义主机和组。通过了解清单结构,你可以有效地使用 Ansible 来管理你的基础设施并自动化你的部署。遵循清单管理的最佳实践将确保你的 Ansible 工作流程具有可扩展性和可维护性。