使用Vagrant和Ansible创建Windows虚拟机

6

我正在尝试在我的Mac上使用Vagrant和Ansible创建和配置Windows 7虚拟机。当我在Vagrantfile中不调用Ansible时,我能够运行"vagrant up"命令。

我正在使用以下playbook.yml文件:

---
- hosts: all
  tasks:
    - name: run win ping
      win_ping:

当我在Vagrantfile中添加ansible代码时,出现以下错误。
GATHERING FACTS *************************************************************** 
failed: [default] => {"failed": true, "parsed": false}
/bin/sh: /usr/bin/python: No such file or directory

在我看来,这个错误意味着它无法找到Python,因为它正在寻找Python,就好像它是一个Linux机器一样。

另外,我已经运行了

ansible windows -m win_ping

其中windows是由Vagrant启动的虚拟机的IP地址,所以我认为问题不是出在Ansible上,而是出在Vagrant如何调用Ansible上。

有人尝试过在Windows虚拟机上使用Vagrant + Ansible吗?是否有什么明显的问题我忽略了(也许是要传递给Ansible的选项)?

我正在使用Vagrant版本1.7.2和Ansible版本1.8.3。


你能运行 which ansiblewhich python 命令来检查它们的位置(尤其是后者)。此外,你能否在 vagrant 上下文之外运行 ansible-playbook windows -m win_ping 命令并查看是否有效?看起来 vagrant 内部会调用 ansible-playbook 命令:https://github.com/mitchellh/vagrant/blob/master/plugins/provisioners/ansible/provisioner.rb#L62 - Torben Knerr
另外,vagrant up --debug 命令是否能够提供更多的信息? - Torben Knerr
2个回答

2

使用Ansible配置Windows主机(无论是Vagrant、虚拟机还是实体机),首要考虑的是正确的配置。在编写playbook之前,您应该先准备好正确的配置。

如果使用Vagrant管理Windows主机,则您的配置文件group_vars/windows-dev应包含以下内容:

ansible_user: IEUser
ansible_password: Passw0rd!
ansible_port: 55986 # not 5986, as we would use for non-virtualized environments
ansible_connection: winrm
ansible_winrm_server_cert_validation: ignore

请确保输入正确的凭据并选择正确的端口ansible-port。使用Vagrant工作,您可以从vagrant up后由Vagrant生成的日志消息中获取正确的端口。在我的情况下,它看起来像这样:

==> default: Forwarding ports...
    default: 5985 (guest) => 55985 (host) (adapter 1)
    default: 5986 (guest) => 55986 (host) (adapter 1)

如果你感兴趣,可以在此处找到我的Vagrantfile,它使用来自https://developer.microsoft.com/en-us/microsoft-edge/tools/vmsMicrosoft Edge on Windows 10 Stable (14.xxx)镜像。

现在,win_ping模块应该可以工作了 - 假设您已经在Windows上执行了所有必要的准备步骤,这些步骤围绕着执行脚本ConfigureRemotingForAnsible.ps1(更多信息可以在此博客文章Making Windows Ansible ready章节中找到):

ansible windows-dev -i hostsfile -m win_ping

只有当您看到SUCCESS时,才应继续编写您的playbook。


0
在我的Windows配置剧本中,我在头部设置了以下内容:
gather_facts: no

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接