【问题标题】:Ansible Delegate_to WinRMAnsible Delegate_to WinRM
【发布时间】:2016-06-14 22:38:32
【问题描述】:

我正在使用 ansible vsphere_guest 模块在 VMWare 环境中启动基础 Windows 机器。在我的剧本中,为此我设置了Hosts: 127.0.0.1 connection: local。我这样做的原因是我相信我没有将这本剧本定位在任何特定的主机上,因为我还没有。相反,我想在本地运行剧本。

当它运行时,我得到了一个新的闪亮的 windows 服务器虚拟机。我现在要做的是重命名该 VM 的计算机名称。为此,我尝试上传并运行类似rename_host.ps1 $newHostname 的 powershell 脚本。据我了解,我需要使用脚本模块来执行此操作。但是,这次我想针对我的全新虚拟机,我通过一个事实获得了它的 IP 地址,{{ newvm_ipaddress }}

但是,当我尝试使用 delegate_to: "{{ newvm_ipaddress}}" 运行此脚本时,它尝试以 SSH 运行。 SSH 不起作用,我的目标是一台带有远程 powershell 的 Windows 机器。

有什么方法可以在delegate_to 的上下文中设置连接以使用winRM?也许有更好的方法来做到这一点?

感谢您的帮助

【问题讨论】:

    标签: windows powershell automation ansible


    【解决方案1】:

    我设法解决了这个问题。答案是 ansible 模块“add_host”。我在 vsphere_guest 下有一个游戏如下。这会创建一个新的内存主机,然后可以由不同的游戏访问。

    - add_host group=new_machine name={{ vm_ipaddress }} ansible_connection=winrm

    在这之后,我就有了一个新的玩法,现在可以针对这个主机了。

    - host: new_machine

    还要注意,变量不会跨越不同的主机。解决方案是在 play A 中使用 set_fact 模块,然后可以从 play B 中访问该模块

    -set_fact: vm_ipaddress: "{{ hw_eth0.ipaddresses[1] }}" #hw_eth0 is the fact returned from the vsphere_guest module

    【讨论】:

      【解决方案2】:

      如何在使用 delegate_to 之前使用新主机名和 ssh winrm 连接参数更新清单,或者使用这些参数设置一些默认的包罗万象的命名方案?

      例如:

      [databases]
      db-[a:f].example.com:5986 ansible_user=Administrator ansible_connection=winrm ansible_winrm_server_cert_validation=ignore
      

      【讨论】:

      • 我可以使用新 VM 的 IP 地址手动更新清单文件,但是当事实从 vsphere_guest 返回新 IP 地址时,如何自动执行此操作?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 2018-07-22
      • 2021-07-25
      相关资源
      最近更新 更多