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]