当前位置: 首页 > news >正文

Ansible 核心配置与任务管理:主机清单、剧本,任务的导入、配置并行

Ansible 核心配置与任务管理:主机清单、剧本,任务的导入、配置并行

一、Ansible 主机清单表述方式

主机清单(Inventory)用于定义 Ansible 管理的目标主机 / 主机组,支持精确匹配、通配符、组运算等多种表述方式,满足不同场景下的主机选择需求。

表述格式

功能说明

示例

单主机(IP / 主机名)

指定单个受控主机,支持 IP、短主机名、FQDN

- hosts: node1(短主机名)

- hosts: node1.example.com(FQDN)

- hosts: 172.16.30.10(IP 地址)

全量主机

匹配所有受控主机

- hosts: all(官方推荐)- hosts: '*'(通配符等效)

通配符匹配

通过 * 匹配符合规则的主机 / 主机名

- hosts: '*.example.com'(匹配所有 example.com 域名的主机)

- hosts: '172.16.30.*'(匹配 172.16.30 网段所有主机)

- hosts: 'web*'(匹配以 web 开头的主机 / 主机组)

序列匹配

通过 [起始-结束] 匹配连续序列

- hosts: node[1-5](匹配 node1 到 node5)

- hosts: node[a-d](匹配 nodea 到 noded)

主机组运算

对多个主机组进行 “并集、交集、差集” 运算

- hosts: net:webserver(并集:net 组和 webserver 组所有主机)

- hosts: net:&webserver(交集:同时在 net 组和 webserver 组的主机)

- hosts: net:!node1(差集:net 组所有主机,排除 node1)

二、Ansible 并行执行配置(forks 与 serial)

并行执行控制 Ansible 同时连接的受控主机数量,核心通过 forks 全局参数和 serial Play 级参数实现,适配不同场景下的资源占用与执行效率需求。

2.1 forks 全局参数

  • 作用:定义 Ansible 最大同时连接的受控主机数,控制全局并行度。
  • 默认值:5(即默认同时连接 5 台主机执行任务)。
  • 执行逻辑

若 Play 包含 10 台主机,forks=5 时,先同时对前 5 台主机执行所有任务,完成后再对后 5 台主机执行任务,所有主机完成当前 Play 后,才进入下一个 Play

  • 调整建议
    • Linux 受控主机:可适当调大(如 10-20),因任务在受控端执行,控制端资源占用低;
    • 网络设备:需调小(如 2-5),因网络设备连接资源有限,避免并发过高导致连接失败。
  • 配置方式

在 /etc/ansible/ansible.cfg 中修改 forks = 10(全局生效),或执行 Playbook 时临时指定:ansible-playbook --forks 10 playbook.yml。

2.2 serial Play 级参数

  • 作用:在单个 Play 内拆分主机组,按批次执行任务,优先级高于 forks,解决 “多主机执行时 handlers 触发不及时” 等问题。
  • 执行逻辑

若 serial=2,Play 会先选择 2 台主机执行完所有任务,再选择下一批 2 台,直到所有主机执行完成。

  • 配置位置:与 hosts 同层级,属于 Play 的一级参数。
  • 示例
- name: 按批次执行任务hosts: allserial: 2 # 每批次 2 台主机tasks:- name: 安装 httpdyum:name: httpdstate: present

三、Ansible notify 与 handlers(状态触发机制)

notify(通知器)和 handlers(处理器)用于实现 “任务状态变化后触发后续操作”,避免无意义的重复执行(如仅配置文件修改后才重启服务)。

3.1 核心逻辑

  1. 触发条件:仅当带有 notify 的任务执行后状态为 changed=true(即产生实际变化,如文件修改、软件安装),才会触发 handlers;若任务状态为 changed=false(无变化),则不触发。
  2. 执行时机:默认情况下,handlers 会在当前 Play 的所有普通任务执行完毕后统一执行;若多个任务触发同一个 handlers,仅执行 1 次。
  3. 失败处理:若普通任务执行失败,默认不执行 handlers;若需强制执行,可在执行 Playbook 时添加参数:ansible-playbook --force-handlers playbook.yml。

