Ansible 核心功能模块与应用场景全解析

一、软件管理类模块

1. yum/dnf 模块

  • 功能:管理 RPM 软件包(安装/升级/删除)
  • 典型场景
    • 批量部署基础环境(如安装 Nginx/MySQL)
    • 自动化更新安全补丁
  • 示例参数
    - name: Install httpd 
      yum:
        name: httpd 
        state: latest 
    
    

2. apt 模块

  • 功能:管理 DEB 软件包(Ubuntu/Debian)
  • 典型场景
    • 配置 APT 源仓库
    • 安装特定版本软件
  • 示例参数
    ---
    - name: 管理 DEB 软件包 
      hosts: ubuntu_servers 
      become: yes  # 需要 root 权限 
      vars:
        target_package: nginx 
        package_version: "1.18.0-0ubuntu1"
     
      tasks:
        # 场景 1:配置 APT 源仓库 
        - name: 添加 Docker 官方 APT 源 
          ansible.builtin.apt_repository: 
            repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu  {{ ansible_distribution_release }} stable"
            state: present 
            filename: docker.list   # 存储到 /etc/apt/sources.list.d/docker.list  
            update_cache: yes 
     
        # 场景 2:安装特定版本软件 
        - name: 安装指定版本软件包 
          ansible.builtin.apt: 
            name: "{{ target_package }}={{ package_version }}"
            state: present 
            update_cache: yes
    

二、文件管理类模块

1. copy 模块

  • 功能:传输本地文件到远程主机
  • 典型场景
    • 分发统一配置文件(如 nginx.conf )
    • 部署静态资源文件
  • 高级用法
    - copy:
        src: app_config.ini  
        dest: /etc/app/
        mode: 0644 
    
    

2. template 模块

  • 功能:带变量替换的文件传输
  • 典型场景
    • 动态生成环境差异配置(如数据库连接地址)
    • 多节点差异化部署
  • 示例参数
    ---
    - name: 动态配置部署 
      hosts: all 
      become: yes 
      vars:
        # 基础变量定义 
        db_connection: "{{ hostvars[inventory_hostname]['db_host'] }}:3306"
        deploy_path: "/opt/{{ app_name }}"
      
      tasks:
        - name: 创建配置目录 
          ansible.builtin.file: 
            path: "{{ deploy_path }}/conf"
            state: directory 
            mode: '0755'
     
        - name: 生成动态配置文件 
          ansible.builtin.template: 
            src: templates/app_config.j2  # Jinja2模板文件 
            dest: "{{ deploy_path }}/config.yml" 
            mode: '0644'
          validate: '/usr/bin/yamllint %s'  # 配置文件语法校验[1]()
     
        - name: 分发差异证书文件 
          ansible.builtin.copy: 
            src: "certs/{{ cert_type }}.pem"  # 根据节点类型选择证书 
            dest: "{{ deploy_path }}/ssl.pem"
    

三、服务管理类模块

1. service/systemd 模块

  • 功能:管理系统服务状态
  • 典型场景
    • 批量重启异常服务
    • 配置开机自启动
  • 示例参数
    - service:
        name: nginx 
        state: restarted 
        enabled: yes 
    
    

四、用户权限类模块

1. user 模块

  • 功能:管理用户账号
  • 典型场景
    • 批量创建应用专用账户
    • 设置用户密码过期策略
  • 示例参数
    - user:
        name: appuser 
        groups: www-data 
        shell: /sbin/nologin 
    
    

2. lineinfile 模块

  • 功能:精准修改文件指定行
  • 典型场景
    • 配置 SSH 安全策略
    • 修改系统内核参数
  • 示例参数
    - lineinfile:
        path: /etc/ssh/sshd_config 
        regexp: '^#PermitRootLogin'
        line: 'PermitRootLogin no'
    
    

五、系统信息类模块

1. setup 模块

  • 功能:收集主机系统信息
  • 典型场景
    • 资产信息自动化采集
    • 条件判断依据获取(如根据系统版本执行不同操作)
  • 示例参数
    ---
    - name: 采集主机信息并执行条件操作 
      hosts: all 
      become: yes 
      gather_facts: no  # 显式禁用默认 facts 收集 
      
      tasks:
        # ---------------------------
        # 核心功能模块 
        # ---------------------------
        - name: 收集完整系统信息 
          ansible.builtin.setup: 
            gather_subset: 
              - all       # 收集所有信息子集[1]()
              - !hardware # 排除硬件相关数据 
            filter: "ansible_distribution_*"  # 过滤发行版信息[2]()
          register: host_facts 
     
        # ---------------------------
        # 资产信息处理 
        # ---------------------------
        - name: 生成资产报告文件 
          ansible.builtin.template: 
            src: reports/host_report.j2 
            dest: "/var/log/ansible/{{ inventory_hostname }}_report.txt" 
          when: host_facts.ansible_facts.ansible_os_family  == "Debian"
     
        # ---------------------------
        # 条件判断应用 
        # ---------------------------
        - name: 针对 Ubuntu 20.04 的特殊配置 
          ansible.builtin.apt: 
            name: nginx 
            state: latest 
          when: 
            - host_facts.ansible_facts.ansible_distribution  == "Ubuntu"
            - host_facts.ansible_facts.ansible_distribution_major_version  >= "20"
            
        - name: 针对 CentOS 的防火墙配置 
          ansible.builtin.yum: 
            name: firewalld 
            state: present 
          when: host_facts.ansible_facts.ansible_os_family  == "RedHat"
    

六、任务调度类模块

1. cron 模块

  • 功能:管理定时任务
  • 典型场景
    • 部署日志轮转任务
    • 配置备份脚本定时执行
  • 示例参数
    - cron:
        name: "Daily backup"
        minute: "0"
        hour: "2"
        job: "/opt/backup.sh" 
    
    

七、网络管理类模块

1. get_url 模块

  • 功能:从网络下载文件
  • 典型场景
    • 离线环境预下载安装包
    • 获取远程配置文件
  • 示例参数
    - name: 下载离线安装包 
      ansible.builtin.get_url: 
        url: "https://example.com/packages/nginx-1.18.0.deb" 
        dest: "/opt/packages/nginx.deb" 
        checksum: "sha256:2e1a6dda32e987d3011223f33ef16aee3f4862ac9d28c3d4855c9d15205652d5"
        mode: '0644'
        force: no  # 仅在文件不存在时下载
    ---
    - name: 拉取动态配置文件 #获取远程配置文件
      ansible.builtin.get_url: 
        url: "http://config-server/app.conf" 
        dest: "/etc/app/app.conf" 
        validate_certs: no  # 适用于自签名证书场景 
        timeout: 30 
        headers:
          Authorization: "Bearer {{ auth_token }}"
    

模块对比与选型建议

场景需求 推荐模块 优势特性
简单命令执行 command 无依赖、快速执行
复杂脚本执行 shell 支持管道/重定向
批量文件分发 synchronize 增量同步高效
配置版本管理 git 集成版本控制

实践建议:优先使用声明式模块(如 yum/file),减少 shell/command 的使用频率以增强可维护性。建议配合 ansible-lint 进行剧本规范性检查。

来源链接:https://www.cnblogs.com/akita95/p/18783494

© 版权声明
THE END
支持一下吧
点赞5 分享
评论 抢沙发
头像
请文明发言!
提交
头像

昵称

取消
昵称表情代码快捷回复

    暂无评论内容