krakend / krakend-lua

a lua interpreter for the KrakenD framework
Apache License 2.0
7 stars 14 forks source link

How can get enviroment variable in lua script #31

Closed luanromeu closed 2 years ago

luanromeu commented 2 years ago

My endpoint inside endpoints on krakend.json { "endpoint": "/v1/api-biotech/extraction/{biometricMethod}", "method": "POST", "output_encoding": "no-op", "extra_config": { "documentation/openapi": { "version": "1.0" } }, "backend": [{ "url_pattern": "/api-biotech/extraction/{biometricMethod}", "extra_config": { "modifier/lua-backend": { "sources": ["rbac.lua"], "pre": "access_check()", "allow_open_libs": true } }, "encoding": "no-op", "sd": "static", "method": "POST", "host": ["http://host.docker.internal:3000"], "disable_host_sanitize": false }], "input_headers": ["*"] }

Inside my docker-compose.yml i'am set the enviroment rbac_global_server

krakend_ce: image: krakend container_name: krakend_ce ports:

Inside my rbac.lua script i'am trying get enviroment variable like this

function access_check() rbac_global_server = os.getenv("rbac_global_server") print(rbac_global_server ) end

But when execute i'am received this error

2022/09/21 13:31:03 [Recovery] 2022/09/21 - 13:31:03 panic recovered: krakend_ce | runtime error: slice bounds out of range [-1:] krakend_ce | /usr/local/go/src/runtime/panic.go:118 (0xeb2f74) krakend_ce | /go/pkg/mod/github.com/alexeyco/binder@v0.0.0-20180729220023-2a21303f588a/error.go:140 (0x1813e16) krakend_ce | /go/pkg/mod/github.com/alexeyco/binder@v0.0.0-20180729220023-2a21303f588a/binder.go:27 (0x1812886) krakend_ce | /go/pkg/mod/github.com/alexeyco/binder@v0.0.0-20180729220023-2a21303f588a/error.go:201 (0x181430f) krakend_ce | /go/pkg/mod/github.com/alexeyco/binder@v0.0.0-20180729220023-2a21303f588a/binder.go:43 (0x1812828) krakend_ce | /go/pkg/mod/github.com/alexeyco/binder@v0.0.0-20180729220023-2a21303f588a/binder.go:26 (0x18127b8) krakend_ce | /go/pkg/mod/github.com/krakendio/krakend-lua/v2@v2.0.1/proxy/proxy.go:74 (0x181a5d3) krakend_ce | /go/pkg/mod/github.com/luraproject/lura/v2@v2.0.5/proxy/balancing.go:77 (0x120d210) krakend_ce | /go/pkg/mod/github.com/luraproject/lura/v2@v2.0.5/proxy/http.go:113 (0x12124c1) krakend_ce | /go/pkg/mod/github.com/luraproject/lura/v2@v2.0.5/router/gin/endpoint.go:42 (0x19b0b93) krakend_ce | /go/pkg/mod/github.com/gin-gonic/gin@v1.7.7/context.go:168 (0x19a64c1) krakend_ce | /go/pkg/mod/github.com/gin-gonic/gin@v1.7.7/recovery.go:99 (0x19a64ac) krakend_ce | /go/pkg/mod/github.com/gin-gonic/gin@v1.7.7/context.go:168 (0x19a5726) krakend_ce | /go/pkg/mod/github.com/gin-gonic/gin@v1.7.7/logger.go:241 (0x19a5709) krakend_ce | /go/pkg/mod/github.com/gin-gonic/gin@v1.7.7/context.go:168 (0x19a4a90) krakend_ce | /go/pkg/mod/github.com/gin-gonic/gin@v1.7.7/gin.go:555 (0x19a46f8) krakend_ce | /go/pkg/mod/github.com/gin-gonic/gin@v1.7.7/gin.go:511 (0x19a4231) krakend_ce | /go/pkg/mod/github.com/rs/cors@v1.6.0/cors.go:207 (0x210a437) krakend_ce | /usr/local/go/src/net/http/server.go:2047 (0x11ad90e) krakend_ce | /go/pkg/mod/github.com/rs/cors@v1.6.0/cors.go:207 (0x210a437) krakend_ce | /usr/local/go/src/net/http/server.go:2047 (0x11ad90e) krakend_ce | /usr/local/go/src/net/http/server.go:2879 (0x11b13ba) krakend_ce | /usr/local/go/src/net/http/server.go:1930 (0x11ac9e7) krakend_ce | /usr/local/go/src/runtime/asm_amd64.s:1581 (0xee91e0

kpacha commented 2 years ago

In KrakenD, the lua VM runs into the vacuum and has no access to the system itself, so the libraries os and io are unavailable.

But you can achieve your goal if you use flexible configuration and then pass the value of the envar as an argument to your function:

{
    "endpoint": "/lua",
    "backend":[
        {
            "url_pattern": "/__debug/lua",
            "host": ["http://127.0.0.1:8080"]
        }
    ],
    "extra_config": {
        "modifier/lua-proxy": {
            "pre": "your_function('{{ env "YOUR_ENVAR" }}')"
        }
    }
},

Cheers!