一、软件管理类模块
1. yum/dnf 模块
- 功能:管理 RPM 软件包(安装/升级/删除)
- 典型场景:
- 批量部署基础环境(如安装 Nginx/MySQL)
- 自动化更新安全补丁
- 示例参数:
- - name: Install httpd
- yum:
- name: httpd
- state: latest
复制代码 2. apt 模块
- 功能:管理 DEB 软件包(Ubuntu/Debian)
- 典型场景:
- 示例参数:
- ---
- - 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 模块
- 功能:精准修改文件指定行
- 典型场景:
- 示例参数:
- - 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 进行剧本规范性检查。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |