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