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_template = "#{synced_folder_config}/clouds.yaml"
10 os_clouds_dir = "${HOME}/.config/openstack"
11 os_clouds_config = "#{os_clouds_dir}/clouds.yaml"
14 image_url = "https://cloud-images.ubuntu.com/bionic/current/bionic-server-cloudimg-amd64.img"
15 image_name = "Ubuntu_18.04"
20 vm_memory_os = 8 * 1024
22 vm_box = "generic/ubuntu1804"
28 ip_os: '172.24.4.254',
43 all = [] << operation << devstack
45 operation_post_msg = "Run: \"vagrant provision #{operation[:name]} --provision-with=add_os_image,run_playbook_create\" to complete infrastructure deployment"
47 $enable_ipv6 = <<-SCRIPT
48 sed -i'' 's/net.ipv6.conf.all.disable_ipv6.*$/net.ipv6.conf.all.disable_ipv6 = 0/' /etc/sysctl.conf
52 $setup_devstack = <<-SCRIPT
54 git clone https://opendev.org/openstack/devstack
61 export DEBIAN_FRONTEND=noninteractive
63 apt-get install -yq python3-distutils
65 curl -fsSL https://bootstrap.pypa.io/get-pip.py -o get-pip.py
69 $setup_openstackclient = <<-SCRIPT
70 pip install --ignore-installed python-openstackclient
71 mkdir -p #{os_clouds_dir}
74 $setup_openstacksdk = <<-SCRIPT
75 pip install ansible openstacksdk
76 mkdir -p #{os_clouds_dir}
79 $create_os_clouds = <<-SCRIPT
83 OS_USERNAME="$user" envsubst < "$template" > "$config"
86 $add_os_image = <<-SCRIPT
89 image="/root/${name}.img"
90 wget --quiet --continue --output-document="$image" "$url"
91 export OS_CLOUD=openstack
92 openstack image create "$name" --public --disk-format qcow2 --container-format bare --file "$image"
95 $run_playbook = <<-SCRIPT
97 export OS_CLOUD=openstack
98 cd #{synced_folder_ansible}
99 ansible-playbook "$PLAYBOOK"
102 Vagrant.configure("2") do |config|
103 all.each do |machine|
104 config.vm.define machine[:name] do |config|
105 config.vm.box = vm_box
106 config.vm.hostname = machine[:hostname]
108 config.vm.provider :virtualbox do |v|
109 v.name = machine[:name]
110 v.memory = machine[:memory]
111 v.cpus = machine[:cpus]
114 config.vm.provider :libvirt do |v|
115 v.memory = machine[:memory]
116 v.cpus = machine[:cpus]
117 v.machine_virtual_size = machine[:disk] # set at VM creation
120 config.vm.network :private_network, ip: machine[:ip]
121 config.vm.network :private_network, ip: machine[:ip_os]
123 if machine[:name] == 'devstack'
124 config.vm.network "forwarded_port", guest: 80, host: 8080
126 config.vm.synced_folder ".", synced_folder_main, type: "rsync", rsync__exclude: "Vagrantfile"
128 config.vm.provision "enable_ipv6", type: :shell, run: "always", inline: $enable_ipv6
129 config.vm.provision "setup_devstack", type: :shell, privileged: false, inline: $setup_devstack, args: os_config
132 if machine[:name] == 'operator'
133 config.vm.synced_folder ".", synced_folder_main, type: "rsync", rsync__exclude: "Vagrantfile"
134 config.vm.synced_folder host_folder_ansible, synced_folder_ansible, type: "rsync"
136 config.vm.provision "setup_py", type: :shell, inline: $setup_py
137 config.vm.provision "setup_openstackclient", type: :shell, inline: $setup_openstackclient
138 config.vm.provision "create_os_clouds_admin", type: :shell, run: "always" do |s|
139 s.inline = $create_os_clouds
140 s.args = [os_admin, os_clouds_template, os_clouds_config]
142 config.vm.provision "setup_openstacksdk", type: :shell, privileged: false, inline: $setup_openstacksdk
143 config.vm.provision "create_os_clouds", type: :shell, run: "always" do |s|
145 s.inline = $create_os_clouds
146 s.args = [os_user, os_clouds_template, os_clouds_config]
149 config.vm.post_up_message = operation_post_msg
150 config.vm.provision "add_os_image", type: :shell, run: "never" do |s|
151 s.inline = $add_os_image
152 s.args = [image_url, image_name]
154 config.vm.provision "run_playbook_create", type: :shell, run: "never" do |s|
156 s.inline = $run_playbook
157 s.args = "create.yml"
159 config.vm.provision "run_playbook_destroy", type: :shell, run: "never" do |s|
161 s.inline = $run_playbook
162 s.args = "destroy.yml"