找回密码
 立即注册
首页 资源区 代码 Ansible 核心功能模块与应用场景全解析

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

梁宁 5 天前


一、软件管理类模块

1. yum/dnf 模块


  • 功能:管理 RPM 软件包(安装/升级/删除)
  • 典型场景

    • 批量部署基础环境(如安装 Nginx/MySQL)
    • 自动化更新安全补丁

  • 示例参数
    1. - name: Install httpd
    2.   yum:
    3.     name: httpd
    4.     state: latest
    复制代码
2. apt 模块


  • 功能:管理 DEB 软件包(Ubuntu/Debian)
  • 典型场景

    • 配置 APT 源仓库
    • 安装特定版本软件

  • 示例参数
    1. ---
    2. - name: 管理 DEB 软件包
    3.   hosts: ubuntu_servers
    4.   become: yes  # 需要 root 权限
    5.   vars:
    6.     target_package: nginx
    7.     package_version: "1.18.0-0ubuntu1"
    8.   tasks:
    9.     # 场景 1:配置 APT 源仓库
    10.     - name: 添加 Docker 官方 APT 源
    11.       ansible.builtin.apt_repository:
    12.         repo: "deb [arch=amd64] https://download.docker.com/linux/ubuntu  {{ ansible_distribution_release }} stable"
    13.         state: present
    14.         filename: docker.list   # 存储到 /etc/apt/sources.list.d/docker.list  
    15.         update_cache: yes
    16.     # 场景 2:安装特定版本软件
    17.     - name: 安装指定版本软件包
    18.       ansible.builtin.apt:
    19.         name: "{{ target_package }}={{ package_version }}"
    20.         state: present
    21.         update_cache: yes
    复制代码
二、文件管理类模块

1. copy 模块


  • 功能:传输本地文件到远程主机
  • 典型场景

    • 分发统一配置文件(如 nginx.conf )
    • 部署静态资源文件

  • 高级用法
    1. - copy:
    2.     src: app_config.ini  
    3.     dest: /etc/app/
    4.     mode: 0644
    复制代码
2. template 模块


  • 功能:带变量替换的文件传输
  • 典型场景

    • 动态生成环境差异配置(如数据库连接地址)
    • 多节点差异化部署

  • 示例参数
    1. ---
    2. - name: 动态配置部署
    3.   hosts: all
    4.   become: yes
    5.   vars:
    6.     # 基础变量定义
    7.     db_connection: "{{ hostvars[inventory_hostname]['db_host'] }}:3306"
    8.     deploy_path: "/opt/{{ app_name }}"
    9.   
    10.   tasks:
    11.     - name: 创建配置目录
    12.       ansible.builtin.file:
    13.         path: "{{ deploy_path }}/conf"
    14.         state: directory
    15.         mode: '0755'
    16.     - name: 生成动态配置文件
    17.       ansible.builtin.template:
    18.         src: templates/app_config.j2  # Jinja2模板文件
    19.         dest: "{{ deploy_path }}/config.yml"
    20.         mode: '0644'
    21.       validate: '/usr/bin/yamllint %s'  # 配置文件语法校验[1]()
    22.     - name: 分发差异证书文件
    23.       ansible.builtin.copy:
    24.         src: "certs/{{ cert_type }}.pem"  # 根据节点类型选择证书
    25.         dest: "{{ deploy_path }}/ssl.pem"
    复制代码
三、服务管理类模块

1. service/systemd 模块


  • 功能:管理系统服务状态
  • 典型场景

    • 批量重启异常服务
    • 配置开机自启动

  • 示例参数
    1. - service:
    2.     name: nginx
    3.     state: restarted
    4.     enabled: yes
    复制代码
四、用户权限类模块

1. user 模块


  • 功能:管理用户账号
  • 典型场景

    • 批量创建应用专用账户
    • 设置用户密码过期策略

  • 示例参数
    1. - user:
    2.     name: appuser
    3.     groups: www-data
    4.     shell: /sbin/nologin
    复制代码
