diff --git a/bootstrap/vagrant-onap/lib/functions b/bootstrap/vagrant-onap/lib/functions
new file mode 100755
index 0000000..fddd49a
--- /dev/null
+++ b/bootstrap/vagrant-onap/lib/functions
@@ -0,0 +1,204 @@
+#!/bin/bash
+
+set -o xtrace
+
+source /var/onap/commons
+
+# configure_dns() - DNS/GW IP address configuration
+function configure_dns {
+    echo "nameserver 10.0.0.1" >> /etc/resolvconf/resolv.conf.d/head
+    resolvconf -u
+}
+
+# create_configuration_files() -  Store credentials in files
+function create_configuration_files {
+    mkdir -p /opt/config
+    echo $nexus_docker_repo > /opt/config/nexus_docker_repo.txt
+    echo $nexus_username > /opt/config/nexus_username.txt
+    echo $nexus_password > /opt/config/nexus_password.txt
+    echo $openstack_username > /opt/config/openstack_username.txt
+    echo $openstack_tenant_id > /opt/config/tenant_id.txt
+    echo $dmaap_topic > /opt/config/dmaap_topic.txt
+    echo $docker_version > /opt/config/docker_version.txt
+}
+
+# pull_openecomp_image() - Pull Docker container image from a Docker Registry Hub
+function pull_openecomp_image {
+    install_docker
+    local image=$1
+    local tag=$2
+    docker login -u $nexus_username -p $nexus_password $nexus_docker_repo
+    docker pull $nexus_docker_repo/openecomp/${image}:$docker_version
+    if [ ${tag} ]; then
+        docker tag $nexus_docker_repo/openecomp/${image}:$docker_version $tag
+    fi
+}
+
+# git_timed() - git can sometimes get itself infinitely stuck with transient network
+# errors or other issues with the remote end.  This wraps git in a
+# timeout/retry loop and is intended to watch over non-local git
+# processes that might hang.
+function git_timed {
+    local count=0
+    local timeout=0
+
+    install_package git
+    until timeout -s SIGINT ${timeout} git "$@"; do
+        # 124 is timeout(1)'s special return code when it reached the
+        # timeout; otherwise assume fatal failure
+        if [[ $? -ne 124 ]]; then
+            exit 1
+        fi
+
+        count=$(($count + 1))
+        if [ $count -eq 3 ]; then
+            exit 1
+        fi
+        sleep 5
+    done
+}
+
+# clone_repo() - Clone Git repository into specific folder
+function clone_repo {
+    local repo_url=https://git.onap.org/
+    local repo=$1
+    local dest_folder=$2
+    if [ ! -d $2 ]; then
+        git_timed clone -b $gerrit_branch --single-branch ${repo_url}${repo} $dest_folder
+    else
+        pushd $dest_folder
+        git_timed pull
+        popd
+    fi
+}
+
+# install_dev_tools() - Install basic dependencies
+function install_dev_tools {
+    install_package apt-transport-https
+    install_package ca-certificates
+    install_package curl
+}
+
+# install_bind() - Install bind utils
+function install_bind {
+    install_package bind9
+    install_package bind9utils
+}
+
+# configure_bind()- Configure bind utils
+function configure_bind {
+    install_bind
+    mkdir /etc/bind/zones
+
+    curl -k $nexus_repo/org.openecomp.demo/boot/$artifacts_version/db_simpledemo_openecomp_org -o /etc/bind/zones/db.simpledemo.openecomp.org
+    curl -k $nexus_repo/org.openecomp.demo/boot/$artifacts_version/named.conf.options -o /etc/bind/named.conf.options
+    curl -k $nexus_repo/org.openecomp.demo/boot/$artifacts_version/named.conf.local -o /etc/bind/named.conf.local
+
+    modprobe ip_gre
+    sed -i "s/OPTIONS=.*/OPTIONS=\"-4 -u bind\"/g" /etc/default/bind9
+    service bind9 restart
+}
+
+# install_java() - Install java binaries
+function install_java {
+    install_package software-properties-common
+    add-apt-repository -y ppa:openjdk-r/ppa
+    install_package openjdk-8-jdk
+}
+
+# install_maven() - Install maven binaries
+function install_maven {
+    if is_package_installed maven; then
+        return
+    fi
+    if ! is_package_installed openjdk-8-jdk; then
+        install_java
+    fi
+    install_package software-properties-common
+    add-apt-repository -y ppa:andrei-pozolotin/maven3
+    install_package maven3
+
+    # Force Maven3 to use jdk8
+    apt-get purge openjdk-7-jdk -y
+}
+
+# configure_docker_proxy() - Configures proxy in Docker from ENV
+function configure_docker_proxy {
+    if [ $http_proxy ]; then
+        echo "export http_proxy=$http_proxy" >> /etc/default/docker
+    fi
+    if [ $https_proxy ]; then
+        echo "export https_proxy=$https_proxy" >> /etc/default/docker
+    fi
+}
+
+# build_docker_image() - Build Docker container image from source code
+function build_docker_image {
+    local src_folder=$1
+    local profile=$2
+    install_maven
+    install_docker
+    pushd $src_folder
+
+    # Cleanup external repo
+    sed -i 's|${docker.push.registry}/||g' pom.xml
+    local mvn_docker="mvn clean package docker:build"
+    if [ $profile ]; then
+        mvn_docker+=" -P $profile"
+    fi
+    if [ $http_proxy ]; then
+        mvn_docker+=" -Ddocker.buildArg.http_proxy=$http_proxy"
+        mvn_docker+=" -Ddocker.buildArg.HTTP_PROXY=$http_proxy"
+    fi
+    if [ $https_proxy ]; then
+        mvn_docker+=" -Ddocker.buildArg.https_proxy=$https_proxy"
+        mvn_docker+=" -Ddocker.buildArg.HTTPS_PROXY=$https_proxy"
+    fi
+    eval $mvn_docker
+    popd
+}
+
+# compile_src() - Function that compiles the java source code thru maven
+function compile_src {
+    local src_folder=$1
+    pushd $src_folder
+    if [ -f pom.xml ]; then
+        install_maven
+        mvn clean install -DskipTests=true -Dmaven.test.skip=true -Dadditionalparam=-Xdoclint:none
+    fi
+    popd
+}
+
+# install_docker() - Download and install docker-engine 
+function install_docker {
+    if is_package_installed docker-ce; then
+        return
+    fi
+    install_package software-properties-common
+    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
+    add-apt-repository \
+        "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
+        $(lsb_release -cs) \
+        stable"
+    install_package docker-ce
+    configure_docker_proxy
+    service docker restart
+}
+
+# install_docker_compose() - Download and install docker-engine 
+function install_docker_compose {
+    local docker_compose_version=${1:-1.12.0}
+    if [ ! -d /opt/docker ]; then
+        mkdir /opt/docker
+        curl -L https://github.com/docker/compose/releases/download/$docker_compose_version/docker-compose-`uname -s`-`uname -m` > /opt/docker/docker-compose
+        chmod +x /opt/docker/docker-compose
+    fi
+}
+
+# configure_service() - Download and configure a specific service in upstart
+function configure_service {
+    local service_script=$1
+    curl -k $nexus_repo/org.openecomp.demo/boot/$artifacts_version/$service_script -o /etc/init.d/$service_script
+    chmod +x /etc/init.d/$service_script
+    update-rc.d $service_script defaults
+}
