From 7d753296b2f742c4633c0b81f468daccabba2c9e Mon Sep 17 00:00:00 2001 From: "waqas.ikram" Date: Thu, 18 Jul 2019 16:41:17 +0000 Subject: [PATCH] Automate workaround to trigger ETSI flow Change-Id: Ib9bf3639acb16b7b403cb07ba71407711bd529ff Issue-ID: SO-1955 Signed-off-by: waqas.ikram --- plans/so/integration-etsi-testing/.gitignore | 2 + .../config/apply-workarounds.sh | 116 ++++++++++++++++++ plans/so/integration-etsi-testing/config/env | 2 + .../so/integration-etsi-testing/docker-compose.yml | 131 +++++++++++++++++++-- plans/so/integration-etsi-testing/setup.sh | 33 +++++- .../so-simulators/package/docker/pom.xml | 8 ++ .../Dockerfile.workaround-job-container | 27 +++++ plans/so/integration-etsi-testing/teardown.sh | 20 +++- 8 files changed, 325 insertions(+), 14 deletions(-) create mode 100755 plans/so/integration-etsi-testing/config/apply-workarounds.sh create mode 100644 plans/so/integration-etsi-testing/config/env create mode 100644 plans/so/integration-etsi-testing/so-simulators/package/docker/src/main/docker/docker-files/Dockerfile.workaround-job-container diff --git a/plans/so/integration-etsi-testing/.gitignore b/plans/so/integration-etsi-testing/.gitignore index 675e83ca..44793d73 100644 --- a/plans/so/integration-etsi-testing/.gitignore +++ b/plans/so/integration-etsi-testing/.gitignore @@ -18,3 +18,5 @@ target /.metadata/ temp/ **/temp/** +test_lab/ +**/test_lab/** diff --git a/plans/so/integration-etsi-testing/config/apply-workarounds.sh b/plans/so/integration-etsi-testing/config/apply-workarounds.sh new file mode 100755 index 00000000..f6bf906b --- /dev/null +++ b/plans/so/integration-etsi-testing/config/apply-workarounds.sh @@ -0,0 +1,116 @@ +#!/bin/bash +# +# ============LICENSE_START======================================================= +# Copyright (C) 2019 Nordix Foundation. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= +# + +# @author Waqas Ikram (waqas.ikram@est.tech) + +BUIDLING_BLOCK_TABLE_NAME="building_block_detail" +ORCH_FLOW_TABLE_NAME="orchestration_flow_reference" +NORTH_BOUND_TABLE_NAME="northbound_request_ref_lookup" +TABLE_EXISTS_QUERY="select count(*) from information_schema.tables WHERE table_schema='$CATALOG_DB' AND table_name='$BUIDLING_BLOCK_TABLE_NAME';" +BUILDING_BLOCK_COUNT_QUERY="select count(*) from $BUIDLING_BLOCK_TABLE_NAME;" +FLY_WAY_MIGRATION_QUERY="SELECT COUNT(*) FROM flyway_schema_history WHERE script LIKE '%R__MacroData%' AND installed_on IS NOT NULL;" + + +current_timestamp() +{ + date +"%Y-%m-%d %H:%M:%S" +} + +wait_for_database_availability() +{ + echo "$(current_timestamp): Checking for database availability" + until echo '\q' | mysql -h $DB_HOST -P $DB_PORT -uroot -p$MYSQL_ROOT_PASSWORD $CATALOG_DB; do + >&2 echo "$(current_timestamp): Database is unavailable - sleeping for 5 seconds" + sleep 5 + done + + echo "$(current_timestamp): Database is available now" +} + +wait_container_to_create_table() +{ + while [ $(mysql -h $DB_HOST -P $DB_PORT -uroot -p$MYSQL_ROOT_PASSWORD $CATALOG_DB -sse "$TABLE_EXISTS_QUERY") -eq "0" ] ; do + echo "$(current_timestamp): Waiting for so-catalog container to create tables - sleeping for 5 seconds" + sleep 5 + done + + while [ $(mysql -h $DB_HOST -P $DB_PORT -uroot -p$MYSQL_ROOT_PASSWORD $CATALOG_DB -sse "$BUILDING_BLOCK_COUNT_QUERY") -eq "0" ] ; do + echo "$(current_timestamp): Waiting for so-catalog container to insert records in $BUIDLING_BLOCK_TABLE_NAME - sleeping for 5 seconds" + sleep 5 + done + + echo "$(current_timestamp): $CATALOG_DB tables available now . . ." +} + +wait_for_flyway_migration_to_finish() +{ + while [ $(mysql -h $DB_HOST -P $DB_PORT -uroot -p$MYSQL_ROOT_PASSWORD $CATALOG_DB -sse "$FLY_WAY_MIGRATION_QUERY") -ne "1" ] ; do + echo "$(current_timestamp): Waiting for flyway migration sql statement to finish with success - sleeping for 5 seconds" + sleep 5 + done + echo "$(current_timestamp): flyway migration finished . . . " +} + + +apply_workaround() +{ + echo "$(current_timestamp): Applying workaround . . ." + + wait_for_database_availability + wait_container_to_create_table + wait_for_flyway_migration_to_finish + + echo "$(current_timestamp): Will insert data into $CATALOG_DB" +mysql -h $DB_HOST -uroot -p$MYSQL_ROOT_PASSWORD $CATALOG_DB << EOF + BEGIN; + INSERT INTO $BUIDLING_BLOCK_TABLE_NAME (BUILDING_BLOCK_NAME,RESOURCE_TYPE,TARGET_ACTION) values ("EtsiVnfInstantiateBB", "VNF", "ACTIVATE"); + INSERT INTO $BUIDLING_BLOCK_TABLE_NAME (BUILDING_BLOCK_NAME,RESOURCE_TYPE,TARGET_ACTION) values ("EtsiVnfDeleteBB", "VNF", "DEACTIVATE"); + + DELETE FROM $ORCH_FLOW_TABLE_NAME where COMPOSITE_ACTION = "VNF-Create"; + + INSERT INTO $ORCH_FLOW_TABLE_NAME (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) SELECT "VNF-Create" AS COMPOSITE_ACTION, 1 AS SEQ_NO, "AssignVnfBB" AS FLOW_NAME, 1 AS FLOW_VERSION, id AS NB_REQ_REF_LOOKUP_ID FROM $NORTH_BOUND_TABLE_NAME WHERE REQUEST_SCOPE='Vnf' AND IS_ALACARTE is true AND ACTION="createInstance"; + + INSERT INTO $ORCH_FLOW_TABLE_NAME (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) SELECT "VNF-Create" AS COMPOSITE_ACTION, 2 AS SEQ_NO, "EtsiVnfInstantiateBB" AS FLOW_NAME, 1 AS FLOW_VERSION, id AS NB_REQ_REF_LOOKUP_ID FROM $NORTH_BOUND_TABLE_NAME WHERE REQUEST_SCOPE='Vnf' AND IS_ALACARTE is true AND ACTION="createInstance"; + + INSERT INTO $ORCH_FLOW_TABLE_NAME (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) SELECT "VNF-Create" AS COMPOSITE_ACTION, 3 AS SEQ_NO, "ActivateVnfBB" AS FLOW_NAME, 1 AS FLOW_VERSION, id AS NB_REQ_REF_LOOKUP_ID FROM $NORTH_BOUND_TABLE_NAME WHERE REQUEST_SCOPE='Vnf' AND IS_ALACARTE is true AND ACTION="createInstance"; + + DELETE FROM $ORCH_FLOW_TABLE_NAME where COMPOSITE_ACTION = "VNF-Delete"; + + INSERT INTO $ORCH_FLOW_TABLE_NAME (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) SELECT "VNF-Delete" AS COMPOSITE_ACTION, 1 AS SEQ_NO, "EtsiVnfDeleteBB" AS FLOW_NAME, 1 AS FLOW_VERSION, id AS NB_REQ_REF_LOOKUP_ID FROM $NORTH_BOUND_TABLE_NAME WHERE REQUEST_SCOPE='Vnf' AND IS_ALACARTE is true AND ACTION="deleteInstance"; + + INSERT INTO $ORCH_FLOW_TABLE_NAME (COMPOSITE_ACTION,SEQ_NO,FLOW_NAME,FLOW_VERSION,NB_REQ_REF_LOOKUP_ID ) SELECT "VNF-Delete" AS COMPOSITE_ACTION, 2 AS SEQ_NO, "UnassignVnfBB" AS FLOW_NAME, 1 AS FLOW_VERSION, id AS NB_REQ_REF_LOOKUP_ID FROM $NORTH_BOUND_TABLE_NAME WHERE REQUEST_SCOPE='Vnf' AND IS_ALACARTE is true AND ACTION="deleteInstance"; + + UPDATE orchestration_status_state_transition_directive SET FLOW_DIRECTIVE='CONTINUE' WHERE RESOURCE_TYPE='VNF' AND ORCHESTRATION_STATUS='CREATED' AND TARGET_ACTION='ACTIVATE' AND FLOW_DIRECTIVE='FAIL'; + + COMMIT; +EOF + + if [ $? -ne 0 ]; then + echo "$(current_timestamp): Failed to execute workaround . . ." + exit 1 + fi + + echo "$(current_timestamp): Finished applying workaround . . ." +} + +# main body +apply_workaround + diff --git a/plans/so/integration-etsi-testing/config/env b/plans/so/integration-etsi-testing/config/env new file mode 100644 index 00000000..f34f9c48 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/env @@ -0,0 +1,2 @@ +NEXUS_DOCKER_REPO_MSO=nexus3.onap.org:10001 +TAG=1.4.0-STAGING-latest diff --git a/plans/so/integration-etsi-testing/docker-compose.yml b/plans/so/integration-etsi-testing/docker-compose.yml index d725596e..a1421e35 100644 --- a/plans/so/integration-etsi-testing/docker-compose.yml +++ b/plans/so/integration-etsi-testing/docker-compose.yml @@ -1,23 +1,94 @@ version: '3' services: ################################################################################ - sdc-simulator: - image: simulators/sdc-simulator:latest + mariadb: + image: ${NEXUS_DOCKER_REPO_MSO}/mariadb:10.1.11 ports: - - "9991:9991" + - "3306:3306" + volumes: + - ${TEST_LAB_DIR}/volumes/mariadb/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d + - ${TEST_LAB_DIR}/volumes/mariadb/conf.d:/etc/mysql/conf.d environment: - - APP=SDC-SIMULATOR - - JVM_ARGS=-Xms64m -Xmx512m + - MYSQL_ROOT_PASSWORD=password hostname: - sdc-simulator + mariadb.so.testlab.onap.org + logging: + driver: "json-file" + options: + max-size: "30m" + max-file: "5" +################################################################################ + catalog-db-adapter: + image: ${NEXUS_DOCKER_REPO_MSO}/onap/so/catalog-db-adapter:${TAG} + ports: + - "8082:8082" + volumes: + - ${TEST_LAB_DIR}/volumes/so/ca-certificates/onapheat:/app/ca-certificates + - ${TEST_LAB_DIR}/volumes/so/config/catalog-db-adapter/onapheat:/app/config + environment: + - APP=catalog-db-adapter + - JVM_ARGS=-Xms64m -Xmx512m + - DB_HOST=mariadb + - DB_PORT=3306 + - DB_USERNAME=so_user + - DB_PASSWORD=so_User123 + - DB_ADMIN_USERNAME=so_admin + - DB_ADMIN_PASSWORD=so_Admin123 + hostname: + catalog-db-adapter.so.testlab.onap.org + depends_on: + - mariadb + logging: + driver: "json-file" + options: + max-size: "30m" + max-file: "5" + command: + - /app/wait-for.sh + - -q + - -t + - "300" + - mariadb:3306 + - -- + - "/app/start-app.sh" +################################################################################ + request-db-adapter: + image: ${NEXUS_DOCKER_REPO_MSO}/onap/so/request-db-adapter:${TAG} + ports: + - "8083:8083" + volumes: + - ${TEST_LAB_DIR}/volumes/so/ca-certificates/onapheat:/app/ca-certificates + - ${TEST_LAB_DIR}/volumes/so/config/request-db-adapter/onapheat:/app/config + environment: + - APP=request-db-adapter + - JVM_ARGS=-Xms64m -Xmx512m + - DB_HOST=mariadb + - DB_PORT=3306 + - DB_USERNAME=so_user + - DB_PASSWORD=so_User123 + - DB_ADMIN_USERNAME=so_admin + - DB_ADMIN_PASSWORD=so_Admin123 + hostname: + request-db-adapter.so.testlab.onap.org + depends_on: + - mariadb + - catalog-db-adapter logging: driver: "json-file" options: max-size: "30m" max-file: "5" + command: + - /app/wait-for.sh + - -q + - -t + - "300" + - catalog-db-adapter:8082 + - -- + - "/app/start-app.sh" ################################################################################ VNFM-adapter: - image: nexus3.onap.org:10001/onap/so/vnfm-adapter:1.4.4 + image: ${NEXUS_DOCKER_REPO_MSO}/onap/so/vnfm-adapter:${TAG} ports: - "9092:9092" environment: @@ -25,10 +96,54 @@ services: - JVM_ARGS=-Xms64m -Xmx512m hostname: vnfm-adapter-test + depends_on: + - request-db-adapter logging: driver: "json-file" options: max-size: "30m" max-file: "5" + command: + - /app/wait-for.sh + - -q + - -t + - "300" + - request-db-adapter:8083 + - -- + - "/app/start-app.sh" +################################################################################ + sdc-simulator: + image: simulators/sdc-simulator:latest + ports: + - "9991:9991" + environment: + - APP=SDC-SIMULATOR + - JVM_ARGS=-Xms64m -Xmx512m + hostname: + sdc-simulator + depends_on: + - mariadb + - VNFM-adapter + logging: + driver: "json-file" + options: + max-size: "30m" + max-file: "5" +################################################################################ + workaround-config: + image: jobs/workaround-job-container:latest + ports: + - "9990:9990" + volumes: + - ${CONFIG_DIR_PATH}/apply-workarounds.sh:/config/apply-workarounds.sh + environment: + - MYSQL_ROOT_PASSWORD=password + - DB_HOST=mariadb + - DB_PORT=3306 + - CATALOG_DB=catalogdb + depends_on: + - mariadb + - VNFM-adapter + command: + - "/config/apply-workarounds.sh" ################################################################################ - diff --git a/plans/so/integration-etsi-testing/setup.sh b/plans/so/integration-etsi-testing/setup.sh index 25e7ee76..75e75275 100755 --- a/plans/so/integration-etsi-testing/setup.sh +++ b/plans/so/integration-etsi-testing/setup.sh @@ -26,7 +26,11 @@ MAVEN_TAR_LOCATION="http://apache.claz.org/maven/maven-3/3.3.9/binaries/$MAVEN_T SCRIPT_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" SCRIPT_NAME=$(basename $0) +CONFIG_DIR=$SCRIPT_HOME/config +ENV_FILE=$CONFIG_DIR/env TEMP_DIR_PATH=$SCRIPT_HOME/temp +TEST_LAB_DIR_PATH=$TEMP_DIR_PATH/test_lab +DOCKER_COMPOSE_FILE_PATH=$SCRIPT_HOME/docker-compose.yml MAVEN_DIR=$TEMP_DIR_PATH/maven INSTALLED_MAVEN_DIR=$MAVEN_DIR/$MAVEN_VERSION_DIR @@ -38,6 +42,8 @@ SIMULATOR_MAVEN_PROJECT_POM="$SCRIPT_HOME/so-simulators/pom.xml" echo "Running $SCRIPT_HOME/$SCRIPT_NAME ..." +export $(egrep -v '^#' $ENV_FILE | xargs) + if [[ ! "$TEMP_DIR_PATH" || ! -d "$TEMP_DIR_PATH" ]]; then echo "Creating temporary directory $TEMP_DIR_PATH" mkdir $TEMP_DIR_PATH @@ -99,13 +105,30 @@ cd $SCRIPT_HOME echo "Will build simulator project using $MVN_CLEAN_INSTALL -f $SIMULATOR_MAVEN_PROJECT_POM --settings $MVN_SETTINGS_XML" $MVN_CLEAN_INSTALL -f $SIMULATOR_MAVEN_PROJECT_POM --settings $MVN_SETTINGS_XML -export NEXUS_DOCKER_REPO_MSO=nexus3.onap.org:10001 -export TAG=1.4.0-STAGING-latest +if [ $? -ne 0 ]; then + echo "Maven build failed" + exit 1 +fi + +echo "Will clone docker-config project ... " + + +if [[ -d "$TEST_LAB_DIR_PATH" ]]; then + echo "$TEST_LAB_DIR_PATH already exists" + echo "Removing $TEST_LAB_DIR_PATH directory ..." + rm -rf $TEST_LAB_DIR_PATH +fi + +git clone http://gerrit.onap.org/r/so/docker-config.git $TEST_LAB_DIR_PATH + + +export TEST_LAB_DIR=$TEST_LAB_DIR_PATH +export CONFIG_DIR_PATH=$CONFIG_DIR -docker-compose up -d +docker-compose -f $DOCKER_COMPOSE_FILE_PATH up -d -echo "Sleeping for 2m" -sleep 2m +echo "Sleeping for 3m" +sleep 3m REPO_IP='127.0.0.1' ROBOT_VARIABLES="-v REPO_IP:${REPO_IP}" diff --git a/plans/so/integration-etsi-testing/so-simulators/package/docker/pom.xml b/plans/so/integration-etsi-testing/so-simulators/package/docker/pom.xml index 873fa2ab..1753f4b5 100644 --- a/plans/so/integration-etsi-testing/so-simulators/package/docker/pom.xml +++ b/plans/so/integration-etsi-testing/so-simulators/package/docker/pom.xml @@ -26,6 +26,14 @@ ${docker.push.registry} + + jobs/workaround-job-container + + try + docker-files + Dockerfile.workaround-job-container + + simulators/sdc-simulator diff --git a/plans/so/integration-etsi-testing/so-simulators/package/docker/src/main/docker/docker-files/Dockerfile.workaround-job-container b/plans/so/integration-etsi-testing/so-simulators/package/docker/src/main/docker/docker-files/Dockerfile.workaround-job-container new file mode 100644 index 00000000..faf8492c --- /dev/null +++ b/plans/so/integration-etsi-testing/so-simulators/package/docker/src/main/docker/docker-files/Dockerfile.workaround-job-container @@ -0,0 +1,27 @@ +# ============LICENSE_START======================================================= +# Copyright (C) 2019 Nordix Foundation. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= +# + +# @author Waqas Ikram (waqas.ikram@est.tech) + +FROM docker.io/alpine + +# Install packages +RUN apk update && apk upgrade && apk add mysql-client && apk add bash + +RUN apk --no-cache add curl netcat-openbsd sudo nss diff --git a/plans/so/integration-etsi-testing/teardown.sh b/plans/so/integration-etsi-testing/teardown.sh index 8b778a57..6014a0d1 100755 --- a/plans/so/integration-etsi-testing/teardown.sh +++ b/plans/so/integration-etsi-testing/teardown.sh @@ -19,4 +19,22 @@ # ============LICENSE_END========================================================= # -docker-compose down +# @author Waqas Ikram (waqas.ikram@est.tech) + +SCRIPT_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" +SCRIPT_NAME=$(basename $0) +CONFIG_DIR=$SCRIPT_HOME/config +ENV_FILE=$CONFIG_DIR/env +TEMP_DIR_PATH=$SCRIPT_HOME/temp +TEST_LAB_DIR_PATH=$TEMP_DIR_PATH/test_lab +DOCKER_COMPOSE_FILE_PATH=$SCRIPT_HOME/docker-compose.yml + +echo "Running $SCRIPT_HOME/$SCRIPT_NAME ..." +export $(egrep -v '^#' $ENV_FILE | xargs) +export TEST_LAB_DIR=$TEST_LAB_DIR_PATH +export CONFIG_DIR_PATH=$CONFIG_DIR + + +docker-compose -f $DOCKER_COMPOSE_FILE_PATH down + +echo "Finished executing $SCRIPT_HOME/$SCRIPT_NAME" -- 2.16.6