我正在尝试使用Vagrant + Ansible配置一些开发环境。我使用OSX作为主机,使用CentOS 5.6作为客户。
这是我的Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
config.vm.box = "centos56"
config.vm.box_url = "http://dl.dropbox.com/u/9227672/centos-5.6-x86_64-netinstall-4.1.6.box"
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
ansible.verbose = true
end
end
这是我的剧本:
---
- hosts: all
tasks:
- name: PING
command: ping 127.0.0.1
这是错误:
~/dev/vms/wlsCluster/master2> vagrant provision
[default] Running provisioner: ansible...
PLAY [all] ********************************************************************
GATHERING FACTS ***************************************************************
fatal: [default] => {'msg': "FAILED: (25, 'Inappropriate ioctl for device')", 'failed': True}
TASK: [PING] ******************************************************************
FATAL: no hosts matched or all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/Users/brunajardim/playbook.retry
default : ok=0 changed=0 unreachable=1 failed=0
Ansible failed to complete successfully. Any error output should be
visible above. Please fix these errors and try again.
我已经读过它可能与私钥有关。我可以使用像 * - private-key = $ HOME / .vagrant.d / insecure_private_key * 这样的参数来解决问题。现在,如何将 vagrant provision 命令与ansible一起使用并将此参数传递给它?
答案 0 :(得分:1)
奇迹般地,当我更新我的Vagrant和我的Ansible版本时,事情才开始起作用。我真的不知道发生了什么。现在我正在使用Vagrant 1.3.5和Ansible 1.4(开发6008ea40ee)。
感谢大家的回答。
答案 1 :(得分:1)
如果Ansible在非交互式环境(如Jenkins构建版本)中尝试提示您输入(无论出于何种原因),则会出现“不适当的设备ioctl”错误消息。这里缺少的“设备”是TTY。
据推测,Ansible会提示您确认主机密钥或密码。
答案 2 :(得分:0)
你已经说过你在OSX上,所以这不应该是一个问题,但它值得研究并可能帮助其他人使用相同的“不适当的ioctl for device”错误。
在Windows上,这可能意味着您的一个或多个文件中的CRLF行结尾存在问题。如果您正在使用Eclipse,则可以在 File-> Convert Line Delimiters 下转换行结尾。也许您的编辑器会显示空白字符,这可能会显示行结尾的内容。
将Vagrantfile转换为正确的行结尾解决了我的配置中的错误(尽管在Windows上我必须使用shell配置程序在来宾VM上启动Ansible)以及“dpkg-reconfigure:无法重新启动”的奇怪错误-open stdin:没有文件或目录“
答案 3 :(得分:0)
虽然您已经解决了这个问题,但为了将来参考,请将私钥添加到Vagrantfile
,如下所示:
config.ssh.private_key_path = "$HOME/.vagrant.d/insecure_private_key"