Add network adaptor of vimdriver
authorfujinhua <fu.jinhua@zte.com.cn>
Sun, 12 Feb 2017 05:01:31 +0000 (13:01 +0800)
committerfujinhua <fu.jinhua@zte.com.cn>
Sun, 12 Feb 2017 05:01:31 +0000 (13:01 +0800)
Change-Id: I33d415033461e5bc164ab3d4f0abda0686d894e4
Issue-Id: GVNFM-30
Signed-off-by: fujinhua <fu.jinhua@zte.com.cn>
lcm/lcm/pub/vimapi/adaptor.py
lcm/lcm/pub/vimapi/api.py

index c7b6818..b4334e8 100644 (file)
 # 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)
+    
+
index 00a8735..15229ed 100644 (file)
 # 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: