diff options
-rwxr-xr-x | docker/docker-entrypoint.sh | 2 | ||||
-rwxr-xr-x | docker/instance_config.sh | 12 | ||||
-rwxr-xr-x | docker/instance_init.sh | 56 | ||||
-rw-r--r-- | lcm/ns/tests/test_sol_ns_heal_api.py | 8 | ||||
-rw-r--r-- | lcm/ns/tests/test_sol_ns_scale_api.py | 2 | ||||
-rw-r--r-- | lcm/ns/tests/test_sol_ns_terminate_api.py | 5 | ||||
-rw-r--r-- | lcm/ns/urls.py | 6 | ||||
-rw-r--r-- | lcm/ns/views/sol/health_check.py | 24 |
8 files changed, 70 insertions, 45 deletions
diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 814d1798..e116c33b 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -1,5 +1,7 @@ #!/bin/bash +find /service -name '*.sh'|xargs chmod a+x + if [ -z "$SERVICE_IP" ]; then export SERVICE_IP=`hostname -i` fi diff --git a/docker/instance_config.sh b/docker/instance_config.sh index 185194cd..524d4e7f 100755 --- a/docker/instance_config.sh +++ b/docker/instance_config.sh @@ -29,14 +29,16 @@ fi # Configure MYSQL MYSQL_IP=`echo $MYSQL_ADDR | cut -d: -f 1` MYSQL_PORT=`echo $MYSQL_ADDR | cut -d: -f 2` -MYSQL_USER=`echo $MYSQL_AUTH | cut -d: -f 1` -MYSQL_ROOT_PASSWORD=`echo $MYSQL_AUTH | cut -d: -f 2 - echo "MYSQL_ADDR=$MYSQL_ADDR" + +if [ $REDIS_ADDR ]; then + REDIS_IP=`echo $REDIS_ADDR | cut -d: -f 1` +else + REDIS_IP="$MYSQL_ADDR" +fi + sed -i "s|DB_IP.*|DB_IP = '$MYSQL_IP'|" vfc/nfvo/lcm/lcm/pub/config/config.py sed -i "s|DB_PORT.*|DB_PORT = $MYSQL_PORT|" vfc/nfvo/lcm/lcm/pub/config/config.py sed -i "s|REDIS_HOST.*|REDIS_HOST = '$MYSQL_IP'|" vfc/nfvo/lcm/lcm/pub/config/config.py -sed -i "s|DB_USER.*|DB_USER = '$MYSQL_USER'|" vfc/nfvo/lcm/lcm/pub/config/config.py -sed -i "s|DB_PASSWD.*|DB_PASSWD = '$MYSQL_ROOT_PASSWORD'|" vfc/nfvo/lcm/lcm/pub/config/config.py cat vfc/nfvo/lcm/lcm/pub/config/config.py diff --git a/docker/instance_init.sh b/docker/instance_init.sh index 70e83016..6c289657 100755 --- a/docker/instance_init.sh +++ b/docker/instance_init.sh @@ -1,52 +1,34 @@ #/bin/bash -mkdir -p /service/vfc/nfvo/lcm/resources/bin/logs -mkdir -p /var/log/onap/vfc/nslcm/ -if [ ! -f /service/vfc/nfvo/lcm/resources/bin/logs/django.log ]; then - touch /service/vfc/nfvo/lcm/resources/bin/logs/django.log -else - echo >/service/vfc/nfvo/lcm/resources/bin/logs/django.log -fi -if [ ! -f /var/log/onap/vfc/nslcm/runtime_nslcm.log ]; then - touch /var/log/onap/vfc/nslcm/runtime_nslcm.log +MYSQL_IP=`echo $MYSQL_ADDR | cut -d: -f 1` +MYSQL_PORT=`echo $MYSQL_ADDR | cut -d: -f 2` + +if [ $MYSQL_AUTH ]; then + MYSQL_ROOT_USER=`echo $MYSQL_AUTH | cut -d: -f 1` + MYSQL_ROOT_PASSWORD=`echo $MYSQL_AUTH | cut -d: -f 2` else - echo >/var/log/onap/vfc/nslcm/runtime_nslcm.log + MYSQL_ROOT_USER="root" + MYSQL_ROOT_PASSWORD="root" fi -MYSQL_IP=`echo $MYSQL_ADDR | cut -d: -f 1` -MYSQL_PORT=`echo $MYSQL_ADDR | cut -d: -f 2` -MYSQL_USER=`echo $MYSQL_AUTH | cut -d: -f 1` -MYSQL_ROOT_PASSWORD=`echo $MYSQL_AUTH | cut -d: -f 2` function create_database { cd /service/vfc/nfvo/lcm/resources/bin - bash initDB.sh $MYSQL_USER $MYSQL_ROOT_PASSWORD $MYSQL_PORT $MYSQL_IP - man_path=/service/vfc/nfvo/lcm - tab=`mysql -u${MYSQL_USER} -p${MYSQL_ROOT_PASSWORD} -P${MYSQL_PORT} -h${MYSQL_IP} -e "SELECT count(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='vfcnfvolcm';"` - tab1=`echo $tab |awk '{print $2}'` - - if [ $tab1 -eq 0 ] ; then - - echo "TABLE NOT EXISTS, START MIGRATE" - python $man_path/manage.py makemigrations database && python $man_path/manage.py migrate database & - wait - tab2=`mysql -u${MYSQL_USER} -p${MYSQL_ROOT_PASSWORD} -P${MYSQL_PORT} -h${MYSQL_IP} -e "SELECT count(TABLE_NAME) FROM information_schema.TABLES WHERE TABLE_SCHEMA='vfcnfvolcm';"` - tab3=`echo $tab2|awk '{print $2}'` - if [ $tab3 -gt 0 ] ; then - echo "TABLE CREATE uUCCESSFUL" - fi -else - echo "table already existed" - exit 1 -fi + bash initDB.sh $MYSQL_ROOT_USER $MYSQL_ROOT_PASSWORD $MYSQL_PORT $MYSQL_IP + } +function migrate_database { + cd /service/vfc/nfvo/lcm + python manage.py makemigrations database + python manage.py migrate +} -if [ ! -f /service/vfc/nfvo/lcm/docker/db.txt ]; then - echo 1 > /service/vfc/nfvo/lcm/docker/db.txt +cd /service +if [ ! -f dbexist.txt ]; then + echo 1 > dbexist.txt create_database -else - echo "database already existed" + migrate_database fi diff --git a/lcm/ns/tests/test_sol_ns_heal_api.py b/lcm/ns/tests/test_sol_ns_heal_api.py index 8ff4ced5..ebd8ba0d 100644 --- a/lcm/ns/tests/test_sol_ns_heal_api.py +++ b/lcm/ns/tests/test_sol_ns_heal_api.py @@ -13,6 +13,7 @@ # limitations under the License. import json +import uuid import mock from django.test import Client @@ -28,7 +29,8 @@ from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE class TestHealNsApi(TestCase): def setUp(self): self.url = "/api/nslcm/v1/ns_instances/%s/heal" - self.ns_inst_id = '1' + # self.ns_inst_id = '1' + self.ns_inst_id = str(uuid.uuid4()) self.nf_inst_id = '1' self.nf_uuid = '1-1-1' @@ -93,6 +95,8 @@ class TestHealNsApi(TestCase): self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code, response.data) self.assertIsNotNone(response.data) self.assertIsNotNone(response['Location']) + response = self.client.get(response['Location'], format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) # add healNsData @@ -117,6 +121,8 @@ class TestHealNsApi(TestCase): response = self.client.post(self.url % self.ns_inst_id, data=data) self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code, response.data) self.assertIsNotNone(response['Location']) + response = self.client.get(response['Location'], format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) @mock.patch.object(NSHealService, "start") def test_heal_vnf_non_existing_ns(self, mock_start): diff --git a/lcm/ns/tests/test_sol_ns_scale_api.py b/lcm/ns/tests/test_sol_ns_scale_api.py index c484a88d..9d4ed938 100644 --- a/lcm/ns/tests/test_sol_ns_scale_api.py +++ b/lcm/ns/tests/test_sol_ns_scale_api.py @@ -198,6 +198,8 @@ class TestScaleNsApi(TestCase): response = self.client.post(self.url % self.ns_inst_id, data=data) self.failUnlessEqual(status.HTTP_202_ACCEPTED, response.status_code) self.assertIsNotNone(response['Location']) + response = self.client.get(response['Location'], format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) @mock.patch.object(NSManualScaleService, 'start') def test_ns_manual_scale_empty_data(self, mock_start): diff --git a/lcm/ns/tests/test_sol_ns_terminate_api.py b/lcm/ns/tests/test_sol_ns_terminate_api.py index 44de00e7..5aec52e9 100644 --- a/lcm/ns/tests/test_sol_ns_terminate_api.py +++ b/lcm/ns/tests/test_sol_ns_terminate_api.py @@ -25,7 +25,8 @@ class TestTerminateNsApi(TestCase): def setUp(self): self.client = Client() self.url = "/api/nslcm/v1/ns_instances/%s/terminate" - self.ns_inst_id = '1' + # self.ns_inst_id = '1' + self.ns_inst_id = str(uuid.uuid4()) self.nf_inst_id = '1' self.vnffg_id = str(uuid.uuid4()) self.vim_id = str(uuid.uuid4()) @@ -62,6 +63,8 @@ class TestTerminateNsApi(TestCase): response = self.client.post(self.url % self.ns_inst_id, data=req_data) self.failUnlessEqual(status.HTTP_202_ACCEPTED, response.status_code) self.assertIsNotNone(response['Location']) + response = self.client.get(response['Location'], format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) def test_method_not_allowed(self): response = self.client.put(self.url % '1', data={}, format='json') diff --git a/lcm/ns/urls.py b/lcm/ns/urls.py index fd826fab..1e859d3d 100644 --- a/lcm/ns/urls.py +++ b/lcm/ns/urls.py @@ -34,6 +34,7 @@ from lcm.ns.views.sol.subscriptions_view import SubscriptionsView from lcm.ns.views.sol.update_ns_view import UpdateNSView from lcm.ns.views.sol.scale_ns_views import ScaleNSView from lcm.ns.views.sol.heal_ns_view import HealNSView +from lcm.ns.views.sol.health_check import HealthCheckView urlpatterns = [ # API will be deprecated in the future release @@ -56,7 +57,10 @@ urlpatterns = [ url(r'^api/nslcm/v1/ns_instances/(?P<ns_instance_id>[0-9a-zA-Z_-]+)/terminate$', TerminateNsView.as_view()), url(r'^api/nslcm/v1/ns_lcm_op_occs/(?P<lcmopoccid>[0-9a-zA-Z_-]+)$', QuerySingleNsLcmOpOcc.as_view()), url(r'^api/nslcm/v1/subscriptions$', SubscriptionsView.as_view()), - url(r'^api/nslcm/v1/ns_lcm_op_occs$', QueryMultiNsLcmOpOccs.as_view()) + url(r'^api/nslcm/v1/ns_lcm_op_occs$', QueryMultiNsLcmOpOccs.as_view()), + + # health check + url(r'^api/nslcm/v1/health_check$', HealthCheckView.as_view()) ] diff --git a/lcm/ns/views/sol/health_check.py b/lcm/ns/views/sol/health_check.py new file mode 100644 index 00000000..863ef597 --- /dev/null +++ b/lcm/ns/views/sol/health_check.py @@ -0,0 +1,24 @@ +# Copyright (c) 2018, CMCC Technologies Co., Ltd. + +# 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. + +import logging + +from rest_framework.views import APIView + +logger = logging.getLogger(__name__) + + +class HealthCheckView(APIView): + logger.debug("Health check.") + pass |