Ansible 零基础到精通实战指南

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动态清单示例

#!/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. 策略即代码实现

# 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. 网络自动化模块

- 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智能小助手)
公众号二维码

posted @ 2025-08-03 21:31  qife  阅读(3)  评论(0)    收藏  举报