summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lcm/lcm/pub/vimapi/adaptor.py61
-rw-r--r--lcm/lcm/pub/vimapi/api.py4
2 files changed, 65 insertions, 0 deletions
diff --git a/lcm/lcm/pub/vimapi/adaptor.py b/lcm/lcm/pub/vimapi/adaptor.py
index c7b6818e..b4334e86 100644
--- a/lcm/lcm/pub/vimapi/adaptor.py
+++ b/lcm/lcm/pub/vimapi/adaptor.py
@@ -11,3 +11,64 @@
# 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
+import json
+import traceback
+import sys
+
+from lcm.pub.utils.values import ignore_case_get
+from . import api
+from .exceptions import VimException
+
+logger = logging.getLogger(__name__)
+
+RES_EXIST, RES_NEW = 0, 1
+NET_PRIVATE, NET_SHSRED = 0, 1
+VLAN_TRANSPARENT_NO, VLAN_TRANSPARENT_YES = 0, 1
+
+def create_vim_res(data, do_notify, do_rollback):
+ try:
+ for vol in ignore_case_get(data, "volume_storages"):
+ create_volume(vol, do_notify, 10)
+ for network in ignore_case_get(data, "vls"):
+ create_network(network, do_notify, 20)
+
+ except VimException as e:
+ logger.error(e.message)
+ do_rollback(e.message)
+ except:
+ logger.error(traceback.format_exc())
+ do_rollback(str(sys.exc_info()))
+
+def create_volume(vol, do_notify, progress)
+ param = {
+ "tenant": vol["properties"]["location_info"]["tenant"],
+ "volumeName": vol["properties"]["volume_name"],
+ "volumeSize": int(ignore_case_get(vol["properties"], "size", "0")),
+ "imageName": ignore_case_get(vol, "image_file"),
+ "volumeType": ignore_case_get(vol["properties"], "custom_volume_type")
+ }
+ vim_id = vol["properties"]["location_info"]["vimid"],
+ ret = api.create_volume(vim_id, param)
+ do_notify(progress, ret)
+
+def create_network(network, do_notify, progress):
+ param = {
+ "tenant": network["properties"]["location_info"]["tenant"],
+ "networkName": network["properties"]["network_name"],
+ "shared": NET_PRIVATE,
+ "networkType": network["properties"]["network_type"],
+ "physicalNetwork": ignore_case_get(network["properties"], "physical_network")
+ }
+ vlan_transparent = ignore_case_get(network["properties"], "vlan_transparent")
+ if vlan_transparent:
+ param["vlanTransparent"] = VLAN_TRANSPARENT_YES
+ segmentation_id = ignore_case_get(network["properties"], "segmentation_id")
+ if segmentation_id:
+ param["segmentationId"] = int(segmentation_id)
+ vim_id = network["properties"]["location_info"]["vimid"],
+ ret = api.create_network(vim_id, param)
+ do_notify(progress, ret)
+
+
diff --git a/lcm/lcm/pub/vimapi/api.py b/lcm/lcm/pub/vimapi/api.py
index 00a8735e..15229ed6 100644
--- a/lcm/lcm/pub/vimapi/api.py
+++ b/lcm/lcm/pub/vimapi/api.py
@@ -12,12 +12,16 @@
# See the License for the specific language governing permissions and
# limitations under the License.
+import json
+
from lcm.pub.utils.restcall import req_by_msb
from .exceptions import VimException
VIM_DRIVER_BASE_URL = "openoapi/vimdriver/v1"
def call(vim_id, res, method, data=''):
+ if data and not isinstance(a, (str, unicode)):
+ data = json.JSONEncoder().encode(data)
url = "%/%s/%s" % (VIM_DRIVER_BASE_URL, vim_id, res)
ret = req_by_msb(url, method, data)
if ret[0] > 0: