Add request interface 51/9651/2
authorluxin <luxin7@huawei.com>
Thu, 31 Aug 2017 11:07:08 +0000 (19:07 +0800)
committerluxin <luxin7@huawei.com>
Thu, 31 Aug 2017 11:18:53 +0000 (19:18 +0800)
Add request interface and param to huawei vnfmdriver

Change-Id: Id0c30c5d195fe64b59b0dfbfb1350fe19967e39e
Issue-Id:VFC-204
Signed-off-by: luxin <luxin7@huawei.com>
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/onap/vfc/nfvo/vnfm/svnfm/vnfmadapter/common/ResultRequestUtil.java
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/onap/vfc/nfvo/vnfm/svnfm/vnfmadapter/service/constant/ParamConstants.java
huawei/vnfmadapter/VnfmadapterService/service/src/main/java/org/onap/vfc/nfvo/vnfm/svnfm/vnfmadapter/service/csm/connect/ConnectMgrVnfm.java

index fa3d0ae..ab947cb 100644 (file)
@@ -167,7 +167,8 @@ public final class ResultRequestUtil {
             String token = mgrVcmm.getAccessSession();
             String roaRand = mgrVcmm.getRoaRand();
             String vnfmUrl = vnfmObject.getString("url");
-            removeTokens(vnfmUrl, token, roaRand);
+            String user = vnfmObject.getString("userName");
+            removeTokens(vnfmUrl, token, roaRand, user);
         } catch(IOException e) {
             LOG.info("function=call, msg=IOException, e is {}", e);
         } catch(ReflectiveOperationException e) {
@@ -193,9 +194,102 @@ public final class ResultRequestUtil {
      *
      * @since NFVO 0.5
      */
-    private static void removeTokens(String vnfmUrl, String token, String roaRand) {
+    private static void removeTokens(String vnfmUrl, String token, String roaRand, String user) {
         HttpMethod httpMethodToken = null;
-        String tokenUrl = String.format(ParamConstants.CSM_AUTH_DISCONNECT, "manoadmin", roaRand);
+        String tokenUrl = String.format(ParamConstants.CSM_AUTH_DISCONNECT, user, roaRand);
+        LOG.info("removeTokens tokenUrl=" + tokenUrl);
+        try {
+            httpMethodToken = new HttpRequests.Builder(Constant.CERTIFICATE).setUrl(vnfmUrl.trim(), tokenUrl)
+                    .setParams("").addHeader("X-Auth-Token", token).delete().execute();
+            int statusCode = httpMethodToken.getStatusCode();
+            String result = httpMethodToken.getResponseBodyAsString();
+            LOG.info("removeTokens int=" + statusCode + ", result=" + result);
+        } catch(IOException e) {
+            LOG.info("function=call, msg=IOException, e is {}", e);
+        } catch(Throwable e) {
+            LOG.info("function=call, msg=Throwable, e is {}", e);
+        } finally {
+            if(httpMethodToken != null) {
+                httpMethodToken.releaseConnection();
+            }
+        }
+    }
+
+    /**
+     * <br>
+     * 
+     * @param vnfmObject
+     * @param path
+     * @param methodName
+     * @param paramsJson
+     * @param authModel
+     * @return
+     * @since NFVO 0.5
+     */
+    public static JSONObject callSouth(JSONObject vnfmObject, String path, String methodName, String paramsJson,
+            String authModel) {
+        LOG.info("request-param=" + paramsJson + ",authModel=" + authModel + ",path=" + path + ",vnfmInfo="
+                + vnfmObject);
+        JSONObject resultJson = new JSONObject();
+
+        ConnectMgrVnfm mgrVcmm = new ConnectMgrVnfm();
+
+        if(Constant.HTTP_OK != mgrVcmm.connectSouth(vnfmObject, authModel)) {
+            resultJson.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultJson.put("data", "connect fail.");
+            return resultJson;
+        }
+
+        HttpMethod httpMethod = null;
+        try {
+
+            String result = null;
+            String vnfPath = path.contains("%s") ? String.format(path, mgrVcmm.getRoaRand()) : path;
+            LOG.info("function=call, msg=url is {}, session is {}", vnfmObject.getString("url") + vnfPath,
+                    mgrVcmm.getAccessSession());
+            HttpRequests.Builder builder =
+                    new HttpRequests.Builder(authModel).addHeader(Constant.ACCESSSESSION, mgrVcmm.getAccessSession())
+                            .setUrl(vnfmObject.getString("url"), vnfPath).setParams(paramsJson);
+            MethodType methodType = MethodType.methodType(HttpRequests.Builder.class, new Class[0]);
+            MethodHandle mt =
+                    MethodHandles.lookup().findVirtual(builder.getClass(), methodName, methodType).bindTo(builder);
+
+            builder = (HttpRequests.Builder)mt.invoke();
+            httpMethod = builder.execute();
+            result = httpMethod.getResponseBodyAsString();
+            LOG.warn("function=call, msg=response status is {}. result is {}", httpMethod.getStatusCode(), result);
+            resultJson.put(Constant.RETCODE, httpMethod.getStatusCode());
+            resultJson.put("data", result);
+
+            // logout delete tokens
+            String token = mgrVcmm.getAccessSession();
+            String oldUrl = vnfmObject.getString("url").trim();
+            String newUrl = oldUrl.replaceAll("30001", "30000");
+            String user = vnfmObject.getString("userName");
+            removeV3Tokens(newUrl, token, user);
+        } catch(IOException e) {
+            LOG.info("function=call, msg=IOException, e is {}", e);
+        } catch(ReflectiveOperationException e) {
+            LOG.info("function=call, msg=ReflectiveOperationException, e is {}", e);
+        } catch(Throwable e) {
+            LOG.info("function=call, msg=Throwable, e is {}", e);
+        } finally {
+            if(httpMethod != null) {
+                httpMethod.releaseConnection();
+            }
+        }
+
+        if(httpMethod == null) {
+            resultJson.put(Constant.RETCODE, Constant.HTTP_INNERERROR);
+            resultJson.put("data", "get connection error");
+        }
+
+        return resultJson;
+    }
+
+    private static void removeV3Tokens(String vnfmUrl, String token, String user) {
+        HttpMethod httpMethodToken = null;
+        String tokenUrl = String.format(ParamConstants.CSM_AUTH_CONNECT_SOUTH_DISCONNECT, user);
         LOG.info("removeTokens tokenUrl=" + tokenUrl);
         try {
             httpMethodToken = new HttpRequests.Builder(Constant.CERTIFICATE).setUrl(vnfmUrl.trim(), tokenUrl)
index 1f932d7..af48609 100644 (file)
@@ -17,9 +17,7 @@
 package org.onap.vfc.nfvo.vnfm.svnfm.vnfmadapter.service.constant;
 
 /**
- *
  * @author
- *
  * @version NFVO 0.5 Sep 6, 2016
  */
 public class ParamConstants {
@@ -29,9 +27,9 @@ public class ParamConstants {
     public static final String GET_TOKENS_V2 =
             "{\"auth\":{\"identity\": {\"methods\": [\"password\"],\"password\": {\"user\": {\"name\": \"%s\",\"password\": \"%s\"}}}}}";
 
-    public static final String GET_IAM_TOKENS =
+    public static final String GET_TOKENS_V3 =
             "{\"auth\": {\"identity\": {\"methods\": [\"password\"],\"password\": {\"user\": {\"name\": "
-                    + "\"%s\",\"password\": \"%s\",\"domain\": {\"name\": \"%s\"}}}},\"scope\": {\"domain\": {\"name\": \"%s\"}}}}";
+                    + "\"%s\",\"password\": \"%s\",\"domain\": {\"name\": \"%s\"}}}}}}";
 
     public static final String GET_TOKEN_SUC_RESP =
             "{\"token\": {\"methods\": [\"password\"],\"expires_at\": \"\",\"user\": {\"id\": \"%s\","
@@ -45,7 +43,9 @@ public class ParamConstants {
 
     public static final String REST_3RD_HANDSHAKE = "/rest/plat/ssm/v1/sessions/verify";
 
-    public static final String IAM_AUTH = "/v3/auth/tokens";
+    public static final String CSM_AUTH_CONNECT_SOUTH = "/v3/auth/tokens";
+
+    public static final String CSM_AUTH_CONNECT_SOUTH_DISCONNECT = "/v3/auth/tokens/%s";
 
     public static final String CSM_AUTH_CONNECT = "/v2/auth/tokens";
 
@@ -65,7 +65,6 @@ public class ParamConstants {
 
     public static final String VNFMGR_INSTANCE = "/vnfmgr/v1/instances";
 
-
     public static final String VNFD_FLAVOR = "/vnfdmgr/v1/flavor";
 
     public static final String UPDATE_RESOURCE = "/rest/v1/resmanage/resuse/updateres";
@@ -106,7 +105,6 @@ public class ParamConstants {
 
     public static final String VNF_GET_VMINFO = "/v2/vapps/instances/%s/vm";
 
-
     public static final String MSB_REGISTER_URL = "/openoapi/microservices/v1/services";
 
     public static final String MSB_UNREGISTER_URL = "/openoapi/microservices/v1/services/hw-vnfm";
@@ -117,6 +115,8 @@ public class ParamConstants {
 
     public static final String GRANT_RES_URL = "/openoapi/resmgr/v1/resource/grant";
 
+    public static final String HEAL_VNF = "/v2/vapps/instances/vm/%s/action";
+
     private ParamConstants() {
         // private contstructor
     }
index 2643079..8be8b7d 100644 (file)
@@ -36,7 +36,7 @@ import net.sf.json.JSONObject;
  * .</br>
  *
  * @author
- * @version     NFVO 0.5  Sep 14, 2016
+ * @version NFVO 0.5 Sep 14, 2016
  */
 public class ConnectMgrVnfm {
 
@@ -62,16 +62,15 @@ public class ConnectMgrVnfm {
         this.roaRand = roaRand;
     }
 
-
     /**
      * Make connection
      * <br>
      *
      * @param vnfmObj
      * @return
-     * @since  NFVO 0.5
+     * @since NFVO 0.5
      */
-    public int connect(JSONObject vnfmObj,String authModel) {
+    public int connect(JSONObject vnfmObj, String authModel) {
         LOG.info("function=connect, msg=enter connect function.");
 
         ConnectInfo info = new ConnectInfo(vnfmObj.getString("url"), vnfmObj.getString("userName"),
@@ -87,7 +86,7 @@ public class ConnectMgrVnfm {
             statusCode = httpMethod.getStatusCode();
 
             String result = httpMethod.getResponseBodyAsString();
-            LOG.info("connect result:"+result);
+            LOG.info("connect result:" + result);
             if(statusCode == HttpStatus.SC_CREATED) {
                 JSONObject accessObj = JSONObject.fromObject(result);
                 JSONObject tokenObj = accessObj.getJSONObject("token");
@@ -114,13 +113,65 @@ public class ConnectMgrVnfm {
         return statusCode;
 
     }
+
+    /**
+     * <br>
+     * 
+     * @param vnfmObj
+     * @param authModel
+     * @return
+     * @since NFVO 0.5
+     */
+    public int connectSouth(JSONObject vnfmObj, String authModel) {
+        LOG.info("function=connectSouth, msg=enter connect function.");
+        String oldUrl = vnfmObj.getString("url").trim();
+        String newUrl = oldUrl.replaceAll("30001", "30000");
+        LOG.info("function=connectSouth, url={}.", newUrl);
+        ConnectInfo info =
+                new ConnectInfo(newUrl, vnfmObj.getString("userName"), vnfmObj.getString("password"), authModel);
+        HttpMethod httpMethod = null;
+        int statusCode = Constant.INTERNAL_EXCEPTION;
+
+        try {
+            httpMethod = new HttpRequests.Builder(info.getAuthenticateMode())
+                    .setUrl(info.getUrl(), ParamConstants.CSM_AUTH_CONNECT_SOUTH)
+                    .setParams(String.format(ParamConstants.GET_TOKENS_V3, info.getUserName(), info.getUserPwd()))
+                    .post().execute();
+            statusCode = httpMethod.getStatusCode();
+
+            String result = httpMethod.getResponseBodyAsString();
+            LOG.info("connect result:" + result);
+            if(statusCode == HttpStatus.SC_CREATED) {
+                Header header = httpMethod.getResponseHeader("accessSession");
+                setAccessSession(header.getValue());
+                statusCode = HttpStatus.SC_OK;
+            } else {
+                LOG.error("connect fail, code:" + statusCode + " re:" + result);
+            }
+
+        } catch(JSONException e) {
+            LOG.error("function=connect, msg=connect JSONException e={}.", e);
+        } catch(VnfmException e) {
+            LOG.error("function=connect, msg=connect VnfmException e={}.", e);
+        } catch(IOException e) {
+            LOG.error("function=connect, msg=connect IOException e={}.", e);
+        } finally {
+            clearCSMPwd(info);
+            if(httpMethod != null) {
+                httpMethod.releaseConnection();
+            }
+        }
+        return statusCode;
+
+    }
+
     /**
      * Make connection
      * <br>
      *
      * @param vnfmObj
      * @return
-     * @since  NFVO 0.5
+     * @since NFVO 0.5
      */
     public int connect(JSONObject vnfmObj) {
         LOG.info("function=connect, msg=enter connect function.");