讲师中心 微信公众号
AI工具推荐 视频效率加速

如何利用Ansible的add_host模块在批量部署期动态将新探测到的在线虚拟机热加入作业池

夏静大大_9183

夏静大大_9183

发布时间:2026-06-13 07:15:59

|

928人浏览过

|

来源于php中文网

原创

Ansible 的 add_host 模块不自动探测主机,需先通过云平台API、连通性检查或脚本显式发现在线虚拟机,再用 add_host 动态加入 fresh_vms 组,最后在独立 play 中针对该组执行部署任务。

如何利用ansible的add_host模块在批量部署期动态将新探测到的在线虚拟机热加入作业池

Ansible 的 add_host 模块本身不“探测”主机,也不自动发现在线虚拟机;它只负责在运行时将指定主机(或主机组)动态加入当前 play 的 inventory。要实现“批量部署期动态热加入新探测到的在线虚拟机”,需组合使用探测逻辑(如 ping、ssh 连通性检查、云平台 API 查询等)与 add_host,且必须注意执行顺序、facts 收集时机和 inventory 作用域限制。

先确认目标虚拟机是否真正“在线且可管”

Ansible 不会自动扫描网络或轮询虚拟机状态。你需要显式定义探测方式:

  • 若虚拟机已启动且 SSH 端口开放:用 wait_for_connection + delegate_to: localhost 验证连通性,避免后续任务因连接失败中断
  • 若基于云平台(如 VMware、OpenStack、AWS):调用对应模块(如 vmware_guest_info、os_server_facts、ec2_instance_facts)拉取运行中实例列表及 IP 地址
  • 若使用自定义脚本探测:用 command 或 shell 模块执行 ping/nc/nmap,并用 register 捕获结果,再通过 set_fact 提取有效 IP 列表

用 add_host 动态注册主机到当前 play 的 inventory

add_host 只影响当前 play 的内存中 inventory,不能写入物理文件,也不能跨 play 使用。关键点:

  • 必须在 hosts: all 或一个已有控制节点(如 localhost)上执行,且 delegate_to: localhost 是常见做法
  • 每个 add_host 任务只能添加一台主机(或一组),若有多台,需配合 loop 或 with_items
  • 支持设置 groups: 将新主机归入自定义组(如 fresh_vms),后续任务可直接 hosts: fresh_vms
  • 可附加变量:ansible_host(实际连接 IP)、ansible_user、ansible_ssh_private_key_file 等,避免依赖外部 inventory 文件

确保后续任务能立即对新主机生效

Ansible 的 play 是静态解析的,add_host 添加的主机不会自动参与当前 play 中已声明的 hosts: 目标。正确做法是:

  • 把探测 + add_host 放在一个独立 play(hosts: localhost)中
  • 紧接着定义第二个 play,hosts: fresh_vms(即你用 add_host 加入的组名)
  • 两个 play 共享同一 inventory 上下文,因此第二个 play 能识别该组
  • 若需复用 facts 或变量,可在第一个 play 中用 set_fact 注册全局变量,或用 hostvars 在第二个 play 中引用

示例:基于 OpenStack 实时发现并部署新虚拟机

(简化版 YAML 片段)

- name: Discover running VMs from OpenStack
  hosts: localhost
  gather_facts: false
  tasks:
    - os_server_facts:
        auth: "{{ openstack_auth }}"
        name: "deploy-{{ ansible_date_time.date }}"
      register: vm_list
<pre class="brush:php;toolbar:false;">- add_host:
    hostname: "{{ item.name }}"
    ansible_host: "{{ item.accessIPv4 | default(item.addresses['private'][0].addr) }}"
    ansible_user: "ubuntu"
    ansible_ssh_private_key_file: "/path/to/key.pem"
    groups: "fresh_vms"
  loop: "{{ vm_list.ansible_facts.openstack_servers | selectattr('status', 'equalto', 'ACTIVE') | list }}"
  • name: Configure newly added VMs hosts: fresh_vms become: true tasks:
    • apt: name: nginx state: present

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
PHP 命令行脚本与自动化任务开发
PHP 命令行脚本与自动化任务开发

本专题系统讲解 PHP 在命令行环境(CLI)下的开发与应用,内容涵盖 PHP CLI 基础、参数解析、文件与目录操作、日志输出、异常处理,以及与 Linux 定时任务(Cron)的结合使用。通过实战示例,帮助开发者掌握使用 PHP 构建 自动化脚本、批处理工具与后台任务程序 的能力。

446

2025.12.13

Figma AI自动化智能数据填充与交互生成实战
Figma AI自动化智能数据填充与交互生成实战

告别机械重复,详细演示如何用 AI 填充业务真实数据,并自动为页面添加交互连线,将静态设计稿快速转变为动态原型。

265

2026.05.13

虚拟化软件介绍
虚拟化软件介绍

虚拟化软件有VMware、VirtualBox、Hyper-V、Parallels Desktop、Oracle VirtualBox等。想了解更多虚拟化的相关内容,可以阅读本专题下面的文章。

7619

2023.12.20

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

120

2026.09.23

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

60

2026.09.23

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

40

2026.09.23

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

40

2026.09.22

Conan二进制包配置指南
Conan二进制包配置指南

本专题介绍Conan根据操作系统、编译器、架构和构建类型生成二进制包的方法,讲解Profile、Settings、Options及Package ID的作用,帮助管理不同平台和编译环境下的包版本。

40

2026.09.22

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

40

2026.09.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
XAMPP手册
XAMPP手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn