2892b954da6061ff2f4340938b756f360d361e1f
[honeycomb.git] / vagrant-demo / Vagrantfile
1 # -*- mode: ruby -*-
2 # vi: set ft=ruby :
3
4 #
5 # Vagrantfile to set up demo VMs and network connections
6 #
7 # Note: VirtualBox is currently the only provier supported for the demo.
8 #
9 # [ host1 VM ] <=== Internal Network "host1-vpp1" ===> [  vpp1 VM ]
10 # [  vpp1 VM ] <==+ Internal Network "vpp1-vpp2"  ===> [  vpp2 VM ]
11 # [  jaws VM ] <==+
12 # [  vpp1 VM ] <--- Private Network 192.168.10.x -+--> [   vbd VM ]
13 #                   (Mgmt network)                |
14 #                                                 +--> [  vpp2 VM ]
15 # [  vpp2 VM ] <=== Internal Network "host2-vpp2" ===> [ host2 VM ]
16 #
17 Vagrant.configure(2) do |config|
18
19   config.ssh.forward_x11 = true
20
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|
26     if File.file?(fname)
27       destname = fname.sub(Regexp.escape("#{homedir}/"),'')
28       config.vm.provision "file", source: fname, destination: destname
29     end
30   end
31
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"
35   end
36
37   # vagrant-cachier caches apt/yum etc to speed subsequent
38   # vagrant up
39   # to enable, run
40   # vagrant plugin install vagrant-cachier
41   #
42   if Vagrant.has_plugin?("vagrant-cachier")
43     config.cache.scope = :box
44   end
45
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
49   #
50   # [  vpp1 VM ] <-- Private Network 192.168.10.x -+-> [   vbd VM ]
51   #                  (Mgmt network)                |
52   #                                                +-> [  vpp2 VM ]
53   # [ host1 VM ] <== Internal Network "host1-vpp1" ==> [  vpp1 VM ]
54   # [  vpp1 VM ] <== Internal Network "vpp1-vpp2"  ==> [  vpp2 VM ]
55   #
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
61     end
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
65     end
66     # Mount VPP repository if specified
67     if ENV.key?('VPP_REPO')
68       vpp1.vm.synced_folder ENV['VPP_REPO'], "/vpp", disabled: false
69     end
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"]
80       vb.memory = "4096"
81     end
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}"]
85     end
86 end
87
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
91   #
92   # [  vpp1 VM ] <-- Private Network 192.168.10.x -+-> [   vbd VM ]
93   #                  (Mgmt network)                |
94   #                                                +-> [  vpp2 VM ]
95   # [  vpp2 VM ] <== Internal Network "host2-vpp2" ==> [ host2 VM ]
96   # [  vpp1 VM ] <== Internal Network "vpp1-vpp2"  ==> [  vpp2 VM ]
97   #
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
105     end
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
109     end
110     # Mount VPP repository if specified
111     if ENV.key?('VPP_REPO')
112       vpp2.vm.synced_folder ENV['VPP_REPO'], "/vpp", disabled: false
113     end
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"]
124       vb.memory = "4096"
125     end
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}"]
129     end
130   end
131  
132   # Define vbd VM and L3 mgmt interface (eth1) to vpp1 and vpp2 VMs
133   #
134   # [  vpp1 VM ] <-- Private Network 192.168.10.x -+-> [   vbd VM ]
135   #                  (Mgmt network)                |
136   #                                                +-> [  vpp2 VM ]
137   #
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
143     end
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
147     end
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|
151       vb.memory = "2048"
152     end
153     vbd.vm.provision 'shell' do | s|
154       s.path = "../vagrant/bootstrap.ubuntu1404.sh"
155       s.args = ["vbd", "is_vbd_vm", ""]
156     end
157   end
158
159   # Define host1 VM and L2 interface (eth1) to vpp1 VM
160   #
161   # [ host1 VM ] <== Internal Network "host1-vpp1" ==> [  vpp1 VM ]
162   #
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"]
169     end
170     host1.vm.provision "shell" do |s|
171       s.path = "bootstrap-host.ubuntu1404.sh"
172       s.args = ["host1", "172.16.15.14/24"]
173     end
174   end
175
176   # Define host2 VM and L2 interface (eth1) to vpp2 VM
177   #
178   # [  vpp2 VM ] <== Internal Network "host2-vpp2" ==> [ host2 VM ]
179   #
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"]
186     end
187     host2.vm.provision "shell" do |s|
188       s.path = "bootstrap-host.ubuntu1404.sh"
189       s.args = ["host2", "172.16.15.15/24"]
190     end
191   end
192
193   # Define jaws VM (for wireshark) connected to the vpp1 <-> vpp2
194   # internal network.
195   #
196   # [  vpp1 VM ] <==+ Internal Network "vpp1-vpp2"  ===> [  vpp2 VM ]
197   # [  jaws VM ] <==+
198   #
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"]
205     end
206     jaws.vm.provision "shell" do |s|
207       s.path = "bootstrap-host.ubuntu1404.sh"
208       s.args = ["jaws", "172.16.15.15/24"]
209     end
210   end
211 end