You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwhisk.apache.org by mh...@apache.org on 2017/11/09 15:49:38 UTC

[incubator-openwhisk-apigateway] branch master updated: Implement request.path for path parameter mapping

This is an automated email from the ASF dual-hosted git repository.

mhamann pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-apigateway.git


The following commit(s) were added to refs/heads/master by this push:
     new cd556b2  Implement request.path for path parameter mapping
cd556b2 is described below

commit cd556b2267436440bb3eda2ce3da3f2427bfe344
Author: Alex Song <so...@us.ibm.com>
AuthorDate: Wed Nov 8 14:08:49 2017 -0500

    Implement request.path for path parameter mapping
---
 doc/v2/management_interface_v2.md       |  2 ++
 scripts/lua/policies/backendRouting.lua | 12 +++++++++---
 scripts/lua/routing.lua                 |  3 ++-
 tools/travis/build.sh                   |  2 +-
 4 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/doc/v2/management_interface_v2.md b/doc/v2/management_interface_v2.md
index 8518ac6..e8dc851 100644
--- a/doc/v2/management_interface_v2.md
+++ b/doc/v2/management_interface_v2.md
@@ -308,6 +308,8 @@ See below for a list of policies that are supported in the gateway and how they
   }
   ```
   * `target-url`: the backend url
+    * _optional:_ to pass the path of your managed url down to the `target-url`, append `/${request.path}` to the end of `target-url`.  
+    Eg. `"target-url": "https://openwhisk.ng.bluemix.net/api/some/action/path.http/${request.path}"`
   * `verb`: the method to use when invoking the target-url (use "keep" to use the keep the same verb as the API)
   
   To set a different `target-url` for different paths, use the `operation-switch` policy inside `x-gateway-configuration`.
diff --git a/scripts/lua/policies/backendRouting.lua b/scripts/lua/policies/backendRouting.lua
index bbe21eb..b89f7d9 100644
--- a/scripts/lua/policies/backendRouting.lua
+++ b/scripts/lua/policies/backendRouting.lua
@@ -26,17 +26,23 @@ local logger = require "lib/logger"
 local _M = {}
 
 --- Set upstream based on the backendUrl
-function _M.setRoute(backendUrl)
+function _M.setRoute(backendUrl, gatewayPath)
   local u = url.parse(backendUrl)
   if u.scheme == nil then
     u = url.parse(utils.concatStrings({'http://', backendUrl}))
   end
+  -- pass down gateway path to upstream path if $(request.path) is specified at the end of backendUrl
+  if u.path:sub(-15) == '$(request.path)' then
+    u.path = utils.concatStrings({u.path:sub(1, -16), u.path:sub(-16, -16) == '/' and '' or '/', gatewayPath})
+    ngx.req.set_uri(u.path)
+  else
+    ngx.req.set_uri(getUriPath(u.path))
+  end
   ngx.var.backendUrl = backendUrl
-  ngx.req.set_uri(getUriPath(u.path))
   setUpstream(u)
 end
 
---- Set dynamic route based on the based on the header that is passed in
+--- Set dynamic route based on the header that is passed in
 function _M.setDynamicRoute(obj)
   local whitelist = obj.whitelist
   for k in pairs(whitelist) do
diff --git a/scripts/lua/routing.lua b/scripts/lua/routing.lua
index 4eec452..3fea15b 100644
--- a/scripts/lua/routing.lua
+++ b/scripts/lua/routing.lua
@@ -22,6 +22,7 @@ local cjson = require "cjson"
 local url = require "url"
 local utils = require "lib/utils"
 local request = require "lib/request"
+local logger = require "lib/logger"
 -- load policies
 local security = require "policies/security"
 local mapping = require "policies/mapping"
@@ -85,7 +86,7 @@ function _M.processCall(dataStore)
         setVerb(opFields.backendMethod)
       end
       -- Set backend upstream and uri
-      backendRouting.setRoute(opFields.backendUrl)
+      backendRouting.setRoute(opFields.backendUrl, gatewayPath)
       -- Parse policies
       if opFields.policies ~= nil then
         parsePolicies(dataStore, opFields.policies, key)
diff --git a/tools/travis/build.sh b/tools/travis/build.sh
index 731a74f..114516c 100755
--- a/tools/travis/build.sh
+++ b/tools/travis/build.sh
@@ -50,7 +50,7 @@ export OPENWHISK_HOME=$WHISKDIR
 # Tests
 cd $WHISKDIR
 cat whisk.properties
-WSK_TESTS_DEPS_EXCLUDE="-x :core:swift3Action:distDocker -x :core:pythonAction:distDocker -x :core:javaAction:distDocker -x :core:nodejsAction:distDocker -x :core:actionProxy:distDocker -x :sdk:docker:distDocker -x :core:python2Action:copyFiles -x :core:python2Action:distDocker -x :tests:dat:blackbox:badaction:distDocker -x :tests:dat:blackbox:badproxy:distDocker"
+WSK_TESTS_DEPS_EXCLUDE="-x :core:swift3Action:distDocker -x :core:pythonAction:distDocker -x :core:javaAction:distDocker -x :core:nodejsAction:distDocker -x :core:actionProxy:distDocker -x :sdk:docker:distDocker -x :core:python2Action:distDocker -x :tests:dat:blackbox:badaction:distDocker -x :tests:dat:blackbox:badproxy:distDocker"
 TERM=dumb ./gradlew tests:test --tests apigw.healthtests.* ${WSK_TESTS_DEPS_EXCLUDE}
 sleep 60
 TERM=dumb ./gradlew tests:test --tests whisk.core.apigw.* ${WSK_TESTS_DEPS_EXCLUDE}

-- 
To stop receiving notification emails like this one, please contact
['"commits@openwhisk.apache.org" <co...@openwhisk.apache.org>'].