summaryrefslogtreecommitdiffstats
path: root/multivimbroker
diff options
context:
space:
mode:
Diffstat (limited to 'multivimbroker')
-rw-r--r--multivimbroker/assembly.xml8
-rw-r--r--multivimbroker/docker/Dockerfile23
-rw-r--r--multivimbroker/docker/build_image.sh32
-rw-r--r--multivimbroker/multivimbroker/forwarder/base.py1
-rw-r--r--multivimbroker/multivimbroker/pub/config/config.py24
-rw-r--r--multivimbroker/multivimbroker/pub/msapi/extsys.py27
-rw-r--r--multivimbroker/multivimbroker/pub/utils/restcall.py17
-rw-r--r--multivimbroker/multivimbroker/pub/utils/syscomm.py18
-rw-r--r--multivimbroker/multivimbroker/settings-cover.py20
-rw-r--r--multivimbroker/multivimbroker/swagger/multivim.identity.swagger.json2
-rw-r--r--multivimbroker/multivimbroker/tests/__init__.py10
-rw-r--r--multivimbroker/multivimbroker/tests/test_urls.py26
-rw-r--r--multivimbroker/multivimbroker/urls.py22
-rw-r--r--multivimbroker/pom.xml48
-rw-r--r--multivimbroker/requirements.txt1
-rwxr-xr-xmultivimbroker/run.sh28
-rw-r--r--multivimbroker/tox.ini15
17 files changed, 241 insertions, 81 deletions
diff --git a/multivimbroker/assembly.xml b/multivimbroker/assembly.xml
index 58117d8..2fa7ebd 100644
--- a/multivimbroker/assembly.xml
+++ b/multivimbroker/assembly.xml
@@ -38,6 +38,14 @@
</includes>
</fileSet>
<fileSet>
+ <directory>docker</directory>
+ <outputDirectory>/docker</outputDirectory>
+ <includes>
+ <include>*.sh</include>
+ <include>Dockerfile</include>
+ </includes>
+ </fileSet>
+ <fileSet>
<directory>.</directory>
<outputDirectory>/</outputDirectory>
<includes>
diff --git a/multivimbroker/docker/Dockerfile b/multivimbroker/docker/Dockerfile
new file mode 100644
index 0000000..4cd71c0
--- /dev/null
+++ b/multivimbroker/docker/Dockerfile
@@ -0,0 +1,23 @@
+FROM python:2
+
+ENV MSB_ADDR "127.0.0.1"
+ENV MSB_PORT "80"
+ENV AAI_ADDR "aai.api.simpledemo.openecomp.org"
+ENV AAI_PORT "8443"
+ENV AAI_SCHEMA_VERSION "v11"
+ENV AAI_USERNAME "AAI"
+ENV AAI_PASSWORD "AAI"
+
+EXPOSE 9001
+
+# COPY ./ /opt/multivimbroker/
+RUN apt-get update && \
+ apt-get install -y unzip && \
+ cd /opt/ && \
+ wget -O multicloud-framework.zip "https://nexus.onap.org/service/local/artifact/maven/redirect?r=snapshots&g=org.onap.multicloud.framework&a=multicloud-framework&e=zip&v=LATEST" && \
+ unzip -q -o -B multicloud-framework.zip && \
+ rm -f multicloud-framework.zip && \
+ pip install -r /opt/multivimbroker/requirements.txt
+
+WORKDIR /opt/multivimbroker
+CMD /bin/sh -c /opt/multivimbroker/run.sh \ No newline at end of file
diff --git a/multivimbroker/docker/build_image.sh b/multivimbroker/docker/build_image.sh
new file mode 100644
index 0000000..73a8db6
--- /dev/null
+++ b/multivimbroker/docker/build_image.sh
@@ -0,0 +1,32 @@
+#!/bin/bash
+DIRNAME=`dirname $0`
+DOCKER_BUILD_DIR=`cd $DIRNAME/; pwd`
+echo "DOCKER_BUILD_DIR=${DOCKER_BUILD_DIR}"
+cd ${DOCKER_BUILD_DIR}
+
+BUILD_ARGS="--no-cache"
+ORG="onap"
+VERSION="1.0.0-SNAPSHOT"
+PROJECT="multicloud"
+IMAGE="framework"
+DOCKER_REPOSITORY="nexus3.onap.org:10003"
+IMAGE_NAME="${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/${IMAGE}"
+
+if [ $HTTP_PROXY ]; then
+ BUILD_ARGS+=" --build-arg HTTP_PROXY=${HTTP_PROXY}"
+fi
+if [ $HTTPS_PROXY ]; then
+ BUILD_ARGS+=" --build-arg HTTPS_PROXY=${HTTPS_PROXY}"
+fi
+
+function build_image {
+ docker build ${BUILD_ARGS} -t ${IMAGE_NAME}:${VERSION} -t ${IMAGE_NAME}:latest .
+}
+
+function push_image {
+ docker push ${IMAGE_NAME}:${VERSION}
+ docker push ${IMAGE_NAME}:latest
+}
+
+build_image
+push_image \ No newline at end of file
diff --git a/multivimbroker/multivimbroker/forwarder/base.py b/multivimbroker/multivimbroker/forwarder/base.py
index c96461a..7477842 100644
--- a/multivimbroker/multivimbroker/forwarder/base.py
+++ b/multivimbroker/multivimbroker/forwarder/base.py
@@ -53,7 +53,6 @@ class BaseHandler(object):
try:
url = getMultivimDriver(vimid, full_path=full_path)
-
except exceptions.VimBrokerException as e:
logging.exception("vimbroker exception: %s" % e)
return HttpResponse(e.content, status=e.status_code)
diff --git a/multivimbroker/multivimbroker/pub/config/config.py b/multivimbroker/multivimbroker/pub/config/config.py
index 5f340ea..72932dd 100644
--- a/multivimbroker/multivimbroker/pub/config/config.py
+++ b/multivimbroker/multivimbroker/pub/config/config.py
@@ -15,8 +15,17 @@ import os
MSB_SERVICE_IP = '127.0.0.1'
MSB_SERVICE_PORT = '10080'
+
# [ESR]
-ESR_GET_VIM_URI = "/api/extsys/v1/vims"
+# ESR_GET_VIM_URI = "/api/extsys/v1/vims"
+
+# [A&AI]
+AAI_ADDR = "aai.api.simpledemo.openecomp.org"
+AAI_PORT = "8443"
+AAI_SERVICE_URL = 'https://%s:%s/aai' % (AAI_ADDR, AAI_PORT)
+AAI_SCHEMA_VERSION = "v11"
+AAI_USERNAME = 'AAI'
+AAI_PASSWORD = 'AAI'
# [IMAGE LOCAL PATH]
ROOT_PATH = os.path.dirname(
@@ -27,19 +36,12 @@ REDIS_HOST = '127.0.0.1'
REDIS_PORT = '6379'
REDIS_PASSWD = ''
-# [mysql]
-DB_IP = "127.0.0.1"
-DB_PORT = 3306
-DB_NAME = "multivimbroker"
-DB_USER = "root"
-DB_PASSWD = "password"
-
# [register]
-REG_TO_MSB_WHEN_START = True
+REG_TO_MSB_WHEN_START = False
REG_TO_MSB_REG_URL = "/api/microservices/v1/services"
REG_TO_MSB_REG_PARAM = {
- "serviceName": "multivim",
- "version": "v1",
+ "serviceName": "multicloud",
+ "version": "v0",
"url": "/api/multicloud/v0",
"protocol": "REST",
"visualRange": "1",
diff --git a/multivimbroker/multivimbroker/pub/msapi/extsys.py b/multivimbroker/multivimbroker/pub/msapi/extsys.py
index 75959a4..2058801 100644
--- a/multivimbroker/multivimbroker/pub/msapi/extsys.py
+++ b/multivimbroker/multivimbroker/pub/msapi/extsys.py
@@ -13,26 +13,29 @@ import json
import logging
from multivimbroker.pub.exceptions import VimBrokerException
-from multivimbroker.pub.utils.restcall import req_by_msb
-from multivimbroker.pub.config.config import ESR_GET_VIM_URI
+from multivimbroker.pub.utils.restcall import get_res_from_aai
logger = logging.getLogger(__name__)
-def get_vims():
- ret = req_by_msb(ESR_GET_VIM_URI, "GET")
- if ret[0] != 0:
- logger.error("Status code is %s, detail is %s.", ret[2], ret[1])
- raise VimBrokerException(
- status_code=404, content="Failed to query VIMs from extsys.")
- return json.JSONDecoder().decode(ret[1])
+def split_vim_to_owner_region(vim_id):
+ split_vim = vim_id.split('_')
+ cloud_owner = split_vim[0]
+ cloud_region = "".join(split_vim[1:])
+ return cloud_owner, cloud_region
def get_vim_by_id(vim_id):
- ret = req_by_msb("%s/%s" % (ESR_GET_VIM_URI, vim_id), "GET")
+ cloud_owner, cloud_region = split_vim_to_owner_region(vim_id)
+ ret = get_res_from_aai("/cloud-infrastructure/cloud-regions/cloud-region"
+ "/%s/%s" % (cloud_owner, cloud_region))
if ret[0] != 0:
- logger.error("Status code is %s, detail is %s.", ret[2], ret[1])
+ logger.error("Status code is %s, detail is %s." % (ret[2], ret[1]))
raise VimBrokerException(
status_code=404,
content="Failed to query VIM with id (%s) from extsys." % vim_id)
- return json.JSONDecoder().decode(ret[1])
+ ret = json.JSONDecoder().decode(ret[1])
+ ret['type'] = ret['cloud-type']
+ ret['version'] = ret['cloud-region-version']
+ ret['vimId'] = vim_id
+ return ret
diff --git a/multivimbroker/multivimbroker/pub/utils/restcall.py b/multivimbroker/multivimbroker/pub/utils/restcall.py
index b25b389..ccdbada 100644
--- a/multivimbroker/multivimbroker/pub/utils/restcall.py
+++ b/multivimbroker/multivimbroker/pub/utils/restcall.py
@@ -16,7 +16,10 @@ import urllib2
import uuid
import httplib2
-
+from multivimbroker.pub.config.config import AAI_SCHEMA_VERSION
+from multivimbroker.pub.config.config import AAI_SERVICE_URL
+from multivimbroker.pub.config.config import AAI_USERNAME
+from multivimbroker.pub.config.config import AAI_PASSWORD
from multivimbroker.pub.config.config import MSB_SERVICE_IP, MSB_SERVICE_PORT
rest_no_auth, rest_oneway_auth, rest_bothway_auth = 0, 1, 2
@@ -100,6 +103,18 @@ def req_by_msb(resource, method, content='', headers=None):
rest_no_auth, resource, method, content, headers)
+def get_res_from_aai(resource, content=''):
+ headers = {
+ 'X-FromAppId': 'MultiCloud',
+ 'X-TransactionId': '9001',
+ 'content-type': 'application/json',
+ 'accept': 'application/json'
+ }
+ base_url = "%s/%s" % (AAI_SERVICE_URL, AAI_SCHEMA_VERSION)
+ return call_req(base_url, AAI_USERNAME, AAI_PASSWORD, rest_no_auth,
+ resource, "GET", content, headers)
+
+
def combine_url(base_url, resource):
full_url = None
if base_url.endswith('/') and resource.startswith('/'):
diff --git a/multivimbroker/multivimbroker/pub/utils/syscomm.py b/multivimbroker/multivimbroker/pub/utils/syscomm.py
index 0d0419a..cdc6480 100644
--- a/multivimbroker/multivimbroker/pub/utils/syscomm.py
+++ b/multivimbroker/multivimbroker/pub/utils/syscomm.py
@@ -37,25 +37,21 @@ def findMultivimDriver(vim=None):
if vim and vim["type"] == "openstack":
if vim["version"] == "kilo":
- multivimdriver = "multivim-kilo"
+ multivimdriver = "multicloud-kilo"
elif vim["version"] == "newton":
- multivimdriver = "multivim-newton"
+ multivimdriver = "multicloud-newton"
else:
# if vim type is openstack, use latest "newton" version as default
- multivimdriver = "multivim-newton"
+ multivimdriver = "multicloud-newton"
elif vim and vim["type"] == "vmware":
- multivimdriver = "multivim-vio"
+ multivimdriver = "multicloud-vio"
else:
raise exceptions.NotFound("Not support VIM type")
return multivimdriver
def getMultivimDriver(vimid, full_path=""):
-
- multivim = "multivim"
+ multcloud = "multicloud"
vim = get_vim_by_id(vimid)
- if vim["type"] and vim["version"]:
- pass
-
- multivimdriver = findMultivimDriver(vim=vim)
- return re.sub(multivim, multivimdriver, full_path)
+ multclouddriver = findMultivimDriver(vim=vim)
+ return re.sub(multcloud, multclouddriver, full_path)
diff --git a/multivimbroker/multivimbroker/settings-cover.py b/multivimbroker/multivimbroker/settings-cover.py
new file mode 100644
index 0000000..51b73e8
--- /dev/null
+++ b/multivimbroker/multivimbroker/settings-cover.py
@@ -0,0 +1,20 @@
+# 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.
+
+from multivimbroker.settings import * # noqa
+from multivimbroker.settings import INSTALLED_APPS
+
+INSTALLED_APPS.append('django_nose')
+
+TEST_RUNNER = 'django_nose.NoseTestSuiteRunner'
+
+NOSE_ARGS = [
+ '--with-coverage',
+ '--cover-package=multivimbroker',
+]
diff --git a/multivimbroker/multivimbroker/swagger/multivim.identity.swagger.json b/multivimbroker/multivimbroker/swagger/multivim.identity.swagger.json
index 923924e..a81b431 100644
--- a/multivimbroker/multivimbroker/swagger/multivim.identity.swagger.json
+++ b/multivimbroker/multivimbroker/swagger/multivim.identity.swagger.json
@@ -4,7 +4,7 @@
"version": "1.0.0",
"title": "MultiVIM Service rest API"
},
- "basePath": "/openoapi/multivim/v1/",
+ "basePath": "/api/multicloud/v0/",
"tags": [
{
"name": "MultiVIM services"
diff --git a/multivimbroker/multivimbroker/tests/__init__.py b/multivimbroker/multivimbroker/tests/__init__.py
new file mode 100644
index 0000000..802f3fb
--- /dev/null
+++ b/multivimbroker/multivimbroker/tests/__init__.py
@@ -0,0 +1,10 @@
+# Copyright (c) 2017 Wind River Systems, Inc.
+#
+# 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.
diff --git a/multivimbroker/multivimbroker/tests/test_urls.py b/multivimbroker/multivimbroker/tests/test_urls.py
new file mode 100644
index 0000000..71241f8
--- /dev/null
+++ b/multivimbroker/multivimbroker/tests/test_urls.py
@@ -0,0 +1,26 @@
+# 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.
+
+import json
+import mock
+import unittest
+
+from multivimbroker.pub.config import config
+from multivimbroker import urls
+
+
+class TestUrls(unittest.TestCase):
+
+ def test_request_msb(self):
+ with mock.patch("multivimbroker.pub.utils.restcall."
+ "req_by_msb") as req_by_msb:
+ urls.req_msb(True)
+ req_by_msb.assert_called_once_with(
+ config.REG_TO_MSB_REG_URL, "POST",
+ json.JSONEncoder().encode(config.REG_TO_MSB_REG_PARAM))
diff --git a/multivimbroker/multivimbroker/urls.py b/multivimbroker/multivimbroker/urls.py
index c8e0f42..7619e5a 100644
--- a/multivimbroker/multivimbroker/urls.py
+++ b/multivimbroker/multivimbroker/urls.py
@@ -10,8 +10,10 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
from django.conf.urls import include, url
-from multivimbroker.pub.config.config \
- import REG_TO_MSB_WHEN_START, REG_TO_MSB_REG_URL, REG_TO_MSB_REG_PARAM
+import json
+
+from multivimbroker.pub.config import config
+
urlpatterns = [
url(r'^', include('multivimbroker.swagger.urls')),
@@ -19,9 +21,13 @@ urlpatterns = [
url(r'^', include('multivimbroker.forwarder.urls')),
]
-# regist to MSB when startup
-if REG_TO_MSB_WHEN_START:
- import json
- from multivimbroker.pub.utils.restcall import req_by_msb
- req_by_msb(REG_TO_MSB_REG_URL, "POST",
- json.JSONEncoder().encode(REG_TO_MSB_REG_PARAM))
+
+def req_msb(request_when_start):
+ # regist to MSB when startup
+ if request_when_start:
+ from multivimbroker.pub.utils.restcall import req_by_msb
+ req_by_msb(config.REG_TO_MSB_REG_URL, "POST",
+ json.JSONEncoder().encode(config.REG_TO_MSB_REG_PARAM))
+
+
+req_msb(config.REG_TO_MSB_WHEN_START)
diff --git a/multivimbroker/pom.xml b/multivimbroker/pom.xml
index 57a49fc..cd80d6c 100644
--- a/multivimbroker/pom.xml
+++ b/multivimbroker/pom.xml
@@ -11,7 +11,9 @@
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>org.onap.oparent</groupId>
<artifactId>oparent</artifactId>
@@ -23,28 +25,28 @@
<artifactId>multicloud-framework</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
- <name>multicloud/framework</name>
+ <name>multicloud-framework</name>
<description>multivim broker</description>
<build>
- <plugins>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <configuration>
- <appendAssemblyId>false</appendAssemblyId>
- <descriptors>
- <descriptor>assembly.xml</descriptor>
- </descriptors>
- </configuration>
- <executions>
- <execution>
- <id>make-assembly</id>
- <phase>package</phase>
- <goals>
- <goal>single</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
+ <plugins>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <configuration>
+ <appendAssemblyId>false</appendAssemblyId>
+ <descriptors>
+ <descriptor>assembly.xml</descriptor>
+ </descriptors>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
</build>
-</project>
+</project> \ No newline at end of file
diff --git a/multivimbroker/requirements.txt b/multivimbroker/requirements.txt
index 6d58957..caf8687 100644
--- a/multivimbroker/requirements.txt
+++ b/multivimbroker/requirements.txt
@@ -18,6 +18,7 @@ python-glanceclient==2.5.0
python-neutronclient==6.0.0
# for unit test
+django-nose>=1.4.0
coverage==4.2
mock==2.0.0
unittest_xml_reporting==1.12.0
diff --git a/multivimbroker/run.sh b/multivimbroker/run.sh
index 3fb6e80..48b8476 100755
--- a/multivimbroker/run.sh
+++ b/multivimbroker/run.sh
@@ -1,13 +1,17 @@
#!/bin/bash
-# Copyright (c) 2017 Wind River Systems, Inc.
-#
-# 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.
-
-nohup python manage.py runserver 127.0.0.1:9001 > /dev/null &
+
+sed -i "s/MSB_SERVICE_IP =.*/MSB_SERVICE_IP = \"${MSB_ADDR}\"/g" multivimbroker/pub/config/config.py
+sed -i "s/MSB_SERVICE_PORT =.*/MSB_SERVICE_PORT = \"${MSB_PORT}\"/g" multivimbroker/pub/config/config.py
+sed -i "s/AAI_ADDR =.*/AAI_ADDR = \"${AAI_ADDR}\"/g" multivimbroker/pub/config/config.py
+sed -i "s/AAI_PORT =.*/AAI_PORT = \"${AAI_PORT}\"/g" multivimbroker/pub/config/config.py
+sed -i "s/AAI_SCHEMA_VERSION =.*/AAI_SCHEMA_VERSION = \"${AAI_SCHEMA_VERSION}\"/g" multivimbroker/pub/config/config.py
+sed -i "s/AAI_USERNAME =.*/AAI_USERNAME = \"${AAI_USERNAME}\"/g" multivimbroker/pub/config/config.py
+sed -i "s/AAI_PASSWORD =.*/AAI_PASSWORD = \"${AAI_PASSWORD}\"/g" multivimbroker/pub/config/config.py
+
+nohup python manage.py runserver 0.0.0.0:9001 2>&1 &
+
+while [ ! -f logs/runtime_multivimbroker.log ]; do
+ sleep 1
+done
+
+tail -F logs/runtime_multivimbroker.log
diff --git a/multivimbroker/tox.ini b/multivimbroker/tox.ini
index 88d43d9..4db044a 100644
--- a/multivimbroker/tox.ini
+++ b/multivimbroker/tox.ini
@@ -7,8 +7,21 @@ downloadcache = ~/cache/pip
[testenv]
deps = -r{toxinidir}/requirements.txt
-commands = coverage run --branch manage.py test multivimbroker
+commands =
+ /usr/bin/find . -type f -name "*.py[c|o]" -delete
+ python manage.py test multivimbroker
[testenv:pep8]
deps=flake8
commands=flake8
+
+[testenv:py27]
+commands =
+ {[testenv]commands}
+
+[testenv:cover]
+setenv=
+ DJANGO_SETTINGS_MODULE = multivimbroker.settings-cover
+commands =
+ coverage erase
+ {[testenv]commands}