我正在使用ansible vsphere_guest模块在VMWare环境中启动基本Windows机器。在我的剧本中,为此我设置了Hosts: 127.0.0.1 connection: local
。我这样做的原因是我相信我不会在任何特定的主机上瞄准这个剧本,因为我还没有。我反而想在本地运行剧本。
当这个运行时,我得到一个新的闪亮的Windows服务器VM。我现在要做的是重命名该VM的计算机名称。为此,我尝试上传并运行类似rename_host.ps1 $newHostname
的PowerShell脚本。据我了解,我需要使用脚本模块来执行此操作。但是,这次我想要定位我的全新VM,我通过事实{{ newvm_ipaddress }}
获取IP地址。
但是,当我尝试使用delegate_to: "{{ newvm_ipaddress}}"
运行此脚本时,它尝试以SSH身份运行。 SSH不会工作,我的目标是远程PowerShell的Windows机器。
有没有办法在delegate_to的上下文中设置连接以使用winRM?也许有更好的方法可以做到这一点?
感谢您的帮助
答案 0 :(得分:1)
我设法解决了如何解决它。答案是ansible模块' add_host'。我在vsphere_guest下玩了如下游戏。这将创建一个新的内存主机,然后可以通过不同的播放来访问它。
- add_host group=new_machine name={{ vm_ipaddress }} ansible_connection=winrm
在此之后,我有一个新游戏,现在可以针对这个主机。
- host: new_machine
另外需要注意的是,变量不会跨越不同的主机。解决方案是在播放A中使用set_fact模块,然后可以从播放B中访问该模块
-set_fact:
vm_ipaddress: "{{ hw_eth0.ipaddresses[1] }}" #hw_eth0 is the fact returned from the vsphere_guest module
答案 1 :(得分:0)
如果在使用delegate_to之前使用新主机名和ssh winrm连接参数更新库存,或者使用这些参数设置一些默认的catch-all命名方案呢?
例如:
[databases]
db-[a:f].example.com:5986 ansible_user=Administrator ansible_connection=winrm ansible_winrm_server_cert_validation=ignore