From 5960900f9a13678d895515f2c8492ce511b6d7de Mon Sep 17 00:00:00 2001 From: Daniel Gonzalez Date: Sat, 5 Mar 2016 02:01:13 +0100 Subject: [PATCH] Unify vagrant bootstrap.sh scripts Merge the vagrant bootstrap scripts for centos and ubuntu into a single file. Change-Id: Ia07931b4717cd393fe51141907fc561166cc05e4 Closes-Bug: 1554140 --- dev/vagrant/Vagrantfile | 12 +- dev/vagrant/Vagrantfile.custom.example | 8 +- .../{centos-bootstrap.sh => bootstrap.sh} | 126 ++++++++++++---- dev/vagrant/ubuntu-bootstrap.sh | 134 ------------------ 4 files changed, 107 insertions(+), 173 deletions(-) rename dev/vagrant/{centos-bootstrap.sh => bootstrap.sh} (56%) delete mode 100644 dev/vagrant/ubuntu-bootstrap.sh diff --git a/dev/vagrant/Vagrantfile b/dev/vagrant/Vagrantfile index 3c1400337e..6ade605fb2 100644 --- a/dev/vagrant/Vagrantfile +++ b/dev/vagrant/Vagrantfile @@ -23,6 +23,11 @@ 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" + PROVIDER_DEFAULTS ||= { libvirt: { centos: { @@ -30,7 +35,6 @@ PROVIDER_DEFAULTS ||= { bridge_interface: "virbr0", vagrant_shared_folder: "/home/vagrant/sync", sync_method: "nfs", - provision_script: "centos-bootstrap.sh", kolla_path: "/home/vagrant/kolla" } }, @@ -40,7 +44,6 @@ PROVIDER_DEFAULTS ||= { bridge_interface: "wlp3s0b1", vagrant_shared_folder: "/home/vagrant/sync", sync_method: "virtualbox", - provision_script: "centos-bootstrap.sh", kolla_path: "/home/vagrant/kolla" }, ubuntu: { @@ -48,7 +51,6 @@ PROVIDER_DEFAULTS ||= { bridge_interface: "wlp3s0b1", vagrant_shared_folder: "/home/vagrant/sync", sync_method: "virtualbox", - provision_script: "ubuntu-bootstrap.sh", kolla_path: "/home/vagrant/kolla" } } @@ -158,7 +160,7 @@ Vagrant.configure(2) do |config| # The operator controls the deployment config.vm.define "operator" do |admin| admin.vm.hostname = "operator.local" - admin.vm.provision :shell, path: get_default(:provision_script), args: "operator #{MULTINODE ? 'multinode' : 'aio'} #{get_default(:kolla_path)}" + 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.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) @@ -179,7 +181,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: get_default(:provision_script), args: "#{hostname} multinode #{get_default(:kolla_path)}" + node.vm.provision :shell, path: PROVISION_SCRIPT, args: "#{hostname} multinode #{get_default(:kolla_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/dev/vagrant/Vagrantfile.custom.example b/dev/vagrant/Vagrantfile.custom.example index bb82f041aa..0ca315f27b 100644 --- a/dev/vagrant/Vagrantfile.custom.example +++ b/dev/vagrant/Vagrantfile.custom.example @@ -16,6 +16,11 @@ # 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" + # PROVIDER_DEFAULTS = { # libvirt: { # centos: { @@ -23,7 +28,6 @@ # bridge_interface: "virbr0", # vagrant_shared_folder: "/home/vagrant/sync", # sync_method: "nfs", -# provision_script: "centos-bootstrap.sh", # kolla_path: "/home/vagrant/kolla" # } # }, @@ -33,7 +37,6 @@ # bridge_interface: "wlp3s0b1", # vagrant_shared_folder: "/home/vagrant/sync", # sync_method: "virtualbox", -# provision_script: "centos-bootstrap.sh", # kolla_path: "/home/vagrant/kolla" # }, # ubuntu: { @@ -41,7 +44,6 @@ # bridge_interface: "wlp3s0b1", # vagrant_shared_folder: "/home/vagrant/sync", # sync_method: "virtualbox", -# provision_script: "ubuntu-bootstrap.sh", # kolla_path: "/home/vagrant/kolla" # } # } diff --git a/dev/vagrant/centos-bootstrap.sh b/dev/vagrant/bootstrap.sh similarity index 56% rename from dev/vagrant/centos-bootstrap.sh rename to dev/vagrant/bootstrap.sh index 9030a2cdb0..0fd3579c23 100644 --- a/dev/vagrant/centos-bootstrap.sh +++ b/dev/vagrant/bootstrap.sh @@ -2,6 +2,9 @@ # # Bootstrap script to configure all nodes. # +# This script is intended to be used by vagrant to provision nodes. +# To use it, set it as 'PROVISION_SCRIPT' inside your Vagrantfile.custom. +# You can use Vagrantfile.custom.example as a template for this. VM=$1 MODE=$2 @@ -21,29 +24,77 @@ fi REGISTRY=operator.local:${REGISTRY_PORT} ADMIN_PROTOCOL="http" +function _ensure_lsb_release { + if [[ -x $(which lsb_release 2>/dev/null) ]]; then + return + fi + + if [[ -x $(which apt-get 2>/dev/null) ]]; then + sudo apt-get install -y lsb-release + elif [[ -x $(which yum 2>/dev/null) ]]; then + sudo yum install -y redhat-lsb-core + fi +} + +function _is_distro { + if [[ -z "$DISTRO" ]]; then + _ensure_lsb_release + DISTRO=$(lsb_release -si) + fi + + [[ "$DISTRO" == "$1" ]] +} + +function is_ubuntu { + _is_distro "Ubuntu" +} + +function is_centos { + _is_distro "CentOS" +} + # Install common packages and do some prepwork. function prep_work { - systemctl stop firewalld - systemctl disable firewalld + if [[ "$(systemctl is-enabled firewalld)" = "enabled" ]]; then + systemctl stop firewalld + systemctl disable firewalld + fi # This removes the fqdn from /etc/hosts's 127.0.0.1. This name.local will # resolve to the public IP instead of localhost. sed -i -r "s/^(127\.0\.0\.1\s+)(.*) `hostname` (.+)/\1 \3/" /etc/hosts - yum install -y epel-release - rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 - yum install -y MySQL-python vim-enhanced python-pip python-devel gcc openssl-devel libffi-devel libxml2-devel libxslt-devel - yum clean all + if is_centos; then + yum install -y epel-release + rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 + yum install -y MySQL-python vim-enhanced python-pip python-devel gcc openssl-devel libffi-devel libxml2-devel libxslt-devel + elif is_ubuntu; then + apt-get update + apt-get install -y python-mysqldb python-dev build-essential libssl-dev libffi-dev libxml2-dev libxslt-dev + easy_install pip + else + echo "Unsupported Distro: $DISTRO" 1>&2 + exit 1 + fi + pip install --upgrade docker-py } +# Do some cleanup after the installation of kolla +function cleanup { + if is_centos; then + yum clean all + elif is_ubuntu; then + apt-get clean + else + echo "Unsupported Distro: $DISTRO" 1>&2 + exit 1 + fi +} + # Install and configure a quick&dirty docker daemon. function install_docker { - # Allow for an externally supplied docker binary. - if [[ -f "/data/docker" ]]; then - cp /vagrant/docker /usr/bin/docker - chmod +x /usr/bin/docker - else + if is_centos; then cat >/etc/yum.repos.d/docker.repo <<-EOF [dockerrepo] name=Docker Repository @@ -62,12 +113,21 @@ EOF sed -i -r "s|(ExecStart)=(.+)|\1=/usr/bin/docker daemon --insecure-registry ${REGISTRY} --registry-mirror=http://${REGISTRY}|" /usr/lib/systemd/system/docker.service sed -i 's|^MountFlags=.*|MountFlags=shared|' /usr/lib/systemd/system/docker.service - systemctl daemon-reload - systemctl enable docker - systemctl start docker + 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 + apt-get update + apt-get install -y docker-engine + sed -i -r "s,(ExecStart)=(.+),\1=/usr/bin/docker daemon --insecure-registry ${REGISTRY} --registry-mirror=http://${REGISTRY}|" /lib/systemd/system/docker.service + else + echo "Unsupported Distro: $DISTRO" 1>&2 + exit 1 fi - usermod -aG docker vagrant + systemctl daemon-reload + systemctl enable docker + systemctl start docker } function configure_kolla { @@ -84,24 +144,27 @@ function configure_kolla { # Configure the operator node and install some additional packages. function configure_operator { - yum install -y git mariadb && yum clean all - pip install --upgrade "ansible<2" python-openstackclient python-neutronclient tox - - pip install ~vagrant/kolla - - # Note: this trickery requires a patched docker binary. - if [[ "$http_proxy" = "" ]]; then - su - vagrant sh -c "echo BUILDFLAGS=\\\"--build-env=http_proxy=$http_proxy --build-env=https_proxy=$https_proxy\\\" > ~/kolla/.buildconf" + if is_centos; then + yum install -y git mariadb + elif is_ubuntu; then + apt-get install -y git mariadb-client selinux-utils + else + echo "Unsupported Distro: $DISTRO" 1>&2 + exit 1 fi - # Set selinux to permissive - sed -i -r "s,^SELINUX=.+$,SELINUX=permissive," /etc/selinux/config - setenforce permissive + pip install --upgrade "ansible<2" python-openstackclient python-neutronclient tox - cp -r ~vagrant/kolla/etc/kolla/ /etc/kolla - oslo-config-generator --config-file \ - ~vagrant/kolla/etc/oslo-config-generator/kolla-build.conf \ - --output-file /etc/kolla/kolla-build.conf + pip install ${KOLLA_PATH} + + # Set selinux to permissive + if [[ "$(getenforce)" == "Enforcing" ]]; then + sed -i -r "s,^SELINUX=.+$,SELINUX=permissive," /etc/selinux/config + setenforce permissive + fi + + tox -e genconfig + cp -r ${KOLLA_PATH}/etc/kolla/ /etc/kolla mkdir -p /usr/share/kolla chown -R vagrant: /etc/kolla /usr/share/kolla @@ -123,7 +186,6 @@ EOF virt_type=qemu EOF - # Launch a local registry (and mirror) to speed up pulling images. if [[ ! $(docker ps -a -q -f name=registry) ]]; then docker run -d \ @@ -145,3 +207,5 @@ install_docker if [[ "$VM" = "operator" ]]; then configure_operator fi + +cleanup diff --git a/dev/vagrant/ubuntu-bootstrap.sh b/dev/vagrant/ubuntu-bootstrap.sh deleted file mode 100644 index b57fd1194a..0000000000 --- a/dev/vagrant/ubuntu-bootstrap.sh +++ /dev/null @@ -1,134 +0,0 @@ -#!/bin/bash -# -# Bootstrap script to configure all nodes. -# - -VM=$1 -MODE=$2 -KOLLA_PATH=$3 - -export http_proxy= -export https_proxy= - -if [ "$MODE" = 'aio' ]; then - # Run registry on port 4000 since it may collide with keystone when doing AIO - REGISTRY_PORT=4000 - SUPPORT_NODE=operator -else - REGISTRY_PORT=5000 - SUPPORT_NODE=support01 -fi -REGISTRY=operator.local:${REGISTRY_PORT} -ADMIN_PROTOCOL="http" - -# Install common packages and do some prepwork. -function prep_work { - apt-get update - apt-get install -y python-mysqldb python-dev build-essential libssl-dev libffi-dev libxml2-dev libxslt-dev - apt-get clean - easy_install pip - pip install --upgrade docker-py -} - -# Install and configure a quick&dirty docker daemon. -function install_docker { - # Allow for an externally supplied docker binary. - if [[ -f "/data/docker" ]]; then - cp /vagrant/docker /usr/bin/docker - chmod +x /usr/bin/docker - else - 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 - apt-get update - apt-get install -y docker-engine - sed -i -r "s,(ExecStart)=(.+),\1=/usr/bin/docker daemon --insecure-registry ${REGISTRY} --registry-mirror=http://${REGISTRY}|" /lib/systemd/system/docker.service - systemctl daemon-reload - systemctl enable docker - systemctl restart docker - fi -} - -function configure_kolla { - # Use local docker registry - sed -i -r "s,^[# ]*namespace *=.+$,namespace = ${REGISTRY}/lokolla," /etc/kolla/kolla-build.conf - sed -i -r "s,^[# ]*push *=.+$,push = True," /etc/kolla/kolla-build.conf - sed -i -r "s,^[# ]*docker_registry:.+$,docker_registry: \"${REGISTRY}\"," /etc/kolla/globals.yml - sed -i -r "s,^[# ]*docker_namespace:.+$,docker_namespace: \"lokolla\"," /etc/kolla/globals.yml - sed -i -r "s,^[# ]*docker_insecure_registry:.+$,docker_insecure_registry: \"True\"," /etc/kolla/globals.yml - # Set network interfaces - sed -i -r "s,^[# ]*network_interface:.+$,network_interface: \"eth1\"," /etc/kolla/globals.yml - sed -i -r "s,^[# ]*neutron_external_interface:.+$,neutron_external_interface: \"eth2\"," /etc/kolla/globals.yml -} - -# Configure the operator node and install some additional packages. -function configure_operator { - apt-get install -y git mariadb-client selinux-utils && apt-get clean - pip install --upgrade "ansible<2" python-openstackclient python-neutronclient tox - - pip install ~vagrant/kolla - - # Note: this trickery requires a patched docker binary. - if [[ "$http_proxy" = "" ]]; then - su - vagrant sh -c "echo BUILDFLAGS=\\\"--build-env=http_proxy=$http_proxy --build-env=https_proxy=$https_proxy\\\" > ~/kolla/.buildconf" - fi - - cp -r ~vagrant/kolla/etc/kolla/ /etc/kolla - oslo-config-generator --config-file \ - ~vagrant/kolla/etc/oslo-config-generator/kolla-build.conf \ - --output-file /etc/kolla/kolla-build.conf - mkdir -p /usr/share/kolla - chown -R vagrant: /etc/kolla /usr/share/kolla - - configure_kolla - - # Make sure Ansible uses scp. - cat > ~vagrant/.ansible.cfg < /etc/kolla/config/nova/nova-compute.conf <