Merge "Change from using chef to local config files"
[integration.git] / bootstrap / vagrant-onap / Vagrantfile
1 # -*- mode: ruby -*-
2 # vi: set ft=ruby :
3
4 Vagrant::DEFAULT_SERVER_URL.replace('https://vagrantcloud.com')
5
6 configuration = {
7   # Generic parameters used across all ONAP components
8   'key_name'            => 'ecomp_key',
9   'pub_key'             => '',
10   'nexus_repo'          => 'https://nexus.onap.org/content/sites/raw',
11   'nexus_repo_root'     => 'https://nexus.onap.org',
12   'nexus_url_snapshot'  => 'https://nexus.onap.org/content/repositories/snapshots',
13   'nexus_docker_repo'   => 'nexus3.onap.org:10001',
14   'nexus_username'      => 'docker',
15   'nexus_password'      => 'docker',
16   'dmaap_topic'         => 'AUTO',
17   'artifacts_version'   => '1.0.0',
18   'docker_version'      => 'latest',
19   # Parameters for DCAE instantiation
20   'dcae_zone'           => 'iad4',
21   'dcae_state'          => 'vi',
22   'openstack_tenant_id' => '',
23   'openstack_username'  => '',
24   'openstack_api_key'   => '',
25   'openstack_password'  => '',
26   'odl_version'         => '0.5.3-Boron-SR3',
27   # Parameters for enabling features
28   'debug'               => 'True',
29   'build_image'         => 'True',
30   'clone_repo'          => 'True',
31   'compile_repo'        => 'False',
32   'enable_oparent'      => 'True',
33   'skip_get_images'     => 'False',
34   'skip_install'        => 'True'
35 }
36
37 box = {
38   :virtualbox => 'ubuntu/trusty64',
39   :libvirt => 'elastic/ubuntu-14.04-x86_64',
40   :openstack => nil
41 }
42
43 nodes = [
44     {
45     :name   => "aai",
46     :ips    => ['10.252.0.6', "192.168.50.6"],
47     :macs   => [],
48     :cpus   => 2,
49     :cpu    => "50",
50     :ram    => 8 * 1024,
51     :groups => ["individual"],
52     :args   => ["aai"],
53     :fwds   => [
54       { :guest => 8446, :host => 8446, :guest_ip => '192.168.50.6' },
55       { :guest => 9446, :host => 9446, :guest_ip => '192.168.50.6' },
56     ]
57   },
58   {
59     :name   => "all-in-one",
60     :ips    => ['10.252.1.3', "192.168.51.3"],
61     :macs   => [],
62     :cpus   => 2,
63     :cpu    => "50",
64     :ram    => 12 * 1024,
65     :groups => ["all-in-one"],
66     :flavor => 'm1.xlarge',
67     :args   => ['mr', 'sdc', 'aai', 'mso', 'robot', 'vid', 'sdnc', 'portal', 'dcae', 'policy', 'appc', 'vfc', 'ccsdk', 'multicloud', 'vnfsdk', 'vpp', 'msb'],
68   },
69   {
70     :name   => "appc",
71     :ips    => ['10.252.0.14', "192.168.50.14"],
72     :macs   => [],
73     :cpus   => 2,
74     :cpu    => "50",
75     :ram    => 4 * 1024,
76     :groups => ["individual"],
77     :args   => ["appc"],
78   },
79   {
80     :name   => "ccsdk",
81     :ips    => ['10.252.0.19', "192.168.50.19"],
82     :macs   => [],
83     :cpus   => 2,
84     :cpu    => "50",
85     :ram    => 4 * 1024,
86     :groups => ["individual"],
87     :args   => ["ccsdk"],
88   },
89   {
90     :name   => "dcae",
91     :ips    => ['10.252.0.12', "192.168.50.12"],
92     :macs   => [],
93     :cpus   => 2,
94     :cpu    => "50",
95     :ram    => 4 * 1024,
96     :groups => ["individual"],
97     :args   => ["dcae"],
98   },
99   {
100     :name   => "dns",
101     :ips    => ['10.252.0.3', "192.168.50.3"],
102     :macs   => [],
103     :cpus   => 2,
104     :cpu    => "50",
105     :ram    => 1 * 1024,
106     :groups => ["individual"],
107     :flavor => 'm1.small',
108     :args   => [" "]
109   },
110   {
111     :name   => "message-router",
112     :ips    => ['10.252.0.4', "192.168.50.4"],
113     :macs   => [],
114     :cpus   => 2,
115     :cpu    => "50",
116     :ram    => 4 * 1024,
117     :groups => ["individual"],
118     :args   => ["mr"],
119   },
120   {
121     :name   => "mso",
122     :ips    => ['10.252.0.20', "192.168.50.20"],
123     :macs   => [],
124     :cpus   => 2,
125     :cpu    => "50",
126     :ram    => 4 * 1024,
127     :groups => ["individual"],
128     :args   => ["mso"],
129   },
130   {
131     :name   => "msb",
132     :ips    => ['10.252.0.7', "192.168.50.7"],
133     :macs   => [],
134     :cpus   => 2,
135     :cpu    => "50",
136     :ram    => 4 * 1024,
137     :groups => ["individual"],
138     :args   => ["msb"],
139   },
140   {
141     :name   => "multicloud",
142     :ips    => ['10.252.0.16', "192.168.50.16"],
143     :macs   => [],
144     :cpus   => 2,
145     :cpu    => "50",
146     :ram    => 4 * 1024,
147     :groups => ["individual"],
148     :args   => ["multicloud"],
149     :fwds   => [
150       { :guest => 9003, :host => 9003, :guest_ip => '192.168.50.16' },
151     ]
152   },
153   {
154     :name   => "oom",
155     :ips    => ['10.252.0.21', "192.168.50.21"],
156     :macs   => [],
157     :cpus   => 16,
158     :cpu    => "50",
159     :ram    => 64 * 1024,
160     :groups => ["individual"],
161     :args   => ["oom"],
162     :hd     => { :virtualbox => "61440", :libvirt => "60G", },
163     :fwds   => [
164       { :guest => 8880, :host => 8880, :guest_ip => '192.168.50.21' },
165       { :guest => 8989, :host => 8989, :guest_ip => '192.168.50.21' },
166     ]
167   },
168   {
169     :name   => "policy",
170     :ips    => ['10.252.0.13', "192.168.50.13"],
171     :macs   => [],
172     :cpus   => 2,
173     :cpu    => "50",
174     :ram    => 4 * 1024,
175     :groups => ["individual"],
176     :args   => ["policy"],
177   },
178   {
179     :name   => "portal",
180     :ips    => ['10.252.0.11', "192.168.50.11"],
181     :macs   => [],
182     :cpus   => 2,
183     :cpu    => "50",
184     :ram    => 4 * 1024,
185     :groups => ["individual"],
186     :args   => ["portal"],
187   },
188   {
189     :name   => "robot",
190     :ips    => ['10.252.0.8', "192.168.50.8"],
191     :macs   => [],
192     :cpus   => 2,
193     :cpu    => "50",
194     :ram    => 4 * 1024,
195     :groups => ["individual"],
196     :args   => ["robot"],
197   },
198   {
199     :name   => "sdc",
200     :ips    => ['10.252.0.5', "192.168.50.5"],
201     :macs   => [],
202     :cpus   => 2,
203     :cpu    => "50",
204     :ram    => 6 * 1024,
205     :groups => ["individual"],
206     :args   => ["sdc"],
207     :hd     => { :virtualbox => "20480", :libvirt => "20G", },
208     :fwds   => [
209       { :guest => 8285, :host => 8285, :guest_ip => '192.168.50.5' },
210     ]
211   },
212   {
213     :name   => "sdnc",
214     :ips    => ['10.252.0.10', "192.168.50.10"],
215     :macs   => [],
216     :cpus   => 2,
217     :cpu    => "50",
218     :ram    => 4 * 1024,
219     :groups => ["individual"],
220     :args   => ["sdnc"],
221   },
222   {
223     :name   => "testing",
224     :ips    => ['10.252.2.3', "192.168.52.3"],
225     :macs   => [],
226     :cpus   => 2,
227     :cpu    => "50",
228     :ram    => 4 * 1024,
229     :groups => ["testing"],
230     :flavor => 'm1.small',
231     :args   => [""],
232   },
233   {
234     :name   => "vfc",
235     :ips    => ['10.252.0.15', "192.168.50.15"],
236     :macs   => [],
237     :cpus   => 2,
238     :cpu    => "50",
239     :ram    => 4 * 1024,
240     :groups => ["individual"],
241     :args   => ['vfc'],
242   },
243   {
244     :name   => "vid",
245     :ips    => ['10.252.0.9', "192.168.50.9"],
246     :macs   => [],
247     :cpus   => 2,
248     :cpu    => "50",
249     :ram    => 4 * 1024,
250     :groups => ["individual"],
251     :args   => ['vid'],
252   },
253   {
254     :name   => "vnfsdk",
255     :ips    => ['10.252.0.18', "192.168.50.18"],
256     :macs   => [],
257     :cpus   => 2,
258     :cpu    => "50",
259     :ram    => 4 * 1024,
260     :groups => ["individual"],
261     :args   => ['vnfsdk'],
262   },
263   {
264     :name   => "vvp",
265     :ips    => ['10.252.0.17', "192.168.50.17"],
266     :macs   => [],
267     :cpus   => 2,
268     :cpu    => "50",
269     :ram    => 4 * 1024,
270     :groups => ["individual"],
271     :args   => ['vvp'],
272   },
273   {
274     :name   => "openstack",
275     :ips    => ['10.252.3.3', "192.168.53.3"],
276     :macs   => [],
277     :cpus   => 2,
278     :cpu    => "50",
279     :ram    => 8 * 1024,
280     :groups => ["individual"],
281     :args   => ['openstack'],
282     :fwds   => [
283       { :guest => 80, :host => 8888, :guest_ip => '192.168.53.4' },
284       { :guest => 6080, :host => 6080, :guest_ip => '192.168.53.4' },
285     ]
286   }
287 ]
288
289 run_path   = 'vagrant_utils/postinstall.sh'
290 sdc_volume = 'vol1-sdc-data.vdi'
291
292 Vagrant.require_version ">= 1.8.6"
293
294 # Determine the provider used
295 provider = (ENV['VAGRANT_DEFAULT_PROVIDER'] || :virtualbox).to_sym
296 puts "[INFO] Provider: #{provider} "
297
298 vd_conf = ENV.fetch('VD_CONF', 'etc/settings.yaml')
299 if File.exist?(vd_conf)
300   require 'yaml'
301   user_conf = YAML.load_file(vd_conf)
302   configuration.update(user_conf)
303 end
304
305 # Set network interface
306 net_interface = 'vboxnet0'
307 is_windows = Gem.win_platform?
308 if is_windows
309     net_interface = 'VirtualBox Host-Only Ethernet Adapter #2'
310 end
311 puts "[INFO] Net interface: #{net_interface}"
312
313
314 # If argument is given use it. Otherwise use Env: DEPLOY_MODE else use default
315 requested_machine = ARGV[1]
316
317 deploy_mode = ENV.fetch('DEPLOY_MODE', 'individual')
318 if requested_machine != nil
319     if requested_machine.include?("all-in-one") || requested_machine.include?("testing")
320         deploy_mode = requested_machine
321     end
322 end
323
324 # Catch the status of all machines
325 if ARGV[0] == 'status' || ARGV[0] == 'destroy'
326     deploy_mode = 'NA'
327 end
328
329 puts "[INFO] Deploy Mode:  #{deploy_mode}"
330
331 # In case of all-in-one or testing clean the nodes list
332 case deploy_mode
333     when 'all-in-one'
334         nodes.select! do |node|
335             if node[:name].include?("all-in-one")
336               true if node[:name]
337             end
338         end
339
340     when 'individual'
341         nodes.select! do |node|
342             if node[:groups][0].include?("individual")
343               true if node[:name]
344             end
345         end
346
347     when 'testing'
348         nodes.select! do |node|
349             if node[:name].include?("testing")
350               true if node[:name]
351             end
352         end
353 end
354
355 Vagrant.configure("2") do |config|
356
357     # PROXY definitions
358     if ENV['http_proxy'] != nil and ENV['https_proxy'] != nil
359       if not Vagrant.has_plugin?('vagrant-proxyconf')
360         system 'vagrant plugin install vagrant-proxyconf'
361         raise 'vagrant-proxyconf was installed but it requires to execute again'
362       end
363       config.proxy.enabled = { docker: false }
364       config.proxy.http     = ENV['http_proxy']
365       config.proxy.https    = ENV['https_proxy']
366       configuration['socks_proxy'] = ENV['socks_proxy']
367     end
368
369     if Vagrant.has_plugin?('vagrant-vbguest')
370       puts 'vagrant-vbguest auto_update feature will be disable to avoid sharing conflicts'
371       config.vbguest.auto_update = false
372     end
373
374     sync_type = "virtualbox"
375     if provider == :libvirt
376       if not Vagrant.has_plugin?('vagrant-libvirt')
377         system 'vagrant plugin install vagrant-libvirt'
378         raise 'vagrant-libvirt was installed but it requires to execute again'
379       end
380       sync_type = "nfs"
381     end
382
383     if provider == :openstack
384       config.ssh.username = 'ubuntu'
385       if not Vagrant.has_plugin?('vagrant-openstack-provider')
386         system 'vagrant plugin install vagrant-openstack-provider'
387         raise 'vagrant-openstack-provider was installed but it requires to execute again'
388       end
389     end
390
391     nodes.each do |node|
392       config.vm.define node[:name] do |nodeconfig|
393
394       # NO_PROXY definitions
395       if ENV['no_proxy'] != nil
396         if not Vagrant.has_plugin?('vagrant-proxyconf')
397           system 'vagrant plugin install vagrant-proxyconf'
398           raise 'vagrant-proxyconf was installed but it requires to execute again'
399         end
400         config.proxy.no_proxy = node[:ips].join(",") + "," + ENV['no_proxy']
401       end
402
403         # Common Settings:
404
405         nodeconfig.vm.provider "virtualbox" do |vbox|
406           vbox.customize ['modifyvm', :id, '--nictype1', 'virtio']
407           vbox.customize ['modifyvm', :id, '--audio', 'none']
408           vbox.customize ['modifyvm', :id, '--vram', '1']
409           vbox.customize ['modifyvm', :id, "--cpuhotplug", "off"]
410           vbox.customize ['modifyvm', :id, "--cpuexecutioncap", node[:cpu]]
411           vbox.customize ['modifyvm', :id, "--cpus", node[:cpus]]
412           vbox.customize ["modifyvm", :id, "--memory", node[:ram]]
413
414           # Set Network
415           nodeconfig.vm.network :private_network,
416             :adapter => 2,
417             :name => net_interface,
418             :ip  => node[:ips][0]
419
420           nodeconfig.vm.network :private_network,
421             :adapter => 3,
422             :ip  => node[:ips][1],
423             :type => :static
424
425           # Set Storage
426           if node.has_key? :hd
427             volume_file = node[:name] + '-vol1-data.vdi'
428             unless File.exist?(volume_file)
429               vbox.customize ['createmedium', 'disk', '--filename', volume_file, '--size', node[:hd][provider]]
430             end
431             vbox.customize ['storageattach', :id, '--storagectl', 'SATAController', '--port', 1, '--device', 0, '--type', 'hdd', '--medium', volume_file]
432           end
433         end
434
435         nodeconfig.vm.provider "libvirt" do |lbox|
436           lbox.memory = node[:ram]
437           lbox.nested = true
438           lbox.cpu_mode = 'host-passthrough'
439           lbox.cpus = node[:cpus]
440
441           # Set Network
442           nodeconfig.vm.network :private_network,
443             :ip  => node[:ips][0]
444
445           nodeconfig.vm.network :private_network,
446             :ip  => node[:ips][1],
447             :type => :static
448
449           # Set Storage
450           if node.has_key? :hd
451             lbox.storage :file, bus: 'sata', device: 'sda', size: node[:hd][provider]
452           end
453         end
454         if node.has_key? :fwds
455           node[:fwds].each do |fwd|
456             nodeconfig.vm.network :forwarded_port,
457               :guest => fwd[:guest],
458               :guest_ip => fwd[:guest_ip],
459               :host => fwd[:host],
460               :host_ip => "0.0.0.0"
461           end
462         end
463
464         nodeconfig.vm.provider :openstack do |obox|
465           obox.openstack_auth_url               = ENV.fetch('OS_AUTH_URL', '')
466           obox.tenant_name                      = ENV.fetch('OS_TENANT_NAME', '')
467           obox.username                         = ENV.fetch('OS_USERNAME', '')
468           obox.password                         = ENV.fetch('OS_PASSWORD', '')
469           obox.region                           = ENV.fetch('OS_REGION_NAME', '')
470           obox.identity_api_version             = ENV.fetch('OS_IDENTITY_API_VERSION', '')
471           obox.domain_name                      = ENV.fetch('OS_PROJECT_DOMAIN_ID', '')
472           obox.project_name                     = ENV.fetch('OS_PROJECT_NAME', '')
473           obox.floating_ip_pool                 = ENV.fetch('OS_FLOATING_IP_POOL', '')
474           obox.floating_ip_pool_always_allocate = (ENV['OS_FLOATING_IP_ALWAYS_ALLOCATE'] == 'true')
475           obox.image                            = ENV.fetch('OS_IMAGE', '')
476           obox.security_groups                  = [ENV.fetch('OS_SEC_GROUP', '')]
477           obox.networks                         = ENV.fetch('OS_NETWORK', '')
478           obox.flavor                           = node[:flavor]
479           obox.server_name                      = node[:name]
480         end
481
482         # Set Box type
483         if "openstack" == node[:name]
484           box = {
485             :virtualbox => 'ubuntu/xenial64',
486             :libvirt => 'elastic/ubuntu-16.04-x86_64'
487           }
488         end
489         nodeconfig.vm.box = box[provider]
490
491         # Set Node name
492         nodeconfig.vm.hostname = node[:name]
493
494         # Set Sync Folder
495         nodeconfig.vm.synced_folder ".", "/vagrant", disabled: true
496         nodeconfig.vm.synced_folder './opt', '/opt/onap/', create: true, type: sync_type
497         nodeconfig.vm.synced_folder './lib', '/var/onap/', create: true, type: sync_type
498         if !is_windows
499           nodeconfig.vm.synced_folder '~/.m2', '/root/.m2/', create: true
500         end
501
502         # Specific settings:
503
504         if node[:name].include? "testing"
505             nodeconfig.vm.synced_folder './tests', '/var/onap_tests/', create: true
506             test_suite = ENV.fetch('TEST_SUITE', '*')
507             test_case = ENV.fetch('TEST_CASE', '*')
508             # Override variables
509             run_path = 'vagrant_utils/unit_testing.sh'
510             node[:args] = [test_suite, test_case]
511         else
512             configuration['skip_get_images'] = ENV.fetch('SKIP_GET_IMAGES', configuration['skip_get_images'])
513             configuration['skip_install'] = ENV.fetch('SKIP_INSTALL', configuration['skip_install'])
514         end
515
516         if node[:name].include? "vfc"
517           nodeconfig.vm.provision 'docker'
518         end
519
520         nodeconfig.vm.provision 'shell' do |s|
521           s.path = run_path
522           s.args = node[:args]
523           s.env  = configuration
524         end
525
526       end #nodeconfig
527     end #node
528 end #config