3.2 示例

---
- name: 配置 Nginx 并触发重启hosts: web_serverstasks:- name: 拷贝 Nginx 配置文件copy:src: nginx.confdest: /etc/nginx/nginx.confnotify: 重启 Nginx 服务 # 配置文件变化时触发 handlers- name: 启动 Nginx 服务(首次执行)service:name: nginxstate: startedhandlers: # 定义处理器,仅被 notify 触发- name: 重启 Nginx 服务service:name: nginxstate: restarted

四、Ansible 包含与导入(模块化管理)

通过 “导入 / 包含” 功能将 Playbook、任务拆分到独立文件,实现代码复用与结构清晰,核心分为 “导入 Playbook”“导入任务”“包含任务” 三类场景。

4.1 核心区别:导入(import)vs 包含(include)

功能类型

语法

加载时机

动态性支持

适用场景

导入 Playbook

import_playbook: 文件名.yml

解析阶段(静态)

不支持

复用完整的 Play 集合(如基础环境配置)

导入任务

import_tasks: 文件名.yml

解析阶段(静态)

不支持

复用固定逻辑的任务(如标准安装步骤)

包含任务

include_tasks: 文件名.yml

执行阶段(动态)

支持

按条件 / 变量动态加载任务(如多环境适配)

4.2 实战示例:模块化管理 Playbook 与任务

场景需求

创建 3 个文件:repo.yml(配置 YUM 仓库)、web.yml(安装 httpd 任务)、httpd.yml(主 Playbook,导入前两者),实现 “先配仓库、再装服务” 的完整流程。

1. 配置 YUM 仓库(repo.yml)
---- name: 配置 RHEL9 YUM 仓库hosts: alltasks:- name: 创建 BaseOS 仓库yum_repository:file: server # 仓库配置文件名(/etc/yum.repos.d/server.repo)name: BaseOS # 仓库 IDdescription: RHEL9 BaseOSbaseurl: http://ansible.example.com/rhel9/BaseOSenabled: yes # 启用仓库gpgcheck: no # 关闭 GPG 校验- name: 创建 AppStream 仓库yum_repository:file: servername: AppStreamdescription: RHEL9 AppStreambaseurl: http://ansible.example.com/rhel9/AppStreamenabled: yesgpgcheck: no
2. 安装 httpd 任务(web.yml)
---# 独立任务文件,无 hosts 字段,仅包含任务列表- name: 安装 httpd 软件包yum:name: httpdstate: present # 确保软件已安装
3. 主 Playbook(httpd.yml)
---# 1. 导入 repo.yml 完整 Playbook(配置 YUM 仓库)- name: 导入 YUM 仓库配置import_playbook: repo.yml # 静态导入,解析阶段加载# 2. 定义主 Play:安装并启动 httpd- name: 部署 httpd 服务hosts: alltasks:# 导入 web.yml 任务(安装 httpd)- name: 导入 httpd 安装任务import_tasks: web.yml # 静态导入任务# 直接定义任务:启动并设置 httpd 开机自启- name: 启动 httpd 服务并设置开机自启service:name: httpdstate: started # 确保服务运行enabled: yes # 确保开机自启

4.3 执行与验证

  1. 执行主 Playbook:ansible-playbook httpd.yml
  2. 验证结果:
    • 检查 YUM 仓库:在受控主机执行 yum repolist,确认 BaseOS 和 AppStream 仓库已加载;
    • 检查 httpd 服务:在受控主机执行 systemctl status httpd,确认服务已启动且开机自启。

五、总结

  1. 主机清单:灵活运用 “精确匹配、通配符、组运算”,快速定位目标主机;
  2. 并行配置:forks 控制全局并发,serial 实现批次执行,平衡效率与资源;
  3. 状态触发:notify+handlers 仅在任务变化时执行后续操作,减少冗余;
  4. 模块化管理:通过 import_playbook/import_tasks/include_tasks 拆分代码,提升复用性与可维护性。

文章转载自:

http://vh9aMUUx.pfLry.cn
http://ozHlY87Z.pfLry.cn
http://PmsuzUXx.pfLry.cn
http://VGrXQf9w.pfLry.cn
http://heMbh23U.pfLry.cn
http://IZ2sA4ju.pfLry.cn
http://2kdbSZed.pfLry.cn
http://G7EdMPem.pfLry.cn
http://YlpSdCqs.pfLry.cn
http://DhIZGbun.pfLry.cn
http://ZohUwkJD.pfLry.cn
http://oohJfhK7.pfLry.cn
http://n6OVEdXc.pfLry.cn
http://NMK5VmC2.pfLry.cn
http://OhJwmROL.pfLry.cn
http://H7YTpLpB.pfLry.cn
http://hsfUxHn6.pfLry.cn
http://ejoaJMuC.pfLry.cn
http://953q5vGA.pfLry.cn
http://3zAa7oqU.pfLry.cn
http://w9R4sxHs.pfLry.cn
http://6kWkuwrU.pfLry.cn
http://6H3iGRjF.pfLry.cn
http://77tnB4eA.pfLry.cn
http://2IvtK7Xp.pfLry.cn
http://E0eWqI5B.pfLry.cn
http://33baNtsA.pfLry.cn
http://LYFNLBXt.pfLry.cn
http://O0j56UCU.pfLry.cn
http://rX7MUy11.pfLry.cn
http://www.dtcms.com/a/364814.html

相关文章:

  • Jenkins-Ansible部署discuz论坛
  • 如何利用SMS、RDS把服务从阿里云迁移到华为云
  • 嵌入式高薪岗位有哪些?
  • 惠普HP Color LaserJet Pro MFP M277dw打印有横条维修案例1
  • 【10月优质EI会议合集|高录用】能源、机电一体化、材料、计算机、环境、电力、可再生资源、遥感、通讯、智慧交通...
  • SCN随机配置网络时间序列预测Matlab实现
  • 执行一条select语句期间发生了什么?
  • Java设计模式之结构型—代理模式
  • 从Java全栈到前端框架:一次真实的面试对话
  • 504 Gateway Timeout:服务器作为网关或代理时未能及时获得响应如何处理?
  • 找Jenkins代替工具,可以体验下这款国产开源CICD工具
  • 通过SpringCloud Gateway实现API接口镜像请求(陪跑)网关功能
  • 数据库高可用全方案:Keepalived 故障切换 + LVS (DR) 模式 + MariaDB 主主同步实战案例
  • Web 集群高可用全方案:Keepalived+LVS (DR) 负载均衡 + Apache 服务 + NFS 共享存储搭建指南
  • TensorFlow的Yes/No 关键词识别模型训练
  • 从零开始的python学习——列表
  • VUE的模版渲染过程
  • 京东一面:假如Redis里面有1亿个key,其中有10w个key是以某个固定的已知的前缀开头的,如何将它们全部找出来?
  • Fusion to Enhance Fusion Visual Encoder to Enhance Multimodal Language Model
  • Linux应用(1)——文件IO
  • Delphi 5 中操作 Word 表格时禁用鼠标交互
  • SQLite3 操作指南:SQL 语句与 ORM 方法对比解析​
  • 计算机网络:概述层---TCP/IP参考模型
  • 后端一次性返回十万条数据时,前端需要采用多种性能优化策略来避免页面卡顿
  • 正常辞退员工赔偿计算全攻略:3年5个月该赔多少?
  • C++学习 part1
  • python中`__annotations__` 和 `inspect` 模块区别??
  • 【Unity Shader学习笔记】(五)Unity Shader初识
  • 在linux下使用MySQL常用的命令集合
  • 基于-轻量级文档搜索系统的测试报告