434817e875e88fd21902c27edb277e9b0c204d2f
[vfc/nfvo/driver/vnfm/gvnfm.git] / juju / juju-vnfmadapter / Juju-vnfmadapterService / service / src / main / java / org / openo / nfvo / jujuvnfmadapter / service / process / VnfResourceMgr.java
1 /*
2  * Copyright 2016 Huawei Technologies Co., Ltd.
3  *
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
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package org.openo.nfvo.jujuvnfmadapter.service.process;
18
19 import java.util.List;
20 import java.util.UUID;
21
22 import org.apache.commons.collections.CollectionUtils;
23 import org.apache.commons.lang3.StringUtils;
24 import org.openo.nfvo.jujuvnfmadapter.common.SwitchController;
25 import org.openo.nfvo.jujuvnfmadapter.common.servicetoken.VnfmRestfulUtil;
26 import org.openo.nfvo.jujuvnfmadapter.service.constant.Constant;
27 import org.openo.nfvo.jujuvnfmadapter.service.constant.UrlConstant;
28 import org.openo.nfvo.jujuvnfmadapter.service.entity.JujuVnfmInfo;
29 import org.openo.nfvo.jujuvnfmadapter.service.entity.JujuVnfmInfoExample;
30 import org.openo.nfvo.jujuvnfmadapter.service.mapper.JujuVnfmInfoMapper;
31 import org.python.jline.internal.Log;
32 import org.slf4j.Logger;
33 import org.slf4j.LoggerFactory;
34
35 import net.sf.json.JSONArray;
36 import net.sf.json.JSONException;
37 import net.sf.json.JSONObject;
38
39 /**
40  * Provide function of resource for VNFM.
41  * <br/>
42  * <p>
43  * </p>
44  *
45  * @author
46  * @version NFVO 0.5 Aug 25, 2016
47  */
48 public class VnfResourceMgr {
49
50     private static final Logger LOG = LoggerFactory.getLogger(VnfResourceMgr.class);
51
52     private JujuVnfmInfoMapper jujuVnfmInfoMapper;
53
54     /**
55      * @return Returns the jujuVnfmInfoMapper.
56      */
57     public JujuVnfmInfoMapper getJujuVnfmInfoMapper() {
58         return jujuVnfmInfoMapper;
59     }
60
61     /**
62      * @param jujuVnfmInfoMapper The jujuVnfmInfoMapper to set.
63      */
64     public void setJujuVnfmInfoMapper(JujuVnfmInfoMapper jujuVnfmInfoMapper) {
65         this.jujuVnfmInfoMapper = jujuVnfmInfoMapper;
66     }
67
68     /**
69      * Provide function of grant resource for VNFM.
70      * <br/>
71      *
72      * @param vnfId
73      * @return
74      * @since NFVO 0.5
75      */
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);
80         try {
81             if(SwitchController.isDebugModel()){
82                 resultJson.put("retCode", Constant.REST_SUCCESS); 
83                 resultJson.put("data", "{'mock_result':true}"); 
84                 return resultJson;
85             }
86             JujuVnfmInfo vnfmInfo = findByVnfId(vnfId);
87             String vimId = getVimId(vnfmInfo);
88             JSONObject reqParams = this.buildGrantReq(vimId, vnfId,compute);
89             
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");
94         }
95
96         return resultJson;
97     }
98     
99     /**
100      * {
101     "vnfInstanceId": 1,
102     "addResource": [
103         {
104             "resourceDefinitionId": "11111",
105             "resourceTemplate": {
106                 "VirtualComputeDescriptor": {
107                     "virtualCpu": {
108                         "numVirtualCpu": 1
109                     },
110                     "virtualMemory": {
111                         "virtualMemSize": 1//mem in MB
112                     }
113                 },
114                 "VirtualStorageDescriptor": {
115                     "typeOfStorage": "",
116                     "sizeOfStorage": 111, //disk in GB
117                     "swImageDescriptor": ""
118                 }
119             },
120             "type": "vdu",
121             "vdu": "vdu_name"
122         }
123     ],
124     "vimId":"",
125     "removeResource": [],
126     "additionalParam": {}
127 }
128      * 
129      * <br/>
130      * 
131      * @return
132      * @since  NFVO 0.5
133      */
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);
159         array.add(resource);
160         if("addResource".equals(compute.getString("action"))){
161             obj.put("addResource", array);
162             obj.put("removeResource", new JSONArray());
163         }else{
164             obj.put("removeResource", array); 
165             obj.put("addResource", new JSONArray());
166         }
167         Log.info("buildGrantReq->result="+obj);
168         return obj;
169     }
170
171     /**
172      * {
173      * “vnfInstanceName”:”vFW”,
174      * “vnfPackageId”:”1”,
175      * “vnfDescriptorId”:”1”,
176      * “vnfInstanceDescription”:”vFW_1”,
177      * “extVirtualLinks”:[
178      * {
179      * ”vlInstanceId”:”1”,
180      * “resourceId”:”1246”,
181      * ” cpdId”:”11111”,
182      * ”vim”:
183      * {
184      * “vimInfoId”:”1”,
185      * “vimid”:”1”,
186      * “interfaceInfo”:{
187      * "vimType":”vim”,
188      * "apiVersion":”v2”,
189      * "protocolType":”http”
190      * }
191      * “accessInfo”:{
192      * "tenant":”tenant_vCPE”,
193      * "username":”vCPE”,
194      * "password":”vCPE_321”
195      * }
196      * “interfaceEndpoint”:”http://10.43.21.105:80/”
197      * }
198      * }
199      * ]
200      * “additionalParam”:{
201      * ……
202      * }
203      * }
204      * <br/>
205      * 
206      * @return
207      * @since NFVO 0.5
208      */
209     private String getVimId(JujuVnfmInfo vnfmInfo) {
210         try {
211             if(vnfmInfo != null && StringUtils.isNotBlank(vnfmInfo.getExtend())){
212                 JSONObject json =  JSONObject.fromObject(vnfmInfo.getExtend());
213                 JSONObject extVirtualLinkLink = json.getJSONArray("extVirtualLinks").getJSONObject(0);
214                 String vimId = extVirtualLinkLink.getJSONObject("vim").getString("vimid");
215                 return vimId;
216             }
217         } catch(Exception e) {
218             LOG.error("vnfmInfo.getExtend() format error!please check it",e);
219         }
220        return null;
221     }
222
223     /**
224      * findByVnfId from db
225      * <br/>
226      * 
227      * @param vnfId
228      * @return
229      * @since NFVO 0.5
230      */
231     private JujuVnfmInfo findByVnfId(String vnfId) {
232         JujuVnfmInfoExample example = new JujuVnfmInfoExample();
233         example.createCriteria().andVnfIdEqualTo(vnfId);
234         List<JujuVnfmInfo> list = jujuVnfmInfoMapper.selectByExample(example);
235         if(CollectionUtils.isNotEmpty(list) && !list.isEmpty()) {
236             return list.get(0);
237         }
238         return null;
239     }
240 }