Vagrant 在远程流浪者箱上运行Ansible剧本

Vagrant 在远程流浪者箱上运行Ansible剧本,vagrant,ansible,ssh-tunnel,Vagrant,Ansible,Ssh Tunnel,我有一台机器(A),可以在各种主机上运行Ansible playbooks。这里没有安装流浪汉 我有另一台机器(B),它有两个内存,用来存放我的流浪汉箱子。Ansible未安装在此处 我想用Ansible像对待其他主人一样对待流浪者的盒子;也就是说,在machineA上运行ansible playbook,同时瞄准machineB上的虚拟流浪者箱。SSH密钥已在两者之间设置 这看起来像是一个简单的用例,但鉴于Vagrant内置Ansible provisioner的鼓励使用,我在任何地方都找不到

我有一台机器(A),可以在各种主机上运行Ansible playbooks。这里没有安装流浪汉

我有另一台机器(B),它有两个内存,用来存放我的流浪汉箱子。Ansible未安装在此处

我想用Ansible像对待其他主人一样对待流浪者的盒子;也就是说,在machineA上运行ansible playbook,同时瞄准machineB上的虚拟流浪者箱。SSH密钥已在两者之间设置

这看起来像是一个简单的用例,但鉴于Vagrant内置Ansible provisioner的鼓励使用,我在任何地方都找不到清楚的解释。可能吗?
也许SSH隧道和端口转发技巧的某种结合?

结果表明,这非常简单。流浪汉其实根本不需要了解Ansible

机器上的可用库存A:

default ansible_host=machineB ansible_port=2222
机器B上的文件:

Vagrant.configure("2") do |config|
  ...
  config.vm.network "forwarded_port", id: "ssh", guest: 22, host: 2222
  ...
end
id:“ssh”是重要的一点,因为这覆盖了默认的ssh行为,即仅从localhost将ssh限制为guest

$ ansible --private-key=~/.ssh/vagrant-default -u vagrant -m ping default
default | SUCCESS => {
    "changed": false, 
    "ping": "pong"
j }

(请注意,必须将Vagrant私钥复制到Ansible主机上,并在命令行中指定)。

在尝试执行此操作时遇到问题。ansible_主机应该是machineB还是machineA。同样在我的例子中,我的vm有一个主机名,所以我假设我会用清单中的主机名替换“default”,ansible_host通知ansible到达目标的位置;因此,它应该是流浪主机的主机名或IP<代码>默认值是我给我的流浪主机(回想起来是一个糟糕的名字)的可解析别名。它的端口(2222)决定了目标的流浪客VM。好的,谢谢。我的困惑是,我在同一个机器上运行ansible和目标vm(用于测试)。因此,在本例中,ansible_主机也是我的目标和ansible节点。