2. lineinfile 模块


  • 功能:精准修改文件指定行
  • 典型场景

    • 配置 SSH 安全策略
    • 修改系统内核参数

  • 示例参数
    1. - lineinfile:
    2.     path: /etc/ssh/sshd_config
    3.     regexp: '^#PermitRootLogin'
    4.     line: 'PermitRootLogin no'
    复制代码
五、系统信息类模块

1. setup 模块


  • 功能:收集主机系统信息
  • 典型场景

    • 资产信息自动化采集
    • 条件判断依据获取(如根据系统版本执行不同操作)

  • 示例参数
    1. ---
    2. - name: 采集主机信息并执行条件操作
    3.   hosts: all
    4.   become: yes
    5.   gather_facts: no  # 显式禁用默认 facts 收集
    6.   
    7.   tasks:
    8.     # ---------------------------
    9.     # 核心功能模块
    10.     # ---------------------------
    11.     - name: 收集完整系统信息
    12.       ansible.builtin.setup:
    13.         gather_subset:
    14.           - all       # 收集所有信息子集[1]()
    15.           - !hardware # 排除硬件相关数据
    16.         filter: "ansible_distribution_*"  # 过滤发行版信息[2]()
    17.       register: host_facts
    18.     # ---------------------------
    19.     # 资产信息处理
    20.     # ---------------------------
    21.     - name: 生成资产报告文件
    22.       ansible.builtin.template:
    23.         src: reports/host_report.j2
    24.         dest: "/var/log/ansible/{{ inventory_hostname }}_report.txt"
    25.       when: host_facts.ansible_facts.ansible_os_family  == "Debian"
    26.     # ---------------------------
    27.     # 条件判断应用
    28.     # ---------------------------
    29.     - name: 针对 Ubuntu 20.04 的特殊配置
    30.       ansible.builtin.apt:
    31.         name: nginx
    32.         state: latest
    33.       when:
    34.         - host_facts.ansible_facts.ansible_distribution  == "Ubuntu"
    35.         - host_facts.ansible_facts.ansible_distribution_major_version  >= "20"
    36.         
    37.     - name: 针对 CentOS 的防火墙配置
    38.       ansible.builtin.yum:
    39.         name: firewalld
    40.         state: present
    41.       when: host_facts.ansible_facts.ansible_os_family  == "RedHat"
    复制代码
六、任务调度类模块

1. cron 模块


  • 功能:管理定时任务
  • 典型场景

    • 部署日志轮转任务
    • 配置备份脚本定时执行

  • 示例参数
    1. - cron:
    2.     name: "Daily backup"
    3.     minute: "0"
    4.     hour: "2"
    5.     job: "/opt/backup.sh"
    复制代码
七、网络管理类模块

1. get_url 模块


  • 功能:从网络下载文件
  • 典型场景

    • 离线环境预下载安装包
    • 获取远程配置文件

  • 示例参数
    1. - name: 下载离线安装包
    2.   ansible.builtin.get_url:
    3.     url: "https://example.com/packages/nginx-1.18.0.deb"
    4.     dest: "/opt/packages/nginx.deb"
    5.     checksum: "sha256:2e1a6dda32e987d3011223f33ef16aee3f4862ac9d28c3d4855c9d15205652d5"
    6.     mode: '0644'
    7.     force: no  # 仅在文件不存在时下载
    8. ---
    9. - name: 拉取动态配置文件 #获取远程配置文件
    10.   ansible.builtin.get_url:
    11.     url: "http://config-server/app.conf"
    12.     dest: "/etc/app/app.conf"
    13.     validate_certs: no  # 适用于自签名证书场景
    14.     timeout: 30
    15.     headers:
    16.       Authorization: "Bearer {{ auth_token }}"
    复制代码
模块对比与选型建议

场景需求推荐模块优势特性简单命令执行command无依赖、快速执行复杂脚本执行shell支持管道/重定向批量文件分发synchronize增量同步高效配置版本管理git集成版本控制实践建议:优先使用声明式模块(如 yum/file),减少 shell/command 的使用频率以增强可维护性。建议配合 ansible-lint 进行剧本规范性检查。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册