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;
 
  20 import java.util.concurrent.ConcurrentHashMap;
 
  22 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.ResultRequestUtil;
 
  23 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.common.VnfmUtil;
 
  24 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.adapter.impl.AdapterResourceManager;
 
  25 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant.Constant;
 
  26 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.csm.vnf.VnfMgrVnfm;
 
  27 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.dao.inf.VnfmDao;
 
  28 import org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.entity.Vnfm;
 
  29 import org.slf4j.Logger;
 
  30 import org.slf4j.LoggerFactory;
 
  32 import net.sf.json.JSONException;
 
  33 import net.sf.json.JSONObject;
 
  36  * Provide function for instantiate or terminate VNF
 
  40  * @version VFC 1.0 Aug 24, 2016
 
  44     private static final Logger LOG = LoggerFactory.getLogger(VnfMgr.class);
 
  46     private VnfmDao vnfmDao;
 
  48     public void setVnfmDao(VnfmDao vnfmDao) {
 
  49         this.vnfmDao = vnfmDao;
 
  57      *            "vnfInstanceId":"5",
 
  60      *            "numberOfSteps":"1",
 
  61      *            "additionalParam":{}
 
  64      * @param vnfInstanceId
 
  67     public JSONObject scaleVNF(JSONObject vnfObject, String vnfmId, String vnfInstanceId) {
 
  68         JSONObject restJson = new JSONObject();
 
  69         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
  72             if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
 
  76             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
  77             LOG.info("vnfm info:" + vnfmObjcet);
 
  78             if(vnfmObjcet.isNullObject()) {
 
  79                 LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId=" + vnfmId);
 
  82             restJson = (new VnfMgrVnfm()).scaleVnf(vnfObject, vnfmObjcet, vnfmId, vnfInstanceId);
 
  83         } catch(JSONException e) {
 
  84             LOG.error("function=scaleVNF, msg=JSONException occurs, e={}.", e);
 
  91      * Provide function for instantiate VNF
 
  99     public JSONObject addVnf(JSONObject vnfObject, String vnfmId) {
 
 100         JSONObject restJson = new JSONObject();
 
 101         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 104             if(vnfObject.isNullObject() || vnfObject.isEmpty()) {
 
 108             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
 110             if(vnfmObjcet.isNullObject()) {
 
 114             Map<String, String> conMap = new ConcurrentHashMap<>(Constant.DEFAULT_COLLECTION_SIZE);
 
 115             conMap.put("csarid", vnfObject.getString("vnfPackageId"));
 
 116             conMap.put("vnfmid", vnfmId);
 
 117             conMap.put("vnfDescriptorId", vnfObject.getString("vnfDescriptorId"));
 
 119             JSONObject resObjcet = (new AdapterResourceManager()).uploadVNFPackage(null, conMap);
 
 121             if(resObjcet.getInt(Constant.RETCODE) == Constant.REST_FAIL) {
 
 125             JSONObject csmBody = transferVnfBody(vnfObject, resObjcet, vnfmId);
 
 126             restJson = (new VnfMgrVnfm()).createVnf(csmBody, vnfmObjcet);
 
 127             saveVnfInfo(restJson, resObjcet);
 
 128         } catch(JSONException e) {
 
 129             LOG.error("function=addVnf, msg=JSONException occurs, e={}.", e);
 
 136      * Provide function for terminate VNF
 
 145     public JSONObject deleteVnf(String vnfId, String vnfmId, JSONObject vnfObject) {
 
 146         LOG.warn("function=deleteVnf ,msg=enter to delete a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
 
 147         JSONObject restJson = new JSONObject();
 
 148         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 150             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
 151             if(vnfmObjcet.isNullObject()) {
 
 152                 LOG.error("function=deleteVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
 
 156             restJson = (new VnfMgrVnfm()).removeVnf(vnfmObjcet, vnfId, vnfObject);
 
 157         } catch(JSONException e) {
 
 158             LOG.error("function=deleteVnf, msg=JSONException occurs, e={}.", e);
 
 164      * Provide function for get VNF
 
 172     public JSONObject getVnf(String vnfId, String vnfmId) {
 
 173         LOG.warn("function=getVnf ,msg=enter to get a vnf, vnfId:{}, vnfmId:{}", vnfId, vnfmId);
 
 174         JSONObject restJson = new JSONObject();
 
 175         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 177             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
 178             if(vnfmObjcet.isNullObject()) {
 
 179                 LOG.error("function=getVnf, msg=vnfm not exists, vnfmId: {}", vnfmId);
 
 183             restJson = (new VnfMgrVnfm()).getVnf(vnfmObjcet, vnfId);
 
 185             return restJson.getInt(Constant.RETCODE) == Constant.REST_FAIL ? restJson : getVnfBody(restJson);
 
 187         } catch(JSONException e) {
 
 188             LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
 
 189             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 194     private JSONObject getVnfBody(JSONObject restJson) {
 
 196             JSONObject vnfInfoJson = new JSONObject();
 
 197             JSONObject basicInfoJson = new JSONObject();
 
 199             JSONObject retJson = restJson.getJSONArray("data").getJSONObject(0);
 
 201             basicInfoJson.put("vnfInstanceId", retJson.getString("vnf_id"));
 
 202             basicInfoJson.put("vnfInstanceName", retJson.getString("vnf_name"));
 
 203             basicInfoJson.put("vnfInstanceDescription", "");
 
 205             basicInfoJson.put(Constant.VNFDID, retJson.getString("vnfd_id"));
 
 206             basicInfoJson.put("vnfdPackageId", retJson.getString("vnfd_id"));
 
 207             basicInfoJson.put("version", "1.0");
 
 208             basicInfoJson.put("vnfProvider", "hw");
 
 209             basicInfoJson.put("vnfType", retJson.get("vnf_type"));
 
 210             basicInfoJson.put("vnfStatus", retJson.getString(Constant.STATUS));
 
 212             vnfInfoJson.put("vnfInfo", basicInfoJson);
 
 213             vnfInfoJson.put(Constant.RETCODE, Constant.REST_SUCCESS);
 
 215         } catch(JSONException e) {
 
 216             LOG.error("function=getVnf, msg=JSONException occurs, e={}.", e);
 
 217             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 219         } catch(IndexOutOfBoundsException e) {
 
 220             LOG.error("function=getVnf, msg=IndexOutOfBoundsException occurs, e={}.", e);
 
 221             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 226     @SuppressWarnings("unchecked")
 
 227     private JSONObject transferVnfBody(JSONObject vnfObject, JSONObject resObject, String vnfmId) {
 
 228         JSONObject restJson = new JSONObject();
 
 229         JSONObject vappIfno = new JSONObject();
 
 230         restJson.put("vnfd_id", resObject.getString(Constant.VNFDID));
 
 231         restJson.put("plan_id", resObject.getOrDefault("planId", ""));
 
 232         restJson.put("plan_name", resObject.getOrDefault("planName", ""));
 
 233         restJson.put("vapp_name", vnfObject.get("vnfInstanceName"));
 
 234         restJson.put("project_id", vnfmId);
 
 235         restJson.put("parameters", resObject.getJSONObject("parameters"));
 
 236         restJson.put("nfvo_id", "");
 
 237         restJson.put("location", "");
 
 238         restJson.put("vnfm_id", vnfmId);
 
 239         vappIfno.put("vapp_info", restJson);
 
 244      * Provide function for get job
 
 252     public JSONObject getJob(String jobId, String vnfmId) {
 
 253         LOG.warn("function=getJob ,msg=enter to get a job, vnfId:{}", jobId);
 
 254         JSONObject restJson = new JSONObject();
 
 255         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 257             JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
 258             if(vnfmObjcet.isNullObject()) {
 
 259                 LOG.error("function=getJob, msg=vnfm not exists, vnfmId: {}", vnfmId);
 
 263             restJson = (new VnfMgrVnfm()).getJob(vnfmObjcet, jobId);
 
 265         } catch(JSONException e) {
 
 266             LOG.error("function=getJob, msg=JSONException occurs, e={}.", e);
 
 267             restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 273      * Provide function for save vnfInfo
 
 280     public void saveVnfInfo(JSONObject vnfObject, JSONObject resObject) {
 
 281         LOG.warn("function=saveVnfInfo , vnfObject:{}", vnfObject);
 
 282         if(vnfObject.getInt(Constant.RETCODE) == Constant.REST_SUCCESS) {
 
 283             Vnfm info = new Vnfm();
 
 284             info.setId(vnfObject.getJSONObject("data").getString("vnfInstanceId"));
 
 285             info.setVersion(resObject.getString("vnfdVersion"));
 
 286             info.setVnfdId(resObject.getString(Constant.VNFDID));
 
 287             info.setVnfPackageId("");
 
 289                 vnfmDao.insertVnfm(info);
 
 290             } catch(Exception e) {
 
 291                 LOG.error("function=saveVnfInfo, msg=ServiceException occurs, e={}.", e);
 
 300      * @param vnfInstanceId
 
 305     public JSONObject healVnf(JSONObject jsonObject, String vnfInstanceId, String vnfmId) {
 
 306         JSONObject restJson = new JSONObject();
 
 307         restJson.put(Constant.RETCODE, Constant.REST_FAIL);
 
 309         if(jsonObject.isNullObject() || jsonObject.isEmpty()) {
 
 313         JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
 314         LOG.info("vnfm info:" + vnfmObjcet);
 
 315         if(vnfmObjcet.isNullObject()) {
 
 316             LOG.error("function=scaleVNF,can't find vnfm from db by vnfmId=" + vnfmId);
 
 319         restJson = (new VnfMgrVnfm()).healVnf(jsonObject, vnfmObjcet, vnfmId, vnfInstanceId);
 
 323     public JSONObject getJobFromVnfm(String jobId, String vnfmId) {
 
 324         LOG.warn("function=getJobFromVnfm, jobId:{}, vnfmId:{}", jobId, vnfmId);
 
 325         JSONObject restJson = new JSONObject();
 
 326         JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
 327         if(vnfmObjcet.isNullObject()) {
 
 328             LOG.error("function=getJobFromVnfm, msg=vnfm not exists, vnfmId: {}", vnfmId);
 
 331         restJson = (new VnfMgrVnfm()).getJobFromVnfm(vnfmObjcet, jobId);
 
 335     public String transferToLcm(JSONObject restJson) {
 
 336         LOG.warn("function=transferToLcm, restJson: {}", restJson);
 
 337         JSONObject responseJson = new JSONObject();
 
 338         JSONObject jobInfoJson = new JSONObject();
 
 339         JSONObject jobInfo = restJson.getJSONObject("data").getJSONObject("job_info");
 
 340         jobInfoJson.put("jobId", jobInfo.getString("job_id"));
 
 341         responseJson.put("progress", jobInfo.getString("task_progress_rate"));
 
 342         responseJson.put("status", jobInfo.getString("task_status"));
 
 343         responseJson.put("errorCode", jobInfo.getString("error_code"));
 
 344         responseJson.put("responseId", jobInfo.getString("task_progress_rate"));
 
 345         jobInfoJson.put("responsedescriptor", responseJson);
 
 346         LOG.warn("function=getJobBody, jobInfoJson: {}", jobInfoJson);
 
 347         return jobInfoJson.toString();
 
 350     public JSONObject getVmsFromVnfm(String vnfmId, String vnfInstanceId) {
 
 351         JSONObject restJson = new JSONObject();
 
 352         JSONObject vnfmObjcet = VnfmUtil.getVnfmById(vnfmId);
 
 353         if(vnfmObjcet.isNullObject()) {
 
 354             LOG.error("function=getVmsFromVnfm, msg=vnfm not exists, vnfmId: {}", vnfmId);
 
 355             restJson.put("message", "vnfm not exists");
 
 359         if(vnfInstanceId == null) {
 
 360             url = "/v2/vapps/instances/query/vms";
 
 362             url = String.format("/v2/vapps/instances/%s/vms", vnfInstanceId);
 
 364         restJson = ResultRequestUtil.call(vnfmObjcet, url, Constant.GET, null, Constant.CERTIFICATE);
 
 365         LOG.info("function=getVmsFromVnfm, restJson: {}", restJson);