运行 远程 Vagrant box 上的 Ansible 剧本

Running Ansible playbooks on remote Vagrant box

我有一台机器 (A) 运行 在各种主机上运行 Ansible 剧本。这里没有安装 Vagrant。

我有另一台机器 (B),内存是我的 Vagrant 盒子的两倍。这里没有安装Ansible。

我想使用 Ansible 像处理所有其他主机一样处理 Vagrant 盒子;也就是说,运行在 machineA 上使用 ansible-playbook,同时在 machineB 上瞄准虚拟化的 Vagrant box。两者之间已经设置了 SSH 密钥。

这似乎是一个简单的用例,但鉴于鼓励使用 Vagrant 的内置 Ansible 供应器,我无法在任何地方找到它的明确解释。可能吗? 也许是 SSH 隧道和端口转发技巧的某种组合?

事实证明这非常简单。事实上,Vagrant 根本不需要了解 Ansible。

机器A上的Ansible清单:

default ansible_host=machineB ansible_port=2222

机器 B 上的 Vagrantfile:

Vagrant.configure("2") do |config|
  ...
  config.vm.network "forwarded_port", id: "ssh", guest: 22, host: 2222
  ...
end

id: "ssh" 是重要的一点,因为这会覆盖默认的 SSH 行为,即仅从本地主机将 SSH 限制为来宾。

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

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