运行 远程 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 主机并在命令行中指定)。
我有一台机器 (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 主机并在命令行中指定)。