2 # -*- coding: utf-8 -*-
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"
15 vm_memory_os = 8 * 1024
17 vm_box = "generic/ubuntu1804"
23 ip_os: '172.24.4.254',
38 all = [] << operation << devstack
40 operation_post_msg = "Run: \"vagrant provision #{operation[:name]} --provision-with=run_playbook_create\" to complete infrastructure deployment"
42 $enable_ipv6 = <<-SCRIPT
43 sed -i'' 's/net.ipv6.conf.all.disable_ipv6.*$/net.ipv6.conf.all.disable_ipv6 = 0/' /etc/sysctl.conf
47 $setup_devstack = <<-SCRIPT
49 git clone https://opendev.org/openstack/devstack
56 export DEBIAN_FRONTEND=noninteractive
57 sudo -E apt-get update
58 sudo -E apt-get install -yq python3-distutils
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}
66 $link_file = <<-SCRIPT
69 echo "Symlinking ${src} to ${dst}"
73 $run_playbook = <<-SCRIPT
75 export OS_CLOUD=openstack
76 cd #{synced_folder_ansible}
77 ansible-playbook "$PLAYBOOK"
80 Vagrant.configure("2") do |config|
82 config.vm.define machine[:name] do |config|
83 config.vm.box = vm_box
84 config.vm.hostname = machine[:hostname]
86 config.vm.provider :virtualbox do |v|
87 v.name = machine[:name]
88 v.memory = machine[:memory]
89 v.cpus = machine[:cpus]
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
98 config.vm.network :private_network, ip: machine[:ip]
99 config.vm.network :private_network, ip: machine[:ip_os]
101 if machine[:name] == 'devstack'
102 config.vm.network "forwarded_port", guest: 80, host: 8080
104 config.vm.synced_folder ".", synced_folder_main, type: "rsync", rsync__exclude: "Vagrantfile"
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
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"
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|
117 s.inline = $link_file
118 s.args = [os_clouds, os_clouds_dir]
121 config.vm.post_up_message = operation_post_msg
122 config.vm.provision "run_playbook_create", type: :shell, run: "never" do |s|
124 s.inline = $run_playbook
125 s.args = "create.yml"
127 config.vm.provision "run_playbook_destroy", type: :shell, run: "never" do |s|
129 s.inline = $run_playbook
130 s.args = "destroy.yml"