2 * Copyright 2016 Huawei Technologies Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.onap.vfc.nfvo.vnfm.gvnfm.jujuvnfmadapter.service.process;
19 import java.util.List;
20 import java.util.UUID;
22 import org.apache.commons.collections.CollectionUtils;
23 import org.apache.commons.lang3.StringUtils;
24 import org.onap.vfc.nfvo.vnfm.gvnfm.jujuvnfmadapter.common.SwitchController;
25 import org.onap.vfc.nfvo.vnfm.gvnfm.jujuvnfmadapter.common.servicetoken.VnfmRestfulUtil;
26 import org.onap.vfc.nfvo.vnfm.gvnfm.jujuvnfmadapter.service.constant.Constant;
27 import org.onap.vfc.nfvo.vnfm.gvnfm.jujuvnfmadapter.service.constant.UrlConstant;
28 import org.onap.vfc.nfvo.vnfm.gvnfm.jujuvnfmadapter.service.entity.JujuVnfmInfo;
29 import org.onap.vfc.nfvo.vnfm.gvnfm.jujuvnfmadapter.service.entity.JujuVnfmInfoExample;
30 import org.onap.vfc.nfvo.vnfm.gvnfm.jujuvnfmadapter.service.mapper.JujuVnfmInfoMapper;
31 import org.python.jline.internal.Log;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
35 import net.sf.json.JSONArray;
36 import net.sf.json.JSONException;
37 import net.sf.json.JSONObject;
40 * Provide function of resource for VNFM.
46 * @version NFVO 0.5 Aug 25, 2016
48 public class VnfResourceMgr {
50 private static final Logger LOG = LoggerFactory.getLogger(VnfResourceMgr.class);
52 private JujuVnfmInfoMapper jujuVnfmInfoMapper;
55 * @return Returns the jujuVnfmInfoMapper.
57 public JujuVnfmInfoMapper getJujuVnfmInfoMapper() {
58 return jujuVnfmInfoMapper;
62 * @param jujuVnfmInfoMapper The jujuVnfmInfoMapper to set.
64 public void setJujuVnfmInfoMapper(JujuVnfmInfoMapper jujuVnfmInfoMapper) {
65 this.jujuVnfmInfoMapper = jujuVnfmInfoMapper;
69 * Provide function of grant resource for VNFM.
76 public JSONObject grantVnfResource(JSONObject compute, String vnfId) {
77 LOG.warn("function=grantVnfResource, msg=call LCM to grant vnf resource, params: {}", compute);
78 JSONObject resultJson = new JSONObject();
79 resultJson.put("retCode", Constant.REST_FAIL);
81 if(SwitchController.isDebugModel()){
82 resultJson.put("retCode", Constant.REST_SUCCESS);
83 resultJson.put("data", "{'mock_result':true}");
86 JujuVnfmInfo vnfmInfo = findByVnfId(vnfId);
87 String vimId = getVimId(vnfmInfo);
88 JSONObject reqParams = this.buildGrantReq(vimId, vnfId,compute);
90 resultJson = VnfmRestfulUtil.sendReqToApp(UrlConstant.RES_VNF, Constant.POST, reqParams);
91 } catch(JSONException e) {
92 LOG.error("function=grantVnfResource, msg=parse params occoured JSONException e={}.", e);
93 resultJson.put("errorMsg", "params parse exception");
104 "resourceDefinitionId": "11111",
105 "resourceTemplate": {
106 "VirtualComputeDescriptor": {
111 "virtualMemSize": 1//mem in MB
114 "VirtualStorageDescriptor": {
116 "sizeOfStorage": 111, //disk in GB
117 "swImageDescriptor": ""
125 "removeResource": [],
126 "additionalParam": {}
134 private JSONObject buildGrantReq(String vimId, String vnfInstanceId,JSONObject compute){
135 JSONObject obj = new JSONObject();
136 obj.put("vnfInstanceId", vnfInstanceId);
137 obj.put("vimId", vimId);
138 obj.put("additionalParam", new JSONObject());
139 JSONArray array = new JSONArray();
140 JSONObject resource = new JSONObject();
141 resource.put("resourceDefinitionId", UUID.randomUUID().toString());
142 resource.put("type", "vdu");
143 resource.put("vdu", "vdu_name");//vdu_name?
144 JSONObject resourceTemplate = new JSONObject();
145 JSONObject virtualComputeDescriptor = new JSONObject();
146 JSONObject virtualCpu = new JSONObject();
147 JSONObject virtualMemory = new JSONObject();
148 virtualCpu.put("numVirtualCpu", compute.get("cpu") !=null?compute.get("cpu"):0);
149 virtualMemory.put("virtualMemSize", compute.get("mem") !=null?compute.get("mem"):0);
150 virtualComputeDescriptor.put("virtualCpu", virtualCpu);
151 virtualComputeDescriptor.put("virtualMemory", virtualMemory);
152 JSONObject virtualStorageDescriptor = new JSONObject();
153 virtualStorageDescriptor.put("typeOfStorage", "");
154 virtualStorageDescriptor.put("swImageDescriptor", "");
155 virtualStorageDescriptor.put("sizeOfStorage", compute.get("disk") !=null?compute.get("disk"):0);
156 resourceTemplate.put("VirtualComputeDescriptor", virtualComputeDescriptor);
157 resourceTemplate.put("VirtualStorageDescriptor", virtualStorageDescriptor);
158 resource.put("resourceTemplate", resourceTemplate);
160 if("addResource".equals(compute.getString("action"))){
161 obj.put("addResource", array);
162 obj.put("removeResource", new JSONArray());
164 obj.put("removeResource", array);
165 obj.put("addResource", new JSONArray());
167 Log.info("buildGrantReq->result="+obj);
173 * “vnfInstanceName”:”vFW”,
174 * “vnfPackageId”:”1”,
175 * “vnfDescriptorId”:”1”,
176 * “vnfInstanceDescription”:”vFW_1”,
177 * “extVirtualLinks”:[
179 * ”vlInstanceId”:”1”,
180 * “resourceId”:”1246”,
189 * "protocolType":”http”
192 * "tenant":”tenant_vCPE”,
194 * "password":”vCPE_321”
196 * “interfaceEndpoint”:”http://10.43.21.105:80/”
200 * “additionalParam”:{
209 private String getVimId(JujuVnfmInfo vnfmInfo) {
211 if(vnfmInfo != null && StringUtils.isNotBlank(vnfmInfo.getExtend())){
212 JSONObject json = JSONObject.fromObject(vnfmInfo.getExtend());
213 JSONObject extVirtualLinkLink = json.getJSONArray("extVirtualLinks").getJSONObject(0);
214 return extVirtualLinkLink.getJSONObject("vim").getString("vimid");
216 } catch(Exception e) {
217 LOG.error("vnfmInfo.getExtend() format error!please check it",e);
223 * findByVnfId from db
230 private JujuVnfmInfo findByVnfId(String vnfId) {
231 JujuVnfmInfoExample example = new JujuVnfmInfoExample();
232 example.createCriteria().andVnfIdEqualTo(vnfId);
233 List<JujuVnfmInfo> list = jujuVnfmInfoMapper.selectByExample(example);
234 if(CollectionUtils.isNotEmpty(list) && !list.isEmpty()) {