From 3d9bd5abfcb9bf55e3dd1b53cb3b6bc4bd45c0d1 Mon Sep 17 00:00:00 2001 From: Pawel Wieczorek Date: Fri, 29 May 2020 18:12:38 +0200 Subject: [PATCH] Add Vagrant-based development environment Development guide ("HACKING") is subject to change based on gathered feedback. Issue-ID: INT-1601 Change-Id: I8988c8a6e85d215485666690e0c281412a1ce869 Signed-off-by: Pawel Wieczorek --- deployment/noheat/infra-openstack/HACKING | 29 ++++++ deployment/noheat/infra-openstack/HACKING.rst | 1 + .../noheat/infra-openstack/vagrant/Vagrantfile | 108 +++++++++++++++++++++ .../infra-openstack/vagrant/config/clouds.yaml | 11 +++ .../infra-openstack/vagrant/config/local.conf | 5 + 5 files changed, 154 insertions(+) create mode 100644 deployment/noheat/infra-openstack/HACKING create mode 120000 deployment/noheat/infra-openstack/HACKING.rst create mode 100644 deployment/noheat/infra-openstack/vagrant/Vagrantfile create mode 100644 deployment/noheat/infra-openstack/vagrant/config/clouds.yaml create mode 100644 deployment/noheat/infra-openstack/vagrant/config/local.conf diff --git a/deployment/noheat/infra-openstack/HACKING b/deployment/noheat/infra-openstack/HACKING new file mode 100644 index 000000000..d0c1edcc1 --- /dev/null +++ b/deployment/noheat/infra-openstack/HACKING @@ -0,0 +1,29 @@ +========================= + Development environment +========================= + +This environment focuses on interactions with OpenStack (here: DevStack) instance. Changes can be +made from host machine but additional guest ("operator") is provided for developers' convenience. + +Environment on "operator" machine is already set up and can be accessed by: + +.. code-block:: shell + + $ vagrant ssh operator + +Provided ``clouds.yaml`` file differs slightly from the one that can be obtained with following +steps: + +#. Open OpenStack dashboard (http://localhost:8080 forwarded from "devstack" machine) +#. Navigate to ``Project``, then ``API Access`` on the left panel +#. Select ``Download OpenStack RC File``, then ``OpenStack clouds.yaml File`` on the right side + +Summary of changes: + +- Added password from ``local.conf`` file (used in DevStack instance setup) +- Removed ``project_id`` which might change on a new DevStack instance +- Replaced ``auth_url`` based on machine's dynamic IP with the static private address + +Installed Python package ``python-openstackclient`` includes key package ``openstacksdk`` as +a dependency and provides additional CLI tools. Tool ``pip`` for Python 3 was used for installing +these packages. diff --git a/deployment/noheat/infra-openstack/HACKING.rst b/deployment/noheat/infra-openstack/HACKING.rst new file mode 120000 index 000000000..3f7568eb2 --- /dev/null +++ b/deployment/noheat/infra-openstack/HACKING.rst @@ -0,0 +1 @@ +HACKING \ No newline at end of file diff --git a/deployment/noheat/infra-openstack/vagrant/Vagrantfile b/deployment/noheat/infra-openstack/vagrant/Vagrantfile new file mode 100644 index 000000000..f797675ae --- /dev/null +++ b/deployment/noheat/infra-openstack/vagrant/Vagrantfile @@ -0,0 +1,108 @@ +# -*- mode: ruby -*- +# -*- coding: utf-8 -*- + +synced_folder_main = "/vagrant" +synced_folder_config = "#{synced_folder_main}/config" +os_config = "#{synced_folder_config}/local.conf" +os_clouds = "#{synced_folder_config}/clouds.yaml" +os_clouds_dir = "${HOME}/.config/openstack" + +vm_cpu = 1 +vm_cpus = 4 +vm_memory = 1 * 1024 +vm_memory_os = 8 * 1024 +vm_disk = 32 +vm_box = "generic/ubuntu1804" + +operation = { + name: 'operator', + hostname: 'operator', + ip: '172.17.5.254', + cpus: vm_cpu, + memory: vm_memory, + disk: vm_disk +} +devstack = { + name: 'devstack', + hostname: 'devstack', + ip: '172.17.5.200', + cpus: vm_cpus, + memory: vm_memory_os, + disk: vm_disk +} + +all = [] << operation << devstack + +$enable_ipv6 = <<-SCRIPT + sed -i'' 's/net.ipv6.conf.all.disable_ipv6.*$/net.ipv6.conf.all.disable_ipv6 = 0/' /etc/sysctl.conf + sysctl -p +SCRIPT + +$setup_devstack = <<-SCRIPT + CONFIG="$1" + git clone https://opendev.org/openstack/devstack + cd devstack + cp "$CONFIG" . + ./stack.sh +SCRIPT + +$setup_py = <<-SCRIPT + export DEBIAN_FRONTEND=noninteractive + sudo -E apt-get update + sudo -E apt-get install -yq python3-distutils + + curl -fsSL https://bootstrap.pypa.io/get-pip.py -o get-pip.py + sudo -H python3 get-pip.py + pip install python-openstackclient + mkdir -p #{os_clouds_dir} +SCRIPT + +$link_file = <<-SCRIPT + src="$1" + dst="$2" + echo "Symlinking ${src} to ${dst}" + ln -sf "$src" "$dst" +SCRIPT + +Vagrant.configure("2") do |config| + all.each do |machine| + config.vm.define machine[:name] do |config| + config.vm.box = vm_box + config.vm.hostname = machine[:hostname] + + config.vm.provider :virtualbox do |v| + v.name = machine[:name] + v.memory = machine[:memory] + v.cpus = machine[:cpus] + end + + config.vm.provider :libvirt do |v| + v.memory = machine[:memory] + v.cpus = machine[:cpus] + v.machine_virtual_size = machine[:disk] # set at VM creation + end + + config.vm.network :private_network, ip: machine[:ip] + + if machine[:name] == 'devstack' + config.vm.network "forwarded_port", guest: 80, host: 8080 + + config.vm.synced_folder ".", synced_folder_main, type: "rsync", rsync__exclude: "Vagrantfile" + + config.vm.provision "enable_ipv6", type: :shell, run: "always", inline: $enable_ipv6 + config.vm.provision "setup_devstack", type: :shell, privileged: false, inline: $setup_devstack, args: os_config + end + + if machine[:name] == 'operator' + config.vm.synced_folder ".", synced_folder_main, type: "rsync", rsync__exclude: "Vagrantfile" + + config.vm.provision "setup_openstacksdk", type: :shell, privileged: false, inline: $setup_py + config.vm.provision "link_os_clouds", type: :shell, run: "always" do |s| + s.privileged = false + s.inline = $link_file + s.args = [os_clouds, os_clouds_dir] + end + end + end + end +end diff --git a/deployment/noheat/infra-openstack/vagrant/config/clouds.yaml b/deployment/noheat/infra-openstack/vagrant/config/clouds.yaml new file mode 100644 index 000000000..6dab24a35 --- /dev/null +++ b/deployment/noheat/infra-openstack/vagrant/config/clouds.yaml @@ -0,0 +1,11 @@ +clouds: + openstack: + auth: + auth_url: http://172.17.5.200/identity + username: "demo" + password: "default123456!" + project_name: "demo" + user_domain_name: "Default" + region_name: "RegionOne" + interface: "public" + identity_api_version: 3 diff --git a/deployment/noheat/infra-openstack/vagrant/config/local.conf b/deployment/noheat/infra-openstack/vagrant/config/local.conf new file mode 100644 index 000000000..f8912868a --- /dev/null +++ b/deployment/noheat/infra-openstack/vagrant/config/local.conf @@ -0,0 +1,5 @@ +[[local|localrc]] +ADMIN_PASSWORD=default123456! +DATABASE_PASSWORD=$ADMIN_PASSWORD +RABBIT_PASSWORD=$ADMIN_PASSWORD +SERVICE_PASSWORD=$ADMIN_PASSWORD -- 2.16.6