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

Ansible高效管理大项目实战技巧

管理大项目

1. 引用主机清单

在 playbook 中引用主机时,如果对应的主机清单中未配置该主机,则无法执行。

若主机清单中配置的是主机名称,则在 playbook 的 hosts 字段中必须使用与之完全一致的主机名或 IP 地址,否则也会执行失败。示例如下:

清单文件 /etc/ansible/hosts:

node1
node2

Playbook a.yml:

---
- name: testhosts: 172.16.30.10,node2.example.comtasks:- name: debug1debug:msg: chenyu

执行该 playbook 时将出现警告并跳过任务:

[root@server ansible]# ansible-playbook a.yml
[WARNING]: Could not match supplied host pattern, ignoring: 172.16.30.10
[WARNING]: Could not match supplied host pattern, ignoring: node2.example.comPLAY [test] ********************************************************************
skipping: no hosts matchedPLAY RECAP *********************************************************************

因此,在引用主机清单时,必须确保 hosts 字段的内容与清单中配置的完全一致。

常用主机引用方式

  • hosts: node1
  • hosts: node1.example.com
  • hosts: 172.16.30.10
  • hosts: all # 所有受控主机
  • hosts: net # 主机组 net
  • hosts: '*' # 所有主机(通配符)
  • hosts: '*.example.com' # 匹配域名
  • hosts: '172.16.30.*' # 匹配 IP 段
  • hosts: 'web*' # 匹配名称以 web 开头的主机
  • hosts: net:webserver # 取 net 组和 webserver 组的并集
  • hosts: net:&webserver # 取 net 组和 webserver 组的交集
  • hosts: net:!node1 # net 组中除 node1 外的主机
  • hosts: node[ 1-5 ] # 匹配 node1 到 node5
  • hosts: node[ a-d ] # 匹配 nodea 到 noded

2. 配置并行执行

Ansible 默认按顺序运行每个 play 和每个任务。通常,所有主机必须在任何主机进入下一个任务之前完成当前任务。

Ansible 的最大同时连接数由 ansible配置文件的forks 参数控制,默认值为 5。

例如,一个 play 有 10 台主机,forks 值为 5,则前 5 台主机同时执行第一个任务,完成后另外 5 台再执行,全部完成后才进入下一个任务。

适用场景建议

  • Linux 主机:任务主要在受控端执行,控制节点负载较低,可适当提高 forks 值。
  • 网络设备(如路由器、交换机):任务多在控制节点执行,负载较高,不宜提高 forks 值。

使用 serial 控制分批执行

默认情况下,若某台主机任务失败,整个 play 会中断,已成功的任务也不会触发 handlers。

例如,为 webserver 组安装 httpd 并触发重启:

---
- name: web stationhosts: webservertasks:- name: install httpdyum:name: httpdstate: latestnotify:- restart httpdhandlers:- name: restart httpdservice:name: httpdstate: restarted

若其中一台主机安装失败,整个 play 中断,已成功的主机也不会执行 handler。

可通过 serial 参数分批执行,避免全组中断:

---
- name: web stationhosts: webserverserial: 2tasks:- name: install httpdyum:name: httpdstate: latestnotify:- restart httpdhandlers:- name: restart httpdservice:name: httpdstate: restarted

这样每次只对 2 台主机执行 play,即使其中一批失败,也不影响已成功的主机执行 handler。


3. 包含与导入

导入 Playbook

示例:部署 HTTPD 站点

1. 配置 YUM 仓库的 playbook(repo.yml):

---
- name: webstationhosts: node1,node2tasks:- name: repo1yum_repository:name: aadescription: aa1baseurl: http://ansible.example.com/rhel9/BaseOSenabled: yesgpgcheck: yesgpgkey: http://ansible.example.com/rhel9/RPM-GPG-KEY-redhat-release- name: repo2yum_repository:name: ccdescription: cc1baseurl: http://ansible.example.com/rhel9/AppStreamenabled: yesgpgcheck: yesgpgkey: http://ansible.example.com/rhel9/RPM-GPG-KEY-redhat-release

2. 安装 HTTPD 的任务文件(http.yml):

---
- name: install httpyum:name: httpdstate: present

3. 主 playbook(web.yml),导入其它 playbook 和任务( import_playbook: repo.yml ):

---
- name: web stationimport_playbook: repo.yml- name: testhosts: alltasks:- import_tasks: http.yml- name: start httpdservice:name: httpdstate: startedenabled: yes

包含任务

示例:安装并启动 VSFTPD

任务文件(vsftpd.yml):

---
- name: abcyum:name: vsftpdstate: present

主 playbook(a.yml)( - include_tasks: vsftpd.yml ):

---
- name: testhosts: alltasks:- include_tasks: vsftpd.yml- name: start vsftpdservice:name: vsftpdstate: startedenabled: yes
http://www.xdnf.cn/news/19817.html

相关文章:

  • 【Python】数据可视化之点线图
  • Android 渐变背景色绘制
  • Git在idea中的实战使用经验(二)
  • 基于SpringBoot的宠物咖啡馆平台
  • 在DDPM(扩散模型)中,反向过程为什么不能和前向一样一步解决,另外实际公式推导时反向过程每一步都能得到一个预测值,为什么还要一步一步的推导?
  • 前端-Vue的生命周期和生命周期的四个阶段
  • 缠论笔线段画线,文华财经期货指标公式,好用的缠论指标源码
  • 特斯拉三代灵巧手:演进历程与核心供应链梳理
  • Spring AI调用sglang模型返回HTTP 400分析处理
  • 前端学习 10-2 :验证中的SV
  • Qt使用Maintenance添加、卸载组件(未完)
  • Java 技术支撑 AI 系统落地:从模型部署到安全合规的企业级解决方案(四)
  • 嵌入式学习 51单片机(2)
  • 【C++】string类完全解析与实战指南
  • centos 压缩命令
  • (二)文件管理-基础命令-mkdir命令的使用
  • Linux应用(1)——文件IO
  • 部署jenkins并基于ansible部署Discuz应用
  • 嵌入式|RTOS教学——FreeRTOS基础3:消息队列
  • Unity之Spine动画资源导入
  • 小游戏公司接单难?这几点原因与破局思路值得看看
  • 聚焦诊断管理(DM)的传输层设计、诊断服务器实现、事件与通信管理、生命周期与报告五大核心模块
  • RTSP流端口占用详解:TCP模式与UDP模式的对比
  • 面向深层语义分析的公理化NLP模型:理论可行性、关键技术与应用挑战
  • 大语言模型领域最新进展
  • 如何将JPG图片批量转为PDF?其实可用的方法有很多种
  • TC-2024《Fuzzy Clustering guided by Spectral Rotation and Scaling》
  • shell-awk命令详解(理论+实战)
  • 通过IDEA写一个服务端和一个客户端之间的交互
  • 解决通过南瑞加密网关传输文件和推送视频的失败的问题