如何在运行时手动向Ansible Tower模板传递主机名
解决方案
你需要同步调整playbook配置与Ansible Tower模板参数,按以下步骤操作即可解决问题:
步骤1:修改playbook逻辑,支持动态传入主机
把原playbook中固定的hosts配置改为动态变量,通过add_host模块在运行时将传入的主机临时加入内存inventory,不需要提前写入静态inventory。修改后的main.yaml示例如下:
- name: 动态添加目标主机到运行时inventory hosts: localhost gather_facts: false vars: # 该变量将从Ansible Tower运行时传入 target_host: "" tasks: - name: 注册目标主机到临时inventory ansible.builtin.add_host: name: "{{ target_host }}" groups: dynamic_targets # 校验变量非空 when: target_host | length > 0 - name: Execution server hosts: dynamic_targets gather_facts: false serial: 1 # 下方直接写你原本的任务逻辑即可
通过add_host添加的主机仅存在于本次playbook运行的内存中,不会修改你现有的静态inventory配置。
步骤2:配置Ansible Tower模板支持运行时传参
- 进入对应Ansible Tower模板的编辑页面,找到「变量」设置项,勾选「启动时提示输入变量」
- 模板启动时,在弹出的变量输入框中填入目标主机信息即可,示例:
target_host: "实际的服务器主机名/IP" - 确保Ansible Tower节点可以正常解析你传入的主机名,若无法解析直接传服务器IP即可。
可选配置:跳过首次连接的主机密钥校验
如果第一次连接目标主机时不想因密钥校验中断执行,可在playbook中添加以下参数:
ansible_ssh_common_args: '-o StrictHostKeyChecking=no'
临时快速验证的简化方案:你也可以直接把原playbook的hosts字段改为
all,然后在Ansible Tower模板启动页面的「限制」输入框填入实际主机名/IP,该方案无需修改playbook逻辑,但仅适用于单次临时执行场景。
内容的提问来源于stack exchange,提问作者Sebastian Peter
相关产品推荐
相关产品推荐

