6c332441fa96e545a68483dfdd9f987f40dc7707
[vfc/nfvo/driver/vnfm/svnfm.git] /
1 /*
2  * Copyright 2016-2017, Nokia Corporation
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 com.nokia.vfcadaptor.adaptor;
18
19 import java.io.IOException;
20 import java.util.ArrayList;
21 import java.util.List;
22
23 import org.apache.http.HttpStatus;
24 import org.apache.http.client.ClientProtocolException;
25 import org.apache.log4j.Logger;
26 import org.springframework.beans.factory.annotation.Autowired;
27 import org.springframework.stereotype.Component;
28
29 import com.nokia.vfcadaptor.catalog.inf.CatalogMgmrInf;
30 import com.nokia.vfcadaptor.cbam.bo.CBAMCreateVnfRequest;
31 import com.nokia.vfcadaptor.cbam.bo.CBAMCreateVnfResponse;
32 import com.nokia.vfcadaptor.cbam.bo.CBAMHealVnfRequest;
33 import com.nokia.vfcadaptor.cbam.bo.CBAMHealVnfResponse;
34 import com.nokia.vfcadaptor.cbam.bo.CBAMQueryVnfResponse;
35 import com.nokia.vfcadaptor.cbam.bo.CBAMScaleVnfRequest;
36 import com.nokia.vfcadaptor.cbam.bo.CBAMScaleVnfResponse;
37 import com.nokia.vfcadaptor.cbam.bo.CBAMTerminateVnfRequest;
38 import com.nokia.vfcadaptor.cbam.bo.CBAMTerminateVnfResponse;
39 import com.nokia.vfcadaptor.cbam.inf.CbamMgmrInf;
40 import com.nokia.vfcadaptor.constant.CommonConstants;
41 import com.nokia.vfcadaptor.exception.VnfmDriverException;
42 import com.nokia.vfcadaptor.nslcm.bo.NslcmGrantVnfRequest;
43 import com.nokia.vfcadaptor.nslcm.bo.NslcmGrantVnfResponse;
44 import com.nokia.vfcadaptor.nslcm.bo.VnfmInfo;
45 import com.nokia.vfcadaptor.nslcm.inf.NslcmMgmrInf;
46 import com.nokia.vfcadaptor.vnfmdriver.bo.HealVnfRequest;
47 import com.nokia.vfcadaptor.vnfmdriver.bo.HealVnfResponse;
48 import com.nokia.vfcadaptor.vnfmdriver.bo.InstantiateVnfRequest;
49 import com.nokia.vfcadaptor.vnfmdriver.bo.InstantiateVnfResponse;
50 import com.nokia.vfcadaptor.vnfmdriver.bo.OperStatusVnfResponse;
51 import com.nokia.vfcadaptor.vnfmdriver.bo.QueryVnfResponse;
52 import com.nokia.vfcadaptor.vnfmdriver.bo.ScaleVnfRequest;
53 import com.nokia.vfcadaptor.vnfmdriver.bo.ScaleVnfResponse;
54 import com.nokia.vfcadaptor.vnfmdriver.bo.TerminateVnfRequest;
55 import com.nokia.vfcadaptor.vnfmdriver.bo.TerminateVnfResponse;
56 import com.nokia.vfcadaptor.vnfmdriver.bo.entity.ResponseDescriptor;
57 import com.nokia.vfcadaptor.vnfmdriver.bo.entity.ResponseHistoryList;
58 import com.nokia.vfcadaptor.vnfmdriver.inf.VnfmDriverMgmrInf;
59
60 @Component
61 public class VnfmDriverMgmrIml implements VnfmDriverMgmrInf{
62         private Logger logger = Logger.getLogger(VnfmDriverMgmrIml.class);
63         
64         @Autowired
65         Driver2CbamRequestConverter requestConverter;
66         
67         @Autowired
68         Cbam2DriverResponseConverter responseConverter;
69         
70         @Autowired
71         private CbamMgmrInf cbamMgmr;
72         
73         @Autowired
74         private CatalogMgmrInf catalogMgmr;
75         
76         @Autowired
77         private NslcmMgmrInf nslcmMgmr;
78         
79         public InstantiateVnfResponse instantiateVnf(InstantiateVnfRequest driverRequest, String vnfmId) throws VnfmDriverException {
80                 InstantiateVnfResponse driverResponse;
81                 try {
82                         //step 1: query vnfm info
83                         VnfmInfo vnfmInfo = nslcmMgmr.queryVnfm(vnfmId);
84                         
85                         if(vnfmInfo == null || vnfmId.equalsIgnoreCase(vnfmInfo.getVnfmId()))
86                         {
87                                 throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
88                         }
89                         
90                         //step 3: create vnf
91                         CBAMCreateVnfRequest cbamRequest = requestConverter.createrqConvert(driverRequest);
92                         CBAMCreateVnfResponse cbamResponse = cbamMgmr.createVnf(cbamRequest);
93                         driverResponse = responseConverter.createspConvert(cbamResponse);
94                         
95                         String vnfInstanceId = driverResponse.getVnfInstanceId();
96                         String jobId = driverResponse.getJobId();
97                         continueInstantiateVnf(driverRequest, vnfInstanceId, jobId);
98                         
99                         
100                 } catch (Exception e) {
101                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
102                 }
103                 
104         return driverResponse;
105         }
106
107         public void continueInstantiateVnf(InstantiateVnfRequest driverRequest, String vnfInstanceId, String jobId) {
108                 InstantiateVnfContinueRunnable runnable = new InstantiateVnfContinueRunnable(driverRequest, vnfInstanceId, jobId,
109                                 nslcmMgmr, catalogMgmr, cbamMgmr, requestConverter);
110                 
111                 Thread thread = new Thread(runnable);
112                 
113                 thread.run();
114         }
115
116         public TerminateVnfResponse terminateVnf(TerminateVnfRequest driverRequest, String vnfmId, String vnfInstanceId) {
117                 TerminateVnfResponse driverResponse;
118                 try {
119                         nslcmMgmr.queryVnfm(vnfmId);
120                         driverResponse = generateTerminateVnfResponse(vnfInstanceId);
121                         continueTerminateVnf(driverRequest, vnfInstanceId);
122                         
123                 } catch (Exception e) {
124                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
125                 }
126                 
127         return driverResponse;
128         }
129
130         private TerminateVnfResponse generateTerminateVnfResponse(String vnfInstanceId) {
131                 TerminateVnfResponse response = new TerminateVnfResponse();
132                 //TODO
133                 response.setJobId("");
134                 return response;
135         }
136
137         public void continueTerminateVnf(TerminateVnfRequest driverRequest, String vnfInstanceId) {
138                 TerminateVnfContinueRunnable runnable = new TerminateVnfContinueRunnable(driverRequest, vnfInstanceId,
139                                 nslcmMgmr, cbamMgmr, requestConverter);
140                 
141                 Thread thread = new Thread(runnable);
142                 
143                 thread.run();
144         }
145
146
147         public QueryVnfResponse queryVnf(String vnfmId, String vnfInstanceId) {
148                 QueryVnfResponse driverResponse;
149                 try {
150                         nslcmMgmr.queryVnfm(vnfmId);
151                         CBAMQueryVnfResponse cbamResponse = cbamMgmr.queryVnf(vnfInstanceId);
152                         driverResponse = responseConverter.queryspConvert(cbamResponse);
153                 } catch (Exception e) {
154                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
155                 }
156                 
157         return driverResponse;
158         }
159
160         public OperStatusVnfResponse getOperStatus(String vnfmId, String jobId) {
161                 OperStatusVnfResponse response = new OperStatusVnfResponse();
162                 
163                 List<ResponseHistoryList> list=new ArrayList<ResponseHistoryList>();
164                 ResponseHistoryList relist=new ResponseHistoryList();
165                 relist.setErrorCode(41);
166                 relist.setProgress(40);
167                 relist.setResponseId(1);
168                 relist.setStatus("proccessing");
169                 relist.setStatusDescription("OMC VMs are decommissioned in VIM");
170                 ResponseDescriptor res=new ResponseDescriptor();
171                 res.setErrorCode(41);
172                 res.setProgress(40);
173                 res.setResponseId(1);
174                 res.setStatus("proccessing");
175                 res.setStatusDescription("OMC VMs are decommissioned in VIM");
176                 for(int i=0; i<2;i++) {
177                         relist.setProgress(4+i);        
178                         list.add(relist);
179                 }
180                 res.setResponseHistoryList(list);
181                 
182                 response.setJobId("Jobid="+jobId);
183                 response.setResponseDescriptor(res);
184                 
185                 return response;
186         }
187
188         public ScaleVnfResponse scaleVnf(ScaleVnfRequest driverRequest, String vnfmId, String vnfInstanceId) throws VnfmDriverException {
189                 ScaleVnfResponse driverResponse;
190                 try {
191                         nslcmMgmr.queryVnfm(vnfmId);
192                         CBAMScaleVnfRequest cbamRequest = requestConverter.scaleconvert(driverRequest);
193                         CBAMScaleVnfResponse cbamResponse = cbamMgmr.scaleVnf(cbamRequest, vnfInstanceId);
194                         driverResponse = responseConverter.scalespconvert(cbamResponse);
195                 } catch (Exception e) {
196                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
197                 }
198                 
199         return driverResponse;
200         }
201
202         public HealVnfResponse healVnf(HealVnfRequest driverRequest, String vnfmId, String vnfInstanceId) throws VnfmDriverException {
203                 HealVnfResponse driverResponse;
204                 try {
205                         nslcmMgmr.queryVnfm(vnfmId);
206                         CBAMHealVnfRequest cbamRequest = requestConverter.healconvert(driverRequest);
207                         CBAMHealVnfResponse cbamResponse = cbamMgmr.healVnf(cbamRequest, vnfInstanceId);
208                         driverResponse = responseConverter.healspconvert(cbamResponse);
209                 } catch (Exception e) {
210                         throw new VnfmDriverException(HttpStatus.SC_INTERNAL_SERVER_ERROR, CommonConstants.HTTP_ERROR_DESC_500);
211                 }
212                 
213         return driverResponse;
214         }
215
216 }