5 # Vagrantfile to set up demo VMs and network connections
7 # Note: VirtualBox is currently the only provier supported for the demo.
9 # [ host1 VM ] <=== Internal Network "host1-vpp1" ===> [ vpp1 VM ]
10 # [ vpp1 VM ] <==+ Internal Network "vpp1-vpp2" ===> [ vpp2 VM ]
12 # [ vpp1 VM ] <--- Private Network 192.168.10.x -+--> [ vbd VM ]
15 # [ vpp2 VM ] <=== Internal Network "host2-vpp2" ===> [ host2 VM ]
17 Vagrant.configure(2) do |config|
19 config.ssh.forward_x11 = true
21 # Add .gnupg dir in so folks can sign patches
22 # Note, as gnupg puts socket files in that dir, we have
23 # to be cautious and make sure we are dealing with a plain file
24 homedir = File.expand_path("~/")
25 Dir["#{homedir}/.gnupg/**/*"].each do |fname|
27 destname = fname.sub(Regexp.escape("#{homedir}/"),'')
28 config.vm.provision "file", source: fname, destination: destname
32 # Copy in the .gitconfig if it exists
33 if File.file?(File.expand_path("~/.gitconfig"))
34 config.vm.provision "file", source: "~/.gitconfig", destination: ".gitconfig"
37 # vagrant-cachier caches apt/yum etc to speed subsequent
40 # vagrant plugin install vagrant-cachier
42 if Vagrant.has_plugin?("vagrant-cachier")
43 config.cache.scope = :box
46 # Define vpp1 VM, L3 mgmt interface (eth1) to vbd and vpp2 VMs,
47 # L2 interface (GigabitEthernet0/9/0) to host1, and
48 # L2 interface (GigabitEthernet0/a/0) to vpp2
50 # [ vpp1 VM ] <-- Private Network 192.168.10.x -+-> [ vbd VM ]
53 # [ host1 VM ] <== Internal Network "host1-vpp1" ==> [ vpp1 VM ]
54 # [ vpp1 VM ] <== Internal Network "vpp1-vpp2" ==> [ vpp2 VM ]
56 config.vm.define :vpp1 do |vpp1|
57 vpp1.vm.box = "puppetlabs/ubuntu-14.04-64-nocm"
58 # Mount karaf packages directory if specified
59 if ENV.key?('KARAF_PACKAGES')
60 vpp1.vm.synced_folder ENV['KARAF_PACKAGES'], "/karaf-packages", disabled: false
62 # Mount Maven repository if specified
63 if ENV.key?('HONEYCOMB_M2_REPO')
64 vpp1.vm.synced_folder ENV['HONEYCOMB_M2_REPO'], "/m2-repository", disabled: false
66 # Mount VPP repository if specified
67 if ENV.key?('VPP_REPO')
68 vpp1.vm.synced_folder ENV['VPP_REPO'], "/vpp", disabled: false
70 vpp1.vm.synced_folder "../", "/honeycomb", disabled: false
71 vagrant_vpp_agent_addr = "192.168.10.11"
72 vpp1.vm.network "private_network", ip: "#{vagrant_vpp_agent_addr}"
73 vpp1.vm.provider "virtualbox" do |vb|
74 vb.customize ["modifyvm", :id, "--nic3", "intnet"]
75 vb.customize ["modifyvm", :id, "--intnet3", "host1-vpp1"]
76 vb.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
77 vb.customize ["modifyvm", :id, "--nic4", "intnet"]
78 vb.customize ["modifyvm", :id, "--intnet4", "vpp1-vpp2"]
79 vb.customize ["modifyvm", :id, "--nicpromisc4", "allow-all"]
82 vpp1.vm.provision 'shell' do | s|
83 s.path = "../vagrant/bootstrap.ubuntu1404.sh"
84 s.args = ["vpp1", "is_vpp_agent", "#{vagrant_vpp_agent_addr}"]
88 # Define vpp2 VM, L3 mgmt interface (eth1) to vbd and vpp1 VMs,
89 # L2 interface (GigabitEthernet0/9/0) to host1, and
90 # L2 interface (GigabitEthernet0/a/0) to vpp1
92 # [ vpp1 VM ] <-- Private Network 192.168.10.x -+-> [ vbd VM ]
95 # [ vpp2 VM ] <== Internal Network "host2-vpp2" ==> [ host2 VM ]
96 # [ vpp1 VM ] <== Internal Network "vpp1-vpp2" ==> [ vpp2 VM ]
98 config.vm.define :vpp2 do |vpp2|
99 # TODO: Run centos on vpp2 VM
100 # vpp2.vm.box = "puppetlabs/centos-7.0-64-nocm"
101 vpp2.vm.box = "puppetlabs/ubuntu-14.04-64-nocm"
102 # Mount karaf packages directory if specified
103 if ENV.key?('KARAF_PACKAGES')
104 vpp2.vm.synced_folder ENV['KARAF_PACKAGES'], "/karaf-packages", disabled: false
106 # Mount Maven repository if specified
107 if ENV.key?('HONEYCOMB_M2_REPO')
108 vpp2.vm.synced_folder ENV['HONEYCOMB_M2_REPO'], "/m2-repository", disabled: false
110 # Mount VPP repository if specified
111 if ENV.key?('VPP_REPO')
112 vpp2.vm.synced_folder ENV['VPP_REPO'], "/vpp", disabled: false
114 vpp2.vm.synced_folder "../", "/honeycomb", disabled: false
115 vagrant_vpp_agent_addr = "192.168.10.12"
116 vpp2.vm.network "private_network", ip: "#{vagrant_vpp_agent_addr}"
117 vpp2.vm.provider "virtualbox" do |vb|
118 vb.customize ["modifyvm", :id, "--nic3", "intnet"]
119 vb.customize ["modifyvm", :id, "--intnet3", "host2-vpp2"]
120 vb.customize ["modifyvm", :id, "--nicpromisc3", "allow-all"]
121 vb.customize ["modifyvm", :id, "--nic4", "intnet"]
122 vb.customize ["modifyvm", :id, "--intnet4", "vpp1-vpp2"]
123 vb.customize ["modifyvm", :id, "--nicpromisc4", "allow-all"]
126 vpp2.vm.provision 'shell' do | s|
127 s.path = "../vagrant/bootstrap.ubuntu1404.sh"
128 s.args = ["vpp2", "is_vpp_agent", "#{vagrant_vpp_agent_addr}"]
132 # Define vbd VM and L3 mgmt interface (eth1) to vpp1 and vpp2 VMs
134 # [ vpp1 VM ] <-- Private Network 192.168.10.x -+-> [ vbd VM ]
138 config.vm.define :vbd do |vbd|
139 vbd.vm.box = "puppetlabs/ubuntu-14.04-64-nocm"
140 # Mount karaf packages directory if specified
141 if ENV.key?('KARAF_PACKAGES')
142 vbd.vm.synced_folder ENV['KARAF_PACKAGES'], "/karaf-packages", disabled: false
144 # Mount Maven repository if specified
145 if ENV.key?('HONEYCOMB_M2_REPO')
146 vbd.vm.synced_folder ENV['HONEYCOMB_M2_REPO'], "/m2-repository", disabled: false
148 vbd.vm.synced_folder "../", "/honeycomb", disabled: false
149 vbd.vm.network "private_network", ip: "192.168.10.10"
150 vbd.vm.provider "virtualbox" do |vb|
153 vbd.vm.provision 'shell' do | s|
154 s.path = "../vagrant/bootstrap.ubuntu1404.sh"
155 s.args = ["vbd", "is_vbd_vm", ""]
159 # Define host1 VM and L2 interface (eth1) to vpp1 VM
161 # [ host1 VM ] <== Internal Network "host1-vpp1" ==> [ vpp1 VM ]
163 config.vm.define :host1 do |host1|
164 host1.vm.box = "puppetlabs/ubuntu-14.04-64-nocm"
165 host1.vm.provider "virtualbox" do |vb|
166 vb.customize ["modifyvm", :id, "--nic2", "intnet"]
167 vb.customize ["modifyvm", :id, "--intnet2", "host1-vpp1"]
168 vb.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
170 host1.vm.provision "shell" do |s|
171 s.path = "bootstrap-host.ubuntu1404.sh"
172 s.args = ["host1", "172.16.15.14/24"]
176 # Define host2 VM and L2 interface (eth1) to vpp2 VM
178 # [ vpp2 VM ] <== Internal Network "host2-vpp2" ==> [ host2 VM ]
180 config.vm.define :host2 do |host2|
181 host2.vm.box = "puppetlabs/ubuntu-14.04-64-nocm"
182 host2.vm.provider "virtualbox" do |vb|
183 vb.customize ["modifyvm", :id, "--nic2", "intnet"]
184 vb.customize ["modifyvm", :id, "--intnet2", "host2-vpp2"]
185 vb.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
187 host2.vm.provision "shell" do |s|
188 s.path = "bootstrap-host.ubuntu1404.sh"
189 s.args = ["host2", "172.16.15.15/24"]
193 # Define jaws VM (for wireshark) connected to the vpp1 <-> vpp2
196 # [ vpp1 VM ] <==+ Internal Network "vpp1-vpp2" ===> [ vpp2 VM ]
199 config.vm.define :jaws do |jaws|
200 jaws.vm.box = "puppetlabs/ubuntu-14.04-64-nocm"
201 jaws.vm.provider "virtualbox" do |vb|
202 vb.customize ["modifyvm", :id, "--nic2", "intnet"]
203 vb.customize ["modifyvm", :id, "--intnet2", "vpp1-vpp2"]
204 vb.customize ["modifyvm", :id, "--nicpromisc2", "allow-all"]
206 jaws.vm.provision "shell" do |s|
207 s.path = "bootstrap-host.ubuntu1404.sh"
208 s.args = ["jaws", "172.16.15.15/24"]