Implement steps for Multicloud Images

It was implemented the steps required for retrieving or building
docker images as well as their execution.

Change-Id: I20f79c5375377a9406f92f9e3e32a2cbec23a4f9
Signed-off-by: Victor Morales <victor.morales@intel.com>
Depends-On: Idc876574ceee39b7cf389978d6a33eb7c66291a6
Issue-Id: MULTICLOUD-53
diff --git a/bootstrap/vagrant-onap/lib/functions b/bootstrap/vagrant-onap/lib/functions
index 25fbba3..c4ed3c8 100755
--- a/bootstrap/vagrant-onap/lib/functions
+++ b/bootstrap/vagrant-onap/lib/functions
@@ -178,7 +178,7 @@
     fi
 }
 
-# install_python_package() - Install a python module
+# install_python_package() - Install python modules
 function install_python_package {
     local python_packages=$@
 
@@ -186,6 +186,16 @@
     pip install $python_packages
 }
 
+# install_python_requirements() - Install a list of python modules defined in requirement.txt file
+function install_python_requirements {
+    local python_project_path=$1
+
+    _install_pip
+    pushd $python_project_path
+    pip install -r requirements.txt
+    popd
+}
+
 # install_docker() - Download and install docker-engine
 function install_docker {
     if is_package_installed docker-ce; then
diff --git a/bootstrap/vagrant-onap/lib/multicloud b/bootstrap/vagrant-onap/lib/multicloud
index 0519587..2f9e5d8 100755
--- a/bootstrap/vagrant-onap/lib/multicloud
+++ b/bootstrap/vagrant-onap/lib/multicloud
@@ -6,6 +6,7 @@
 multicloud_repos=("multicloud" "multicloud/framework" "multicloud/openstack" \
 "multicloud/openstack/vmware" "multicloud/openstack/windriver" \
 "multicloud/azure")
+openstack_release="newton"
 
 # clone_multicloud_repos() - Function that clones the Multi Cloud repositories
 function clone_multicloud_repos {
@@ -21,14 +22,28 @@
     done
 }
 
+function _build_images {
+    install_docker
+    install_python_requirements $multicloud_src_folder/openstack/$openstack_release
+    pushd $multicloud_src_folder/openstack/$openstack_release
+    bash build_image.sh
+    popd
+}
+
 # get_multicloud_images() -
 function get_multicloud_images {
-    echo "pass"
+    if [[ "$build_image" == "True" ]]; then
+        _build_images
+    else
+        pull_onap_image multicloud/openstack-$openstack_release
+    fi
 }
 
 # install_multicloud() - 
 function install_multicloud {
-    echo "pass"
+    pushd $multicloud_src_folder/openstack/$openstack_release
+    /opt/docker/docker-compose up -d
+    popd
 }
 
 # init_multicloud() - Function that initialize Multi Cloud services
diff --git a/bootstrap/vagrant-onap/tests/asserts b/bootstrap/vagrant-onap/tests/asserts
index 52f0bce..0fc8d38 100755
--- a/bootstrap/vagrant-onap/tests/asserts
+++ b/bootstrap/vagrant-onap/tests/asserts
@@ -2,6 +2,18 @@
 
 source /var/onap/commons
 
+# asserts_http_status_code() - Function that determines if a HTTP status code is retrieved from URL
+function asserts_http_status_code {
+    local url=$1
+    local expected_code=${2:-"200"}
+
+    code=$(curl -I $url | head -n 1 | cut -d$' ' -f2)
+    local error_msg=${3:-"The URL $url responded with $code status code"}
+    if [[ "$code" == "$expected_code" ]]; then
+        raise_error $error_msg
+    fi
+}
+
 # asserts_process() - Function that verifies if a specific process is running
 function asserts_process {
     local process=$1
diff --git a/bootstrap/vagrant-onap/tests/test_multicloud b/bootstrap/vagrant-onap/tests/test_multicloud
index b0b6748..62a010a 100644
--- a/bootstrap/vagrant-onap/tests/test_multicloud
+++ b/bootstrap/vagrant-onap/tests/test_multicloud
@@ -33,6 +33,8 @@
 function test_get_multicloud_images {
     clone_multicloud_repos
     get_multicloud_images
+
+    asserts_image onap/multicloud/openstack-$openstack_release
 }
 
 # test_install_multicloud() - Verify the built and start of Multi Cloud services
@@ -40,6 +42,9 @@
     clone_multicloud_repos
     get_multicloud_images
     install_multicloud
+
+    # NOTE(electrocucaracha): Depends on https://gerrit.onap.org/r/#/c/23631/
+    asserts_http_status_code http://127.0.0.1:9003/api/multicloud-$openstack_release/v0/swagger.json
 }
 
 if [ "$1" != '*' ]; then