Ansible Delegate_to WinRM

时间:2016-06-13 15:23:19

标签: windows powershell automation ansible

我正在使用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?也许有更好的方法可以做到这一点?

感谢您的帮助

2 个答案:

答案 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