diff options
-rw-r--r-- | lcm/lcm/pub/vimapi/adaptor.py | 61 | ||||
-rw-r--r-- | lcm/lcm/pub/vimapi/api.py | 4 |
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: |