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