From 056ecc55ea0ef2f2942a710d6c5cb754da52fad9 Mon Sep 17 00:00:00 2001 From: "Juan J. Martinez" Date: Fri, 2 Jun 2017 13:51:37 +0100 Subject: [PATCH] Update Vagrant dev environment - Updated Ubuntu image to use 16.04. - VirtualBox provider to use centos/7 image + vagrant-vbguest plugin. - Improved docs so it is clear that vagrant-vbguest plugin is only required with VirtualBox. - Clarified comment and made it independent of the release. - Refactored the kolla and kolla-ansible paths to be based on the username used by Vagrant, that can change depending on the image. Change-Id: I23d84dcc3297c43eb12eff9c443d282281fc6c82 --- contrib/dev/vagrant/Vagrantfile | 54 ++++++++++--------- .../dev/vagrant/Vagrantfile.custom.example | 20 +++---- contrib/dev/vagrant/bootstrap.sh | 2 +- doc/vagrant-dev-env.rst | 10 +++- 4 files changed, 50 insertions(+), 36 deletions(-) diff --git a/contrib/dev/vagrant/Vagrantfile b/contrib/dev/vagrant/Vagrantfile index 3088e21267..4859ff120d 100644 --- a/contrib/dev/vagrant/Vagrantfile +++ b/contrib/dev/vagrant/Vagrantfile @@ -35,38 +35,37 @@ DISTRO ||= "centos" # is libvirt. GRAPHICSIP ||= "127.0.0.1" -# The bootstrap.sh provision_script requires CentOS 7 or Ubuntu 15.10. # Provisioning other boxes than the default ones may therefore # require changes to bootstrap.sh. PROVISION_SCRIPT ||= "bootstrap.sh" +# The bootstrap.sh provisioning script requires CentOS or Ubuntu; see below +# for the supported versions for each provider. +# +# kolla and kolla-ansible will be mounted in $HOME and the username depends +# on the image. +# PROVIDER_DEFAULTS ||= { libvirt: { centos: { base_image: "centos/7", bridge_interface: "virbr0", - vagrant_shared_folder: "/home/vagrant/sync", sync_method: "nfs", - kolla_path: "/home/vagrant/kolla", - kolla_ansible_path: "/home/vagrant/kolla-ansible" + username: "vagrant" } }, virtualbox: { centos: { - base_image: "puppetlabs/centos-7.0-64-puppet", + base_image: "centos/7", bridge_interface: "wlp3s0b1", - vagrant_shared_folder: "/home/vagrant/sync", sync_method: "virtualbox", - kolla_path: "/home/vagrant/kolla", - kolla_ansible_path: "/home/vagrant/kolla-ansible" + username: "vagrant" }, ubuntu: { - base_image: "ubuntu/wily64", + base_image: "ubuntu/xenial64", bridge_interface: "wlp3s0b1", - vagrant_shared_folder: "/home/vagrant/sync", sync_method: "virtualbox", - kolla_path: "/home/vagrant/kolla", - kolla_ansible_path: "/home/vagrant/kolla-ansible" + username: "ubuntu" } } } @@ -176,6 +175,13 @@ Vagrant.configure(2) do |config| config.vm.box = get_default(:base_image) + # these may change depending on the image + username = get_default(:username) + user_home = "/home/#{username}" + vagrant_shared_folder = "#{user_home}/sync" + kolla_path = "#{user_home}/kolla" + kolla_ansible_path = "#{user_home}/kolla-ansible" + # Next to the hostonly NAT-network there is a host-only network with all # nodes attached. Plus, each node receives a 3rd adapter connected to the # outside public network. @@ -198,12 +204,12 @@ Vagrant.configure(2) do |config| chmod 600 /root/.ssh/authorized_keys echo '#{my_publickey}' > /root/.ssh/id_rsa.pub chmod 644 /root/.ssh/id_rsa.pub - mkdir -p /home/vagrant/.ssh - echo '#{my_privatekey}' >> /home/vagrant/.ssh/id_rsa - chmod 600 /home/vagrant/.ssh/* - echo 'Host *' > ~vagrant/.ssh/config - echo StrictHostKeyChecking no >> ~vagrant/.ssh/config - chown -R vagrant: /home/vagrant/.ssh + mkdir -p #{user_home}/.ssh + echo '#{my_privatekey}' >> #{user_home}/.ssh/id_rsa + chmod 600 #{user_home}/.ssh/* + echo 'Host *' > #{user_home}/.ssh/config + echo StrictHostKeyChecking no >> #{user_home}/.ssh/config + chown -R #{username} #{user_home}/.ssh EOS config.hostmanager.enabled = true @@ -224,12 +230,12 @@ 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)} #{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.provision :shell, path: PROVISION_SCRIPT, args: "operator #{MULTINODE ? 'multinode' : 'aio'} #{kolla_path} #{kolla_ansible_path}" + admin.vm.synced_folder kolla_ansible_repo_path, kolla_ansible_path, create:"True", type: get_default(:sync_method) + admin.vm.synced_folder kolla_repo_path, 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 + admin.vm.synced_folder ".", vagrant_shared_folder, disabled: true admin.vm.provider PROVIDER do |vm| vm.memory = MULTINODE ? get_setting(:operator, :memory) : get_setting(:aio, :memory) vm.cpus = MULTINODE ? get_setting(:operator, :cpus) : get_setting(:aio, :cpus) @@ -247,10 +253,10 @@ 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)} #{get_default(:kolla_ansible_path)}" + node.vm.provision :shell, path: PROVISION_SCRIPT, args: "#{hostname} multinode #{kolla_path} #{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 + node.vm.synced_folder ".", vagrant_shared_folder, disabled: true node.vm.provider PROVIDER do |vm| vm.memory = get_setting(node_type.to_sym, :memory) vm.cpus = get_setting(node_type.to_sym, :cpus) diff --git a/contrib/dev/vagrant/Vagrantfile.custom.example b/contrib/dev/vagrant/Vagrantfile.custom.example index aa4193d3fa..65340aa0a1 100644 --- a/contrib/dev/vagrant/Vagrantfile.custom.example +++ b/contrib/dev/vagrant/Vagrantfile.custom.example @@ -16,11 +16,16 @@ # is libvirt. # GRAPHICSIP = "127.0.0.1" -# The bootstrap.sh provision_script requires CentOS 7 or Ubuntu 15.10. # Provisioning other boxes than the default ones may therefore # require changes to bootstrap.sh. # PROVISION_SCRIPT = "bootstrap.sh" +# The bootstrap.sh provisioning script requires CentOS or Ubuntu; see below +# for the supported versions for each provider. +# +# kolla and kolla-ansible will be mounted in $HOME and the username depends +# on the image. +# # PROVIDER_DEFAULTS = { # libvirt: { # centos: { @@ -28,26 +33,23 @@ # bridge_interface: "virbr0", # vagrant_shared_folder: "/home/vagrant/sync", # sync_method: "nfs", -# kolla_path: "/home/vagrant/kolla", -# kolla_ansible_path: "/home/vagrant/kolla-ansible" +# username: "vagrant" # } # }, # virtualbox: { # centos: { -# base_image: "puppetlabs/centos-7.0-64-puppet", +# base_image: "centos/7", # bridge_interface: "wlp3s0b1", # vagrant_shared_folder: "/home/vagrant/sync", # sync_method: "virtualbox", -# kolla_path: "/home/vagrant/kolla", -# kolla_ansible_path: "/home/vagrant/kolla-ansible" +# username: "vagrant" # }, # ubuntu: { -# base_image: "ubuntu/wily64", +# base_image: "ubuntu/xenial64", # bridge_interface: "wlp3s0b1", # vagrant_shared_folder: "/home/vagrant/sync", # sync_method: "virtualbox", -# kolla_path: "/home/vagrant/kolla", -# kolla_ansible_path: "/home/vagrant/kolla-ansible" +# username: "ubuntu" # } # } # } diff --git a/contrib/dev/vagrant/bootstrap.sh b/contrib/dev/vagrant/bootstrap.sh index 0719e5b1ae..8be008f78c 100644 --- a/contrib/dev/vagrant/bootstrap.sh +++ b/contrib/dev/vagrant/bootstrap.sh @@ -115,7 +115,7 @@ EOF usermod -aG docker vagrant elif is_ubuntu; then apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D - echo "deb https://apt.dockerproject.org/repo ubuntu-wily main" > /etc/apt/sources.list.d/docker.list + echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" > /etc/apt/sources.list.d/docker.list apt-get update apt-get -y install docker-engine sed -i -r "s,(ExecStart)=(.+),\1=/usr/bin/docker daemon --insecure-registry ${REGISTRY} --registry-mirror=http://${REGISTRY}|" /lib/systemd/system/docker.service diff --git a/doc/vagrant-dev-env.rst b/doc/vagrant-dev-env.rst index 217f06bc44..edc476a2f0 100644 --- a/doc/vagrant-dev-env.rst +++ b/doc/vagrant-dev-env.rst @@ -63,8 +63,14 @@ If you are going to use VirtualBox, then install vagrant-vbguest:: vagrant plugin install vagrant-vbguest -Vagrant supports a wide range of virtualization technologies. This -documentation describes libvirt. To install vagrant-libvirt plugin:: +Vagrant supports a wide range of virtualization technologies. If VirtualBox is +used, the vbguest plugin will be required to install the VirtualBox Guest +Additions in the virtual machine:: + + vagrant plugin install vagrant-vbguest + +This documentation focuses on libvirt specifics. To install vagrant-libvirt +plugin:: vagrant plugin install --plugin-version ">= 0.0.31" vagrant-libvirt