我有一台机器(A),我在各种主机上运行Ansible playbooks。这里没有安装Vagrant。
我有另一台机器(B),它有两倍的RAM来托管我的Vagrant盒子。这里没有安装Ansible。
我想使用Ansible以与其他所有主机相同的方式对Vagrant盒子进行操作;也就是说,在machineA上运行ansible-playbook,同时针对machineB上的虚拟化Vagrant框。已经在两者之间建立了SSH密钥。
这看起来像一个简单的用例,但是在鼓励使用Vagrant的内置Ansible配置器的情况下,我无法在任何地方找到它。可能吗? 也许某些SSH隧道和端口转发欺骗的组合?
答案 0 :(得分:1)
事实证明这非常简单。事实上,Vagrant 不根本不需要了解Ansible。
机器上的Ansible库存:
default ansible_host=machineB ansible_port=2222
machineB上的Vagrantfile:
Vagrant.configure("2") do |config|
...
config.vm.network "forwarded_port", id: "ssh", guest: 22, host: 2222
...
end
id: "ssh"
是重要的一点,因为它会覆盖从localhost仅限SSH到guest虚拟机的默认SSH行为。
$ ansible --private-key=~/.ssh/vagrant-default -u vagrant -m ping default
default | SUCCESS => {
"changed": false,
"ping": "pong"
j }
(请注意,必须将Vagrant私钥复制到Ansible主机并在命令行中指定。)