我正在使用 ansible vsphere_guest 模块在 VMWare 环境中启动基本 Windows 计算机。在我的剧本中,为此我设置了Hosts: 127.0.0.1 connection: local
。我这样做的原因是我相信我没有针对任何特定主机的剧本,因为我还没有。相反,我想在本地运行剧本。
当它运行时,我得到一个新的 Shiny 的 Windows 服务器虚拟机。我现在想做的是重命名该虚拟机的计算机名称。为此,我尝试上传并运行一个 powershell 脚本,例如 rename_host.ps1 $newHostname
。据我了解,我需要使用脚本模块来执行此操作。不过,这次我想定位我的全新虚拟机,我通过事实 {{ newvm_ipaddress }}
获取了该虚拟机的 IP 地址。
但是,当我尝试使用 delegate_to: "{{ newvm_ipaddress}}"
运行此脚本时,它尝试以 SSH 方式运行。 SSH 不起作用,我的目标是带有远程 powershell 的 Windows 机器。
有没有办法设置连接以在 delegate_to 上下文中使用 winRM?也许有更好的方法来做到这一点?
感谢您的帮助
最佳答案
我设法解决了这个问题。答案是 ansible 模块“add_host”。我在 vsphere_guest 下进行了如下操作。这会创建一个新的内存主机,然后可以由不同的播放访问。
- add_host group=new_machine name={{ vm_ipaddress }} ansible_connection=winrm
在此之后,我就有了一个可以针对该主机的新游戏。
- 主机:new_machine
还要注意,变量不会跨越不同的主机。解决方案是在 play A 中使用 set_fact 模块,然后可以从 play B 中访问该模块
-设置事实:
vm_ipaddress: "{{ hw_eth0.ipaddresses[1] }}"#hw_eth0 是从 vsphere_guest 模块返回的事实
关于windows - Ansible Delegate_to WinRM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37793572/