梁宁 发表于 2025-6-2 23:23:32

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 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['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'# 配置文件语法校验()

    - 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       # 收集所有信息子集()
          - !hardware # 排除硬件相关数据
      filter: "ansible_distribution_*"# 过滤发行版信息()
      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 进行剧本规范性检查。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: Ansible 核心功能模块与应用场景全解析