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.apache.commons.lang3.StringUtils;
24 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.ResultRequestUtil;
25 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmUtil;
26 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.adapter.impl.AdapterResourceManager;
27 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
28 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.csm.vnf.VnfMgrVnfm;
29 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.dao.inf.VnfmDao;
30 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.entity.Vnfm;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
34 import net.sf.json.JSONException;
35 import net.sf.json.JSONObject;
38 * Provide function for instantiate or terminate VNF
42 * @version VFC 1.0 Aug 24, 2016
46 private static final Logger LOG = LoggerFactory.getLogger(VnfMgr.class);
48 private VnfmDao vnfmDao;
50 public void setVnfmDao(VnfmDao vnfmDao) {
51 this.vnfmDao = vnfmDao;
54 private String configedVduType;
58 * @param configedVduType The configedVduType to set.
60 public void setConfigedVduType(String configedVduType) {
61 this.configedVduType = configedVduType;
69 * "vnfInstanceId":"5",
72 * "numberOfSteps":"1",
73 * "additionalParam":{}
76 * @param vnfInstanceId
79 public JSONObject scaleVNF(JSONObject vnfObject, String vnfmId, String vnfInstanceId) {
80 JSONObject restJson = new JSONObject();
81 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
84 if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
88 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
89 LOG.info("vnfm info:" + vnfmObjcet);
90 if(vnfmObjcet.isNullObject()) {
91 LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId=" + vnfmId);
94 if(StringUtils.isNotEmpty(configedVduType)) {
95 vnfObject.put("configedVduType", configedVduType);
97 restJson = (new VnfMgrVnfm()).scaleVnf(vnfObject, vnfmObjcet, vnfmId, vnfInstanceId);
98 } catch(JSONException e) {
99 LOG.error("function=scaleVNF, msg=JSONException occurs, e={}.", e);
106 * Provide function for instantiate VNF
114 public JSONObject addVnf(JSONObject vnfObject, String vnfmId) {
115 JSONObject restJson = new JSONObject();
116 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
119 if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
123 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
125 if(vnfmObjcet.isNullObject()) {
129 Map<String, String> conMap = new ConcurrentHashMap<>(Constant.DEFAULT_COLLECTION_SIZE);
130 conMap.put("csarid", vnfObject.getString("vnfPackageId"));
131 conMap.put("vnfmid", vnfmId);
132 conMap.put("vnfDescriptorId", vnfObject.getString("vnfDescriptorId"));
134 JSONObject resObjcet = (new AdapterResourceManager()).uploadVNFPackage(null, conMap);
136 if(resObjcet.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
140 JSONObject csmBody = transferVnfBody(vnfObject, resObjcet, vnfmId);
141 restJson = (new VnfMgrVnfm()).createVnf(csmBody, vnfmObjcet);
142 saveVnfInfo(restJson, resObjcet);
143 } catch(JSONException e) {
144 LOG.error("function=addVnf, msg=JSONException occurs, e={}.", e);
151 * Provide function for terminate VNF
160 public JSONObject deleteVnf(String vnfId, String vnfmId, JSONObject vnfObject) {
161 LOG.warn("function=deleteVnf ,msg=enter to delete a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
162 JSONObject restJson = new JSONObject();
163 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
165 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
166 if(vnfmObjcet.isNullObject()) {
167 LOG.error("function=deleteVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
171 restJson = (new VnfMgrVnfm()).removeVnf(vnfmObjcet, vnfId, vnfObject);
172 } catch(JSONException e) {
173 LOG.error("function=deleteVnf, msg=JSONException occurs, e={}.", e);
179 * Provide function for get VNF
187 public JSONObject getVnf(String vnfId, String vnfmId) throws IOException {
188 LOG.warn("function=getVnf ,msg=enter to get a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
189 JSONObject restJson = new JSONObject();
190 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
192 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
193 if(vnfmObjcet.isNullObject()) {
194 LOG.error("function=getVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
198 restJson = (new VnfMgrVnfm()).getVnf(vnfmObjcet, vnfId);
199 JSONObject ipObj = (new VnfMgrVnfm()).getIp(vnfmObjcet, vnfId);
201 return restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL ? restJson : getVnfBody(restJson, ipObj);
203 } catch(JSONException e) {
204 LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
205 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
210 private JSONObject getVnfBody(JSONObject restJson, JSONObject ipObj) {
212 JSONObject vnfInfoJson = new JSONObject();
213 JSONObject basicInfoJson = new JSONObject();
215 JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
217 basicInfoJson.put("vnfInstanceId", retJson.getString("vnf_id"));
218 basicInfoJson.put("vnfInstanceName", retJson.getString("vnf_name"));
219 basicInfoJson.put("vnfInstanceDescription", "");
221 basicInfoJson.put(Constant.VNFDID, retJson.getString("vnfd_id"));
222 basicInfoJson.put("vnfdPackageId", retJson.getString("vnfd_id"));
223 basicInfoJson.put("version", "1.0");
224 basicInfoJson.put("vnfProvider", "hw");
225 basicInfoJson.put("vnfType", retJson.get("vnf_type"));
226 basicInfoJson.put("vnfStatus", retJson.getString(Constant.STATUS));
227 if(ipObj.getInt(Constant.RETCODE) == Constant.REST_SUCCESS) {
228 basicInfoJson.put("ipInfo", ipObj.getJSONObject("data"));
230 vnfInfoJson.put("vnfInfo", basicInfoJson);
231 vnfInfoJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
233 } catch(JSONException e) {
234 LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
235 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
237 } catch(IndexOutOfBoundsException e) {
238 LOG.error("function=getVnf, msg=IndexOutOfBoundsException occurs, e={}.", e);
239 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
244 @SuppressWarnings("unchecked")
245 private JSONObject transferVnfBody(JSONObject vnfObject, JSONObject resObject, String vnfmId) {
246 JSONObject restJson = new JSONObject();
247 JSONObject vappIfno = new JSONObject();
248 restJson.put("vnfd_id", resObject.getString(Constant.VNFDID));
249 restJson.put("plan_id", resObject.getOrDefault("planId", ""));
250 restJson.put("plan_name", resObject.getOrDefault("planName", ""));
251 restJson.put("vapp_name", vnfObject.get("vnfInstanceName"));
252 restJson.put("project_id", vnfmId);
253 restJson.put("parameters", resObject.getJSONObject("parameters"));
254 if(resObject.containsKey("emsUuid")) {
255 restJson.put("emsUuid", resObject.getString("emsUuid"));
257 restJson.put("nfvo_id", "");
258 restJson.put("location", "");
259 restJson.put("vnfm_id", vnfmId);
260 vappIfno.put("vapp_info", restJson);
265 * Provide function for get job
273 public JSONObject getJob(String jobId, String vnfmId) {
274 LOG.warn("function=getJob ,msg=enter to get a job, vnfId:{}", jobId);
275 JSONObject restJson = new JSONObject();
276 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
278 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
279 if(vnfmObjcet.isNullObject()) {
280 LOG.error("function=getJob, msg=vnfm not exists, vnfmId: {}", vnfmId);
284 restJson = (new VnfMgrVnfm()).getJob(vnfmObjcet, jobId);
286 } catch(JSONException e) {
287 LOG.error("function=getJob, msg=JSONException occurs, e={}.", e);
288 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
294 * Provide function for save vnfInfo
301 public void saveVnfInfo(JSONObject vnfObject, JSONObject resObject) {
302 LOG.warn("function=saveVnfInfo , vnfObject:{}", vnfObject);
303 if(vnfObject.getInt(Constant.RETCODE) == Constant.REST_SUCCESS) {
304 Vnfm info = new Vnfm();
305 info.setId(vnfObject.getJSONObject("data").getString("vnfInstanceId"));
306 info.setVersion(resObject.getString("vnfdVersion"));
307 info.setVnfdId(resObject.getString(Constant.VNFDID));
308 info.setVnfPackageId("");
310 vnfmDao.insertVnfm(info);
311 } catch(Exception e) {
312 LOG.error("function=saveVnfInfo, msg=ServiceException occurs, e={}.", e);
321 * @param vnfInstanceId
326 public JSONObject healVnf(JSONObject jsonObject, String vnfInstanceId, String vnfmId) {
327 JSONObject restJson = new JSONObject();
328 restJson.put(Constant.RETCODE, Constant.REST_FAIL);
330 if(jsonObject.isNullObject() || jsonObject.isEmpty()) {
334 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
335 LOG.info("vnfm info:" + vnfmObjcet);
336 if(vnfmObjcet.isNullObject()) {
337 LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId=" + vnfmId);
340 restJson = (new VnfMgrVnfm()).healVnf(jsonObject, vnfmObjcet, vnfmId, vnfInstanceId);
344 public JSONObject getJobFromVnfm(String jobId, String vnfmId) {
345 LOG.warn("function=getJobFromVnfm, jobId:{}, vnfmId:{}", jobId, vnfmId);
346 JSONObject restJson = new JSONObject();
347 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
348 if(vnfmObjcet.isNullObject()) {
349 LOG.error("function=getJobFromVnfm, msg=vnfm not exists, vnfmId: {}", vnfmId);
352 restJson = (new VnfMgrVnfm()).getJobFromVnfm(vnfmObjcet, jobId);
356 public String transferToLcm(JSONObject restJson) {
357 LOG.warn("function=transferToLcm, restJson: {}", restJson);
358 JSONObject responseJson = new JSONObject();
359 JSONObject jobInfoJson = new JSONObject();
360 JSONObject jobInfo = restJson.getJSONObject("data").getJSONObject("job_info");
361 jobInfoJson.put("jobId", jobInfo.getString("job_id") + ":job");
362 String taskProgress = jobInfo.getString("task_progress_rate");
363 responseJson.put("progress", taskProgress);
365 int responseId = Integer.parseInt(taskProgress);
366 String taskStatus = jobInfo.getString("task_status");
367 if(taskStatus.equalsIgnoreCase("Successfully") || taskStatus.equalsIgnoreCase("finished")) {
368 responseJson.put("status", "finished");
370 } else if(taskStatus.equalsIgnoreCase("Failed")) {
371 responseJson.put("status", "error");
374 responseJson.put("status", "processing");
376 responseJson.put("errorCode", jobInfo.getString("error_code"));
377 responseJson.put("responseId", String.valueOf(responseId));
378 jobInfoJson.put("responsedescriptor", responseJson);
379 LOG.warn("function=getJobBody, jobInfoJson: {}", jobInfoJson);
380 return jobInfoJson.toString();
383 public JSONObject getVmsFromVnfm(String vnfmId, String vnfInstanceId) {
384 JSONObject restJson = new JSONObject();
385 JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
386 if(vnfmObjcet.isNullObject()) {
387 LOG.error("function=getVmsFromVnfm, msg=vnfm not exists, vnfmId: {}", vnfmId);
388 restJson.put("message", "vnfm not exists");
392 if(vnfInstanceId == null) {
393 url = "/v2/vapps/instances/query/vms";
395 url = String.format("/v2/vapps/instances/%s/vm", vnfInstanceId);
397 restJson = ResultRequestUtil.call(vnfmObjcet, url, Constant.GET, null, Constant.CERTIFICATE);
398 LOG.info("function=getVmsFromVnfm, restJson: {}", restJson);