在使用Ansible时,有两种方式:(1)在Host机器上安装Ansible,(2)采用Ansible Local的方式,即在虚拟机自身上安装Ansible。对于第(1)种方法,我们需要保证Host机器上已经安装了Ansible,然后进行配置:
Vagrant.configure("2") do |config|
#
# Run Ansible from the Vagrant Host
#
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
end
end
在使用第(2)种方法时,Vagrant会首先检查box中是否已经安装了Ansible,如果没有,则会自动安装到虚拟机上,然后再运行provision:
Vagrant.configure("2") do |config|
# Run Ansible from the Vagrant VM
config.vm.provision "ansible_local" do |ansible|
ansible.playbook = "playbook.yml"
end
end
当我们多次执行“vagrant up”启动虚拟机时,provison并不会每次都执行,只有在这三种情况下provision才会运行:
1.首次执行vagrant up
2.执行vagrant provision
3.执行vagrant reload --provision
当然,你也可以在Vagrantfile中配置成每次执行vagrant up时都运行provision:
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: "echo hello",
run: "always"
end
(六)网络配置
在默认情况下,对于Virtualbox而言,Vagrant将使用Virtualbox的NAT网络方式,这种方式允许虚拟机访问外部网络,但是不允许外界访问虚拟机,就连Host机器也访问不了。另外,我们可以为虚拟机配置private network和public network。在配置private network时,相当于虚拟机和Host机共同组成了一个单独的局域网,外界无法访问该局域网,但是虚拟机可以访问外界,Host机和虚拟机之间也可以互访。请注意,这里说的外界是指原本和Host处于同一局域网的其他机器。
使用private network时,我们可以给虚拟机指定固定的私有IP:
Vagrant.configure("2") do |config|
config.vm.network "private_network", ip: "192.168.50.4"
end
当然也可以使用DHCP的方式动态分配IP:
Vagrant.configure("2") do |config|
config.vm.network "private_network", type: "dhcp"
end
对于Virtualbox而言,此时虚拟机其实有两张网卡在工作,一种是Vagrant默认创建的NAT网卡,另一种是Host only类型的网卡提供private network。
在使用public network时,虚拟机和Host在网络中具有同等的地位(共同使用Host机的物理网卡与外界通信),就相当于在Host所在网络中又多了一台计算机一样,此时虚拟机可以使用网络中的DHCP服务器获得与Host处于同一个网段的IP地址,以下配置默认采用DHCP方式配置public network:
Vagrant.configure("2") do |config|
config.vm.network "public_network"
end
如果Host机器有多张网卡,此时运行vagrant up, Vagrant会询问需要使用那张网卡连接到网络,如果不想要这种交互,则可以在Vagrantfile中进行配置:
config.vm.network "public_network", bridge: [
"en1: Wi-Fi (AirPort)",
]
这里的 Wi-Fi(AirPort)表示使用了Mac笔记本的Airport连接到Wi-Fi。
除了DHCP,也可以使用静态IP:
Vagrant.configure("2") do |config|
config.vm.network "public_network", ip: "192.168.0.5"
end
(七)Provider特定配置
不同的Provider有不同的特性,也存在不同的配置方式。以Virtualbox为例,Vagrant默认会给虚拟机指定一个不具备可读性的名字,比如my-vagrant-project_default_1471685053487_94837,我们可以对此进行配置予以更改:
config.vm.provider "virtualbox" do |v|
v.name = "my_vm"
end
Provider的特定配置也可以覆盖Vagrant原来的配置:
Vagrant.configure("2") do |config|
config.vm.box = "precise64"
config.vm.provider "vmware_fusion" do |v, override|
override.vm.box = "precise64_fusion"
end
end