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