Ansible 零基础到精通实战指南
项目描述
Ansible是一款开源的IT自动化引擎,可实现配置管理、应用部署、服务编排等运维自动化操作。本教程通过14天的系统学习路径,从基础概念到企业级实战项目,帮助开发者掌握Ansible的核心功能与最佳实践。
功能特性
- 全栈自动化:支持Linux/Windows系统配置、网络设备管理、云资源编排
-
- 无代理架构:通过SSH协议实现远程管理,无需在目标节点安装客户端
-
- 幂等性设计:确保操作重复执行时系统状态一致
-
- 模块化组件:提供2000+内置模块,支持自定义扩展
-
- 多环境支持:兼容物理机、虚拟机、容器和主流云平台
-
- 策略即代码:通过YAML文件实现基础设施合规性管理
安装指南
基础环境要求
- Python 3.8+
-
- SSH客户端
-
- 控制节点:Linux/macOS/Windows WSL
安装步骤
# 安装Ansible核心
pip install ansible# 安装AWS相关组件
pip install boto3
ansible-galaxy collection install amazon.aws# 验证安装
ansible --version
认证配置
# 配置免密登录
ssh-copy-id -f "-o IdentityFile ~/.ssh/key.pem" user@host# 创建Ansible Vault加密凭证
openssl rand -base64 2048 > vault.pass
ansible-vault create credentials.yml --vault-password-file vault.pass
使用说明
基础示例:静态资源部署
# apache_deploy.yml
- name: 部署Web服务
- hosts: webservers
- tasks:
- - name: 安装Apache
- apt:
- name: apache2
- state: latest
- - name: 复制静态页面
- template:
- src: templates/index.html.j2
- dest: /var/www/html/index.html
- ```
### AWS动态清单示例
```python
#!/usr/bin/env python
# ec2_inventory.py
import boto3
ec2 = boto3.client('ec2')
response = ec2.describe_instances()
# 生成动态主机清单...
条件执行示例
- name: 关闭Ubuntu实例
- hosts: all
- gather_facts: yes
- tasks:
- - name: 关机操作
- command: /sbin/shutdown -h now
- when: ansible_distribution == "Ubuntu"
- ```
## 核心代码解析### 1. 角色目录结构
web_server/ ├── defaults/ # 默认变量 ├── files/ # 静态文件 ├── handlers/ # 触发器 ├── meta/ # 依赖声明 ├── tasks/ # 主任务链 ├── templates/ # Jinja2模板 └── vars/ # 私有变量
### 2. 策略即代码实现
```yaml
# policy_as_code.yml
- name: 审计S3存储桶策略
- hosts: localhost
- tasks:
- - name: 检查公开访问权限
- amazon.aws.s3_bucket_info:
- name: "{{ bucket_name }}"
- register: bucket_info- name: 报告违规存储桶- debug:- msg: "发现公开存储桶: {{ bucket_info.buckets[0].name }}"- when: bucket_info.buckets[0].acl.grants|selectattr('permission','equalto','FULL_CONTROL')|list|length > 0- ```
### 3. 网络自动化模块
```yaml
- name: 配置网络设备
- hosts: routers
- connection: network_cli
- tasks:
- - name: 更新ACL规则
- ios_config:
- lines:
- - access-list 101 permit tcp any any eq 22
- - access-list 101 deny ip any any
- save_when: changed
- ```
- 更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)