Linux 中怎么在 Ansible 中使用 Add_host 动态纳管

雨浩同学_5565

雨浩同学_5565

2026-11-03

201人浏览

原创

add_host 是 Ansible 内置模块,用于在 playbook 运行时动态添加主机到内存清单,仅当前执行有效,适用于云主机创建后纳管、API 获取IP后初始化等场景。

linux 中怎么在 ansible 中使用 add_host 动态纳管

add_host 是 Ansible 的一个内置模块,用于在 playbook 运行过程中动态向当前 inventory 中添加新主机或主机组,不依赖静态清单文件(如 /etc/ansible/hosts)或外部动态脚本。它常用于:

  • 根据任务结果(如创建云主机、获取 API 返回 IP)临时加入新节点;
  • 在多阶段部署中,让后续任务能立即管理刚生成的机器;
  • 避免硬编码 IP 或重复修改 inventory 文件。

✅ 什么时候用 add_host?

它不是用来替代 inventory 的持久化管理,而是“运行时临时注册”。添加的主机仅在当前 playbook 执行生命周期内有效,不会写入磁盘清单,也不会影响下次运行。

常见适用场景:

  • 使用 ec2, digital_ocean, vmware_guest 等模块创建虚拟机后,立即将其 IP 加入 inventory;
  • 调用 HTTP API 获取一批新服务器地址,需立刻对其执行初始化;
  • 条件分支中按需启用不同目标组(例如测试环境扩容)。

✅ 基本语法与用法

- name: Add a new host to in-memory inventory
  add_host:
    hostname: "192.168.50.101"
    groups: "webservers"
    ansible_user: "ubuntu"
    ansible_ssh_private_key_file: "~/.ssh/id_rsa"

关键参数说明:

Linux Security Scanner
Linux Security Scanner

Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...

下载
  • hostname:必需,可以是 IP 或主机名(Ansible 后续通过它建立 SSH 连接);
  • groups:可选,字符串或列表,指定归属的主机组(如 "db" 或 ["app", "prod"]);
  • ansible_* 变量:可直接设置连接参数(如 ansible_user, ansible_port, ansible_ssh_common_args),等效于在 inventory 中为该主机定义变量;
  • port:旧版支持,建议统一用 ansible_port;
  • inventory_hostname:不推荐手动设,Ansible 自动处理。

⚠️ 注意:add_host 本身不建立 SSH 连接,只是注册信息;后续 task 若要对该主机操作,需确保它已可通过 SSH 访问(比如密钥已分发、防火墙放行等)。


✅ 完整示例:创建 VM 后动态纳管并部署 Nginx

---
- name: Provision and configure new web server
  hosts: localhost
  gather_facts: false
  tasks:
    - name: Launch a new CentOS VM (example using community.libvirt)
      community.libvirt.virt:
        name: web-new-01
        state: running
        memory: 1024
        vcpus: 2
        os_variant: centos8
        networks:
          - name: default
            bridge: virbr0
        disks:
          - size: 10G
      register: vm_result

    - name: Extract IP address from libvirt guest info
      set_fact:
        new_web_ip: "{{ vm_result.guests[0].interfaces[0].ipv4[0] }}"

    - name: Add newly created host to inventory
      add_host:
        hostname: "{{ new_web_ip }}"
        groups: "temp_webservers"
        ansible_user: "root"
        ansible_ssh_common_args: "-o StrictHostKeyChecking=no"

    - name: Wait for SSH to become ready
      wait_for_connection:
        host: "{{ new_web_ip }}"
        port: 22
        timeout: 300
      delegate_to: localhost

- name: Configure the new web server
  hosts: temp_webservers
  become: true
  tasks:
    - name: Install nginx
      dnf:
        name: nginx
        state: present

    - name: Start and enable nginx
      service:
        name: nginx
        state: started
        enabled: true

? 提示:

  • 第一个 play 运行在 localhost,负责创建资源并注册主机;
  • add_host 注册后,第二个 play 就能以 hosts: temp_webservers 直接调用;
  • wait_for_connection 是安全实践,防止因 SSH 服务未就绪导致后续失败。

❗ 常见误区提醒

  • add_host 添加的主机不能被 ansible all -m ping 这类 ad-hoc 命令识别,只对当前 playbook 内的后续 plays/taks 生效;
  • 不支持在 include_tasks / import_tasks 中跨文件传递 add_host 注册的主机(除非用 import_playbook);
  • 若想持久化纳管,仍需配合动态 inventory 脚本或 CMDB 同步机制;
  • 主机名若含特殊字符(如 -, _, .),建议用引号包裹,避免 YAML 解析错误。

需要结合具体云平台(AWS/Aliyun/OpenStack)或配置中心(Zabbix/CMDB)做动态发现?也可以基于 add_host + shell/uri 模块组合实现轻量级自动纳管逻辑。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

linux

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

4390

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

3693

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

2953

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

7310

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

6942

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

3953

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

3445

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

3699

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

297

3

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Python uv官方安装与入门文档
Python uv官方安装与入门文档

共0课时 | 0人学习

Buffalo框架快速入门指南
Buffalo框架快速入门指南

共0课时 | 0人学习

Valgrind支持平台说明
Valgrind支持平台说明

共0课时 | 0人学习