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

如何通过Extra Vars向Ansible Playbook传递目标主机名?

解决Ansible通过Extra Vars指定未在Inventory中定义的主机的问题

你可以通过以下两种方式实现无需提前在Inventory中配置主机,直接通过Extra Vars指定目标主机并运行Playbook:

方法一:命令行直接传入主机列表(无需修改Playbook)

Ansible支持通过-i参数在命令行直接指定临时主机,不需要提前写入Inventory文件。结合你的Playbook,执行命令如下:

# 指定单个主机,末尾逗号不可省略
ansible-playbook -i "目标主机IP或域名," playbook.yml -e "host=all"

# 指定多个主机,用逗号分隔
ansible-playbook -i "host1.example.com,host2.example.com" playbook.yml -e "host=all"

说明:

  • -i参数后的单个主机末尾必须加逗号,避免Ansible将其识别为Inventory文件路径
  • 传入host=all是因为你的Playbook中hosts: "{{ host }}",此时all会匹配-i参数指定的所有临时主机

方法二:在Playbook中动态添加主机(需修改Playbook)

通过add_host模块在Playbook运行时动态将Extra Vars指定的主机添加到临时组,再针对该组执行任务。修改后的Playbook如下:

- name: 动态添加目标主机到临时组
  hosts: localhost
  gather_facts: no
  tasks:
    - name: 批量添加主机
      add_host:
        name: "{{ item }}"
        groups: target_hosts
      loop: "{{ host.split(',') }}"

- hosts: target_hosts
  tasks:
    - name: KLIST COMMAND
      command: klist
      register: klist_result

    - name: TEST COMMAND
      ansible.builtin.shell: echo hi > /tmp/test_result.txt

执行命令时直接传入目标主机列表:

ansible-playbook playbook.yml -e "host=host1.example.com,host2.example.com"

注意事项:

  1. 确保控制节点能通过SSH无密码访问目标主机(或配置了密钥认证)
  2. 目标主机需具备执行任务的权限(比如写入/tmp目录的权限)
  3. 如果目标主机使用非标准SSH端口,可在主机后加上端口,比如host1.example.com:2222

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 16:57:15