在Vagrant中运行特别Ansible命令?

在Vagrant中运行特别Ansible命令?,vagrant,ansible,ansible-ad-hoc,Vagrant,Ansible,Ansible Ad Hoc,当构建一个流浪的项目时,运行特别的Ansible任务,而不是将测试命令添加到剧本中是很有帮助的。我尝试了几种针对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 d

当构建一个流浪的项目时,运行特别的Ansible任务,而不是将测试命令添加到剧本中是很有帮助的。我尝试了几种针对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?

我丢失了Vagrant的私有ssh密钥。在这里发现:

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

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

-m
之前的一切基本上都是样板。我使用的是一个默认用户名为“vagrant”的标准框。标志
-i vagrant\u ansible\u inventory\u default
告诉ansible使用vagrant生成的库存文件;它包含一个主机,因此将
all
作为目标是安全的(“默认”也适用)。最后,我们传递Vagrant私钥来验证ssh连接:
--private key~/.Vagrant.d/unsecure_private_key

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

不必每次都传递清单文件、私钥和ssh用户,您可以将它们放入一个可解析的配置文件中。请参见我的更详细答案:

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


此外,如果您使用Vagrant(通过插件)配置EC2盒,那么库存文件将自动生成。您可以对其进行编辑,但下次设置一些新的EC2框时,它将被破坏。

如果您在此错误之前运行了这些框,您应该执行以下操作:

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

然后再试一次。

虽然这个问题很老,但已经在网上解释过了

下面是片段

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

解决方案 如果您不想一直使用额外的标志,请在与您的
Vagrantfile
相同的目录中创建一个具有以下内容的
ansible.cfg

[defaults]
inventory = .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory
然后,您可以运行您的特别命令:

ansible all -m setup
细节 第一次使用Ansible provisioner时,Vagrant会写出一个清单文件,其中包含所有必需的参数,包括用户名和ssh密钥信息。您可以使用
-i
标志指定它:

ansible all -i .vagrant/provisioners/ansible/inventory/vagrant_ansible_inventory \
        -m setup
您还可以使用
ANSIBLE\u INVENTORY
环境变量:

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

此外,您还可以使用
ansible\u ssh\u user
ansible\u ssh\u private\u key\u file
参数将用户和私钥直接添加到清单文件中,因此您不必一直输入这些参数。想知道为什么有人想这么做。。。到目前为止,还没有用于Windows的Ansible控制机器。碰巧的是,如果你想学习Ansible,创建一个流浪工作站(以及其他你想测试控制的机器)似乎是一种安全的学习方式。