f797675aee0fb2f669639ffd856e5c8a0e443424
[integration.git] / deployment / noheat / infra-openstack / vagrant / Vagrantfile
1 # -*- mode: ruby -*-
2 # -*- coding: utf-8 -*-
3
4 synced_folder_main = "/vagrant"
5 synced_folder_config = "#{synced_folder_main}/config"
6 os_config = "#{synced_folder_config}/local.conf"
7 os_clouds = "#{synced_folder_config}/clouds.yaml"
8 os_clouds_dir = "${HOME}/.config/openstack"
9
10 vm_cpu = 1
11 vm_cpus = 4
12 vm_memory = 1 * 1024
13 vm_memory_os = 8 * 1024
14 vm_disk = 32
15 vm_box = "generic/ubuntu1804"
16
17 operation = {
18   name: 'operator',
19   hostname: 'operator',
20   ip: '172.17.5.254',
21   cpus: vm_cpu,
22   memory: vm_memory,
23   disk: vm_disk
24 }
25 devstack = {
26   name: 'devstack',
27   hostname: 'devstack',
28   ip: '172.17.5.200',
29   cpus: vm_cpus,
30   memory: vm_memory_os,
31   disk: vm_disk
32 }
33
34 all = [] << operation << devstack
35
36 $enable_ipv6 = <<-SCRIPT
37   sed -i'' 's/net.ipv6.conf.all.disable_ipv6.*$/net.ipv6.conf.all.disable_ipv6 = 0/' /etc/sysctl.conf
38   sysctl -p
39 SCRIPT
40
41 $setup_devstack = <<-SCRIPT
42   CONFIG="$1"
43   git clone https://opendev.org/openstack/devstack
44   cd devstack
45   cp "$CONFIG" .
46   ./stack.sh
47 SCRIPT
48
49 $setup_py = <<-SCRIPT
50   export DEBIAN_FRONTEND=noninteractive
51   sudo -E apt-get update
52   sudo -E apt-get install -yq python3-distutils
53
54   curl -fsSL https://bootstrap.pypa.io/get-pip.py -o get-pip.py
55   sudo -H python3 get-pip.py
56   pip install python-openstackclient
57   mkdir -p #{os_clouds_dir}
58 SCRIPT
59
60 $link_file = <<-SCRIPT
61   src="$1"
62   dst="$2"
63   echo "Symlinking ${src} to ${dst}"
64   ln -sf "$src" "$dst"
65 SCRIPT
66
67 Vagrant.configure("2") do |config|
68   all.each do |machine|
69     config.vm.define machine[:name] do |config|
70       config.vm.box = vm_box
71       config.vm.hostname = machine[:hostname]
72
73       config.vm.provider :virtualbox do |v|
74         v.name = machine[:name]
75         v.memory = machine[:memory]
76         v.cpus = machine[:cpus]
77       end
78
79       config.vm.provider :libvirt do |v|
80         v.memory = machine[:memory]
81         v.cpus = machine[:cpus]
82         v.machine_virtual_size = machine[:disk] # set at VM creation
83       end
84
85       config.vm.network :private_network, ip: machine[:ip]
86
87       if machine[:name] == 'devstack'
88         config.vm.network "forwarded_port", guest: 80, host: 8080
89
90         config.vm.synced_folder ".", synced_folder_main, type: "rsync", rsync__exclude: "Vagrantfile"
91
92         config.vm.provision "enable_ipv6", type: :shell, run: "always", inline: $enable_ipv6
93         config.vm.provision "setup_devstack", type: :shell, privileged: false, inline: $setup_devstack, args: os_config
94       end
95
96       if machine[:name] == 'operator'
97         config.vm.synced_folder ".", synced_folder_main, type: "rsync", rsync__exclude: "Vagrantfile"
98
99         config.vm.provision "setup_openstacksdk", type: :shell, privileged: false, inline: $setup_py
100         config.vm.provision "link_os_clouds", type: :shell, run: "always" do |s|
101           s.privileged = false
102           s.inline = $link_file
103           s.args = [os_clouds, os_clouds_dir]
104         end
105       end
106     end
107   end
108 end