You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible使用add_host动态添加KVM主机到inventory后无法识别问题求助

问题根因

你通过add_host添加的主机已经成功写入当前Ansible运行周期的内存清单,这一点从hostvars的输出可以确认。问题出在Ansible的Play执行逻辑:
每个Play的目标主机列表在Play初始化阶段就会完成预解析,2.11版本中如果仅指定hosts: all,默认只会匹配静态inventory初始解析出的主机列表,不会自动纳入动态添加的主机。

解决方案

方案1:显式在后续Play中指定包含动态组

将Play B的hosts字段修改为同时包含原有静态主机和你动态添加的组即可,例如你的最小复现可以修改为:

- name: "Play B"
  hosts: ansible,myGroup # 同时覆盖静态主机和动态添加的myGroup组
  become: yes
  gather_facts: no
  tasks:
    - debug: var=hostvars
    - debug: var=group_names
    - debug: var=play_hosts
    - name: test-ping
      ping:

实际使用时将myGroup替换为你实际的动态组名libvirt即可。如果需要匹配所有静态+动态主机,也可以写成hosts: all,libvirt。

方案2:拆分Play分别处理静态和动态主机

如果需要对两类主机执行不同逻辑,可以拆分Play分别指定目标:

# 处理原有静态主机
- name: "处理静态管理节点"
  hosts: local_ansible
  become: yes
  gather_facts: no
  tasks:
    - debug: msg="执行管理节点任务"

# 处理动态添加的KVM虚拟机
- name: "处理KVM虚拟机"
  hosts: libvirt
  become: yes
  gather_facts: yes
  tasks:
    - name: 测试虚拟机连通性
      ping:
注意事项

如果执行动态主机任务时出现SSH连接报错,可以在add_host任务后添加端口等待逻辑,避免虚拟机SSH服务未就绪导致执行失败:

- name: 等待虚拟机SSH端口就绪
  local_action:
    module: wait_for
    host: "{{ vm_ip }}"
    port: 22
    delay: 5
    timeout: 300
    state: started

内容的提问来源于stack exchange,提问作者David Koenig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 23:24:03