在Vagrant中运行ad hoc Ansible命令?

时间:2013-10-11 22:18:32

标签: vagrant ansible ansible-ad-hoc

构建Vagrant项目时,运行ad hoc Ansible任务而不是将测试命令添加到playbook会很有帮助。我已经尝试了几种针对VM的方法,但仍然遇到此错误:

default | FAILED => SSH encountered an unknown error during the connection. We 
recommend you re-run the command using -vvvv, which will enable SSH debugging
output to help diagnose the issue

我正在使用Vagrant生成的Ansible清单文件,该框具有正常工作的主机名。如何使用单个Ansible任务来定位我的Vagrant VM?

6 个答案:

答案 0 :(得分:14)

我错过了Vagrant的私人密钥。在这里找到:stackoverflow.com/a/18943360/503463

有几种方法可以做到这一点,但这就是我正在使用的方法:

ansible all -i vagrant_ansible_inventory_default -u vagrant --private-key ~/.vagrant.d/insecure_private_key -m ping

-m之前的所有内容基本上都是样板文件。我正在使用默认用户名'vagrant'的标准框。标志-i vagrant_ansible_inventory_default告诉Ansible使用Vagrant生成的库存文件;它包含一个主机,因此定位all是安全的('默认'也可以)。最后,我们传递Vagrant私钥来验证ssh连接:--private-key ~/.vagrant.d/insecure_private_key

答案 1 :(得分:3)

虽然,这个问题已经过时了,但已经在ansible documentation

上进行了解释

这是片段

ansible-playbook -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory --private-key=~/.vagrant.d/insecure_private_key -u vagrant playbook.yml
希望,这会有助于他人。感谢

答案 2 :(得分:2)

解决方案

如果您不想一直使用额外的标记,请在与ansible.cfg相同的目录中创建Vagrantfile,其中包含以下内容:

[defaults]
inventory = .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory

然后你可以运行ad-hoc命令:

ansible all -m setup

详细

第一次使用Ansible配置程序时,Vagrant会写出一个包含所有必需参数的清单文件,包括用户名和ssh密钥信息。您可以使用-i标志指定它:

ansible all -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory \
        -m setup

您还可以使用ANSIBLE_INVENTORY环境变量:

export ANSIBLE_INVENTORY=.vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory

答案 3 :(得分:1)

在主机的~/.ssh/known_hosts文件中删除指向127.0.0.1的条目。然后尝试再次配置vagrant实例。

答案 4 :(得分:1)

不是每次都传递inventory_file,private_key和ssh_user,而是将它们放入ansible配置文件中。请在此处查看我的更详细答案:https://stackoverflow.com/a/25316963/502457

@geerlingguy正确地指出您可以将该信息放入库存文件中。但是,您仍需要键入库存路径,或将其添加到ansible.cfg。

此外,如果您使用Vagrant配置EC2框(通过插件),则会自动生成清单文件。您可以对其进行编辑,但下次配置一些新的EC2框时会受到轰炸。

答案 5 :(得分:0)

也许如果你在此错误之前运行你的盒子,你应该执行这个:

ssh-keygen -f "/home/your_user/.ssh/known_hosts" -R host

你也应该跑:

ssh-keygen -f "/home/your_user/.ssh/known_hosts" -R 127.0.0.1

再试一次。