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智能小助手)