2 * Copyright 2016-2017 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.svnfm.vnfmadapter.service.process;
19 import java.io.IOException;
21 import java.util.concurrent.ConcurrentHashMap;
23 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.ResultRequestUtil;
24 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmUtil;
25 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.adapter.impl.AdapterResourceManager;
26 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
27 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.csm.vnf.VnfMgrVnfm;
28 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.dao.inf.VnfmDao;
29 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.entity.Vnfm;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
33 import net.sf.json.JSONException;
34 import net.sf.json.JSONObject;
37 * Provide function for instantiate or terminate VNF
41 * @version VFC 1.0 Aug 24, 2016
45 private static final Logger LOG = LoggerFactory.getLogger(VnfMgr.class);
47 private VnfmDao vnfmDao;
49 public void setVnfmDao(VnfmDao vnfmDao) {
50 this.vnfmDao = vnfmDao;
58 * "vnfInstanceId":"5",
61 * "numberOfSteps":"1",
62 * "additionalParam":{}
65 * @param vnfInstanceId
68 public JSONObject scaleVNF(JSONObject vnfObject, String vnfmId, String vnfInstanceId) {
69 JSONObject restJson = new JSONObject();
70 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
73 if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
77 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
78 LOG.info("vnfm info:" + vnfmObjcet);
79 if(vnfmObjcet.isNullObject()) {
80 LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId=" + vnfmId);
83 restJson = (new VnfMgrVnfm()).scaleVnf(vnfObject, vnfmObjcet, vnfmId, vnfInstanceId);
84 } catch(JSONException e) {
85 LOG.error("function=scaleVNF, msg=JSONException occurs, e={}.", e);
92 * Provide function for instantiate VNF
100 public JSONObject addVnf(JSONObject vnfObject, String vnfmId) {
101 JSONObject restJson = new JSONObject();
102 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
105 if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
109 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
111 if(vnfmObjcet.isNullObject()) {
115 Map<String, String> conMap = new ConcurrentHashMap<>(Constant.DEFAULT_COLLECTION_SIZE);
116 conMap.put("csarid", vnfObject.getString("vnfPackageId"));
117 conMap.put("vnfmid", vnfmId);
118 conMap.put("vnfDescriptorId", vnfObject.getString("vnfDescriptorId"));
120 JSONObject resObjcet = (new AdapterResourceManager()).uploadVNFPackage(null, conMap);
122 if(resObjcet.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
126 JSONObject csmBody = transferVnfBody(vnfObject, resObjcet, vnfmId);
127 restJson = (new VnfMgrVnfm()).createVnf(csmBody, vnfmObjcet);
128 saveVnfInfo(restJson, resObjcet);
129 } catch(JSONException e) {
130 LOG.error("function=addVnf, msg=JSONException occurs, e={}.", e);
137 * Provide function for terminate VNF
146 public JSONObject deleteVnf(String vnfId, String vnfmId, JSONObject vnfObject) {
147 LOG.warn("function=deleteVnf ,msg=enter to delete a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
148 JSONObject restJson = new JSONObject();
149 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
151 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
152 if(vnfmObjcet.isNullObject()) {
153 LOG.error("function=deleteVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
157 restJson = (new VnfMgrVnfm()).removeVnf(vnfmObjcet, vnfId, vnfObject);
158 } catch(JSONException e) {
159 LOG.error("function=deleteVnf, msg=JSONException occurs, e={}.", e);
165 * Provide function for get VNF
173 public JSONObject getVnf(String vnfId, String vnfmId) throws IOException {
174 LOG.warn("function=getVnf ,msg=enter to get a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
175 JSONObject restJson = new JSONObject();
176 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
178 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
179 if(vnfmObjcet.isNullObject()) {
180 LOG.error("function=getVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
184 restJson = (new VnfMgrVnfm()).getVnf(vnfmObjcet, vnfId);
185 JSONObject ipObj = (new VnfMgrVnfm()).getIp(vnfmObjcet, vnfId);
187 return restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL ? restJson : getVnfBody(restJson, ipObj);
189 } catch(JSONException e) {
190 LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
191 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
196 private JSONObject getVnfBody(JSONObject restJson, JSONObject ipObj) {
198 JSONObject vnfInfoJson = new JSONObject();
199 JSONObject basicInfoJson = new JSONObject();
201 JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
203 basicInfoJson.put("vnfInstanceId", retJson.getString("vnf_id"));
204 basicInfoJson.put("vnfInstanceName", retJson.getString("vnf_name"));
205 basicInfoJson.put("vnfInstanceDescription", "");
207 basicInfoJson.put(Constant.VNFDID, retJson.getString("vnfd_id"));
208 basicInfoJson.put("vnfdPackageId", retJson.getString("vnfd_id"));
209 basicInfoJson.put("version", "1.0");
210 basicInfoJson.put("vnfProvider", "hw");
211 basicInfoJson.put("vnfType", retJson.get("vnf_type"));
212 basicInfoJson.put("vnfStatus", retJson.getString(Constant.STATUS));
213 if(ipObj.getInt(Constant.RETCODE) == Constant.REST_SUCCESS) {
214 basicInfoJson.put("ipInfo", ipObj.getJSONObject("data"));
216 vnfInfoJson.put("vnfInfo", basicInfoJson);
217 vnfInfoJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
219 } catch(JSONException e) {
220 LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
221 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
223 } catch(IndexOutOfBoundsException e) {
224 LOG.error("function=getVnf, msg=IndexOutOfBoundsException occurs, e={}.", e);
225 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
230 @SuppressWarnings("unchecked")
231 private JSONObject transferVnfBody(JSONObject vnfObject, JSONObject resObject, String vnfmId) {
232 JSONObject restJson = new JSONObject();
233 JSONObject vappIfno = new JSONObject();
234 restJson.put("vnfd_id", resObject.getString(Constant.VNFDID));
235 restJson.put("plan_id", resObject.getOrDefault("planId", ""));
236 restJson.put("plan_name", resObject.getOrDefault("planName", ""));
237 restJson.put("vapp_name", vnfObject.get("vnfInstanceName"));
238 restJson.put("project_id", vnfmId);
239 restJson.put("parameters", resObject.getJSONObject("parameters"));
240 if(resObject.containsKey("emsUuid")) {
241 restJson.put("emsUuid", resObject.getString("emsUuid"));
243 restJson.put("nfvo_id", "");
244 restJson.put("location", "");
245 restJson.put("vnfm_id", vnfmId);
246 vappIfno.put("vapp_info", restJson);
251 * Provide function for get job
259 public JSONObject getJob(String jobId, String vnfmId) {
260 LOG.warn("function=getJob ,msg=enter to get a job, vnfId:{}", jobId);
261 JSONObject restJson = new JSONObject();
262 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
264 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
265 if(vnfmObjcet.isNullObject()) {
266 LOG.error("function=getJob, msg=vnfm not exists, vnfmId: {}", vnfmId);
270 restJson = (new VnfMgrVnfm()).getJob(vnfmObjcet, jobId);
272 } catch(JSONException e) {
273 LOG.error("function=getJob, msg=JSONException occurs, e={}.", e);
274 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
280 * Provide function for save vnfInfo
287 public void saveVnfInfo(JSONObject vnfObject, JSONObject resObject) {
288 LOG.warn("function=saveVnfInfo , vnfObject:{}", vnfObject);
289 if(vnfObject.getInt(Constant.RETCODE) == Constant.REST_SUCCESS) {
290 Vnfm info = new Vnfm();
291 info.setId(vnfObject.getJSONObject("data").getString("vnfInstanceId"));
292 info.setVersion(resObject.getString("vnfdVersion"));
293 info.setVnfdId(resObject.getString(Constant.VNFDID));
294 info.setVnfPackageId("");
296 vnfmDao.insertVnfm(info);
297 } catch(Exception e) {
298 LOG.error("function=saveVnfInfo, msg=ServiceException occurs, e={}.", e);
307 * @param vnfInstanceId
312 public JSONObject healVnf(JSONObject jsonObject, String vnfInstanceId, String vnfmId) {
313 JSONObject restJson = new JSONObject();
314 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
316 if(jsonObject.isNullObject() || jsonObject.isEmpty()) {
320 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
321 LOG.info("vnfm info:" + vnfmObjcet);
322 if(vnfmObjcet.isNullObject()) {
323 LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId=" + vnfmId);
326 restJson = (new VnfMgrVnfm()).healVnf(jsonObject, vnfmObjcet, vnfmId, vnfInstanceId);
330 public JSONObject getJobFromVnfm(String jobId, String vnfmId) {
331 LOG.warn("function=getJobFromVnfm, jobId:{}, vnfmId:{}", jobId, vnfmId);
332 JSONObject restJson = new JSONObject();
333 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
334 if(vnfmObjcet.isNullObject()) {
335 LOG.error("function=getJobFromVnfm, msg=vnfm not exists, vnfmId: {}", vnfmId);
338 restJson = (new VnfMgrVnfm()).getJobFromVnfm(vnfmObjcet, jobId);
342 public String transferToLcm(JSONObject restJson) {
343 LOG.warn("function=transferToLcm, restJson: {}", restJson);
344 JSONObject responseJson = new JSONObject();
345 JSONObject jobInfoJson = new JSONObject();
346 JSONObject jobInfo = restJson.getJSONObject("data").getJSONObject("job_info");
347 jobInfoJson.put("jobId", jobInfo.getString("job_id"));
348 responseJson.put("progress", jobInfo.getString("task_progress_rate"));
349 responseJson.put("status", jobInfo.getString("task_status"));
350 responseJson.put("errorCode", jobInfo.getString("error_code"));
351 responseJson.put("responseId", jobInfo.getString("task_progress_rate"));
352 jobInfoJson.put("responsedescriptor", responseJson);
353 LOG.warn("function=getJobBody, jobInfoJson: {}", jobInfoJson);
354 return jobInfoJson.toString();
357 public JSONObject getVmsFromVnfm(String vnfmId, String vnfInstanceId) {
358 JSONObject restJson = new JSONObject();
359 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
360 if(vnfmObjcet.isNullObject()) {
361 LOG.error("function=getVmsFromVnfm, msg=vnfm not exists, vnfmId: {}", vnfmId);
362 restJson.put("message", "vnfm not exists");
366 if(vnfInstanceId == null) {
367 url = "/v2/vapps/instances/query/vms";
369 url = String.format("/v2/vapps/instances/%s/vms", vnfInstanceId);
371 restJson = ResultRequestUtil.call(vnfmObjcet, url, Constant.GET, null, Constant.CERTIFICATE);
372 LOG.info("function=getVmsFromVnfm, restJson: {}", restJson);