From 8fe43171ce44631988844e2d63b2474a4938c437 Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Tue, 30 May 2017 11:47:15 +0100 Subject: [PATCH] Fix vagrant development environment After the repo split into kolla and kolla-ansible the Vagrant development environment was broken. With this change Vagrant will run from kolla-ansible and kolla repo is expected to be in the same directory level so the bootstrap can include it inside the VM. - Modified the bootstrap code to copy both repos into the VM. - Added one configuration token to specify kolla-ansible location inside the VM. - Updated the docs. Change-Id: I6b56822d50472f8eda6fc60f69196d3c9b8b6cf8 Closes-Bug: 1693847 --- contrib/dev/vagrant/Vagrantfile | 28 +++++++++++++++---- .../dev/vagrant/Vagrantfile.custom.example | 9 ++++-- contrib/dev/vagrant/bootstrap.sh | 7 +++-- doc/vagrant-dev-env.rst | 8 ++++-- 4 files changed, 39 insertions(+), 13 deletions(-) diff --git a/contrib/dev/vagrant/Vagrantfile b/contrib/dev/vagrant/Vagrantfile index a667aa086c..3088e21267 100644 --- a/contrib/dev/vagrant/Vagrantfile +++ b/contrib/dev/vagrant/Vagrantfile @@ -15,6 +15,11 @@ end vagrant_dir = File.expand_path(File.dirname(__FILE__)) +# get kolla and kolla-ansibe repos path relative to current directory +# they will be used by the bootstrap script to configure the nodes +kolla_ansible_repo_path = File.expand_path(File.join(vagrant_dir, '..', '..', '..')) +kolla_repo_path = File.expand_path(File.join(vagrant_dir, '..', '..', '..', '..', 'kolla')) + # Vagrantfile.custom contains user customization for the Vagrantfile # You shouldn't have to edit the Vagrantfile, ever. if File.exists?(File.join(vagrant_dir, 'Vagrantfile.custom')) @@ -42,7 +47,8 @@ PROVIDER_DEFAULTS ||= { bridge_interface: "virbr0", vagrant_shared_folder: "/home/vagrant/sync", sync_method: "nfs", - kolla_path: "/home/vagrant/kolla" + kolla_path: "/home/vagrant/kolla", + kolla_ansible_path: "/home/vagrant/kolla-ansible" } }, virtualbox: { @@ -51,14 +57,16 @@ PROVIDER_DEFAULTS ||= { bridge_interface: "wlp3s0b1", vagrant_shared_folder: "/home/vagrant/sync", sync_method: "virtualbox", - kolla_path: "/home/vagrant/kolla" + kolla_path: "/home/vagrant/kolla", + kolla_ansible_path: "/home/vagrant/kolla-ansible" }, ubuntu: { base_image: "ubuntu/wily64", bridge_interface: "wlp3s0b1", vagrant_shared_folder: "/home/vagrant/sync", sync_method: "virtualbox", - kolla_path: "/home/vagrant/kolla" + kolla_path: "/home/vagrant/kolla", + kolla_ansible_path: "/home/vagrant/kolla-ansible" } } } @@ -159,6 +167,13 @@ def configure_wifi_if_enabled(vm) end Vagrant.configure(2) do |config| + + # check for kolla repo to be available + unless File.directory?(kolla_repo_path) + raise VagrantConfigMissing, + "Missing kolla repository checkout at #{kolla_repo_path}" + end + config.vm.box = get_default(:base_image) # Next to the hostonly NAT-network there is a host-only network with all @@ -209,8 +224,9 @@ Vagrant.configure(2) do |config| # The operator controls the deployment config.vm.define "operator", primary: true do |admin| admin.vm.hostname = "operator.local" - admin.vm.provision :shell, path: PROVISION_SCRIPT, args: "operator #{MULTINODE ? 'multinode' : 'aio'} #{get_default(:kolla_path)}" - admin.vm.synced_folder File.join(vagrant_dir, '..', '..', '..'), get_default(:kolla_path), create:"True", type: get_default(:sync_method) + admin.vm.provision :shell, path: PROVISION_SCRIPT, args: "operator #{MULTINODE ? 'multinode' : 'aio'} #{get_default(:kolla_path)} #{get_default(:kolla_ansible_path)}" + admin.vm.synced_folder kolla_ansible_repo_path, get_default(:kolla_ansible_path), create:"True", type: get_default(:sync_method) + admin.vm.synced_folder kolla_repo_path, get_default(:kolla_path), create:"True", type: get_default(:sync_method) admin.vm.synced_folder File.join(vagrant_dir, 'storage', 'operator'), "/data/host", create:"True", type: get_default(:sync_method) admin.vm.synced_folder File.join(vagrant_dir, 'storage', 'shared'), "/data/shared", create:"True", type: get_default(:sync_method) admin.vm.synced_folder ".", get_default(:vagrant_shared_folder), disabled: true @@ -231,7 +247,7 @@ Vagrant.configure(2) do |config| hostname = "#{node_type}0#{i}" config.vm.define hostname do |node| node.vm.hostname = "#{hostname}.local" - node.vm.provision :shell, path: PROVISION_SCRIPT, args: "#{hostname} multinode #{get_default(:kolla_path)}" + node.vm.provision :shell, path: PROVISION_SCRIPT, args: "#{hostname} multinode #{get_default(:kolla_path)} #{get_default(:kolla_ansible_path)}" node.vm.synced_folder File.join(vagrant_dir, 'storage', node_type), "/data/host", create:"True", type: get_default(:sync_method) node.vm.synced_folder File.join(vagrant_dir, 'storage', 'shared'), "/data/shared", create:"True", type: get_default(:sync_method) node.vm.synced_folder ".", get_default(:vagrant_shared_folder), disabled: true diff --git a/contrib/dev/vagrant/Vagrantfile.custom.example b/contrib/dev/vagrant/Vagrantfile.custom.example index 09af72f5b4..aa4193d3fa 100644 --- a/contrib/dev/vagrant/Vagrantfile.custom.example +++ b/contrib/dev/vagrant/Vagrantfile.custom.example @@ -28,7 +28,8 @@ # bridge_interface: "virbr0", # vagrant_shared_folder: "/home/vagrant/sync", # sync_method: "nfs", -# kolla_path: "/home/vagrant/kolla" +# kolla_path: "/home/vagrant/kolla", +# kolla_ansible_path: "/home/vagrant/kolla-ansible" # } # }, # virtualbox: { @@ -37,14 +38,16 @@ # bridge_interface: "wlp3s0b1", # vagrant_shared_folder: "/home/vagrant/sync", # sync_method: "virtualbox", -# kolla_path: "/home/vagrant/kolla" +# kolla_path: "/home/vagrant/kolla", +# kolla_ansible_path: "/home/vagrant/kolla-ansible" # }, # ubuntu: { # base_image: "ubuntu/wily64", # bridge_interface: "wlp3s0b1", # vagrant_shared_folder: "/home/vagrant/sync", # sync_method: "virtualbox", -# kolla_path: "/home/vagrant/kolla" +# kolla_path: "/home/vagrant/kolla", +# kolla_ansible_path: "/home/vagrant/kolla-ansible" # } # } # } diff --git a/contrib/dev/vagrant/bootstrap.sh b/contrib/dev/vagrant/bootstrap.sh index 9bc1fb6275..0719e5b1ae 100644 --- a/contrib/dev/vagrant/bootstrap.sh +++ b/contrib/dev/vagrant/bootstrap.sh @@ -9,6 +9,7 @@ VM=$1 MODE=$2 KOLLA_PATH=$3 +KOLLA_ANSIBLE_PATH=$4 export http_proxy= export https_proxy= @@ -168,6 +169,7 @@ function configure_operator { pip install --upgrade "ansible>=2" python-openstackclient python-neutronclient tox + pip install ${KOLLA_ANSIBLE_PATH} pip install ${KOLLA_PATH} # Set selinux to permissive @@ -177,8 +179,9 @@ function configure_operator { fi tox -c ${KOLLA_PATH}/tox.ini -e genconfig - cp -r ${KOLLA_PATH}/etc/kolla/ /etc/kolla - ${KOLLA_PATH}/tools/generate_passwords.py + cp -r ${KOLLA_ANSIBLE_PATH}/etc/kolla/ /etc/kolla + cp -r ${KOLLA_PATH}/etc/kolla/* /etc/kolla + ${KOLLA_ANSIBLE_PATH}/tools/generate_passwords.py mkdir -p /usr/share/kolla chown -R vagrant: /etc/kolla /usr/share/kolla diff --git a/doc/vagrant-dev-env.rst b/doc/vagrant-dev-env.rst index 24504f2f7e..4901733e86 100644 --- a/doc/vagrant-dev-env.rst +++ b/doc/vagrant-dev-env.rst @@ -92,14 +92,18 @@ correctly. On Fedora 22:: sudo systemctl start libvirtd sudo systemctl enable libvirtd -Find a location in the system's home directory and checkout the Kolla repo:: +Find a location in the system's home directory and checkout Kolla repos:: + git clone https://git.openstack.org/openstack/kolla-ansible git clone https://git.openstack.org/openstack/kolla +Both repos must share the same parent directory so the bootstrap code can +locate them. + Developers can now tweak the Vagrantfile or bring up the default **all-in-one** CentOS 7-based environment:: - cd kolla/contrib/dev/vagrant && vagrant up + cd kolla-ansible/contrib/dev/vagrant && vagrant up The command ``vagrant status`` provides a quick overview of the VMs composing the environment.