mirror of
https://github.com/fnproject/fn.git
synced 2022-10-28 21:29:17 +03:00
Change PAYLOAD input to STDIN (#111)
* change to iron-io/runner dependency * Fix runner dependency * Change PAYLOAD input to STDIN, fixes #40
This commit is contained in:
committed by
Pedro Nasser
parent
b7bf73f5d2
commit
52cab30056
@@ -29,6 +29,7 @@ type Config struct {
|
|||||||
AppName string
|
AppName string
|
||||||
Memory uint64
|
Memory uint64
|
||||||
Env map[string]string
|
Env map[string]string
|
||||||
|
Input io.Reader
|
||||||
Stdout io.Writer
|
Stdout io.Writer
|
||||||
Stderr io.Writer
|
Stderr io.Writer
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ func (t *containerTask) Command() string { return "" }
|
|||||||
func (t *containerTask) EnvVars() map[string]string {
|
func (t *containerTask) EnvVars() map[string]string {
|
||||||
return t.cfg.Env
|
return t.cfg.Env
|
||||||
}
|
}
|
||||||
|
func (t *containerTask) Input() io.Reader {
|
||||||
|
return t.cfg.Input
|
||||||
|
}
|
||||||
|
|
||||||
func (t *containerTask) Labels() map[string]string {
|
func (t *containerTask) Labels() map[string]string {
|
||||||
return map[string]string{
|
return map[string]string{
|
||||||
|
|||||||
@@ -3,8 +3,8 @@ package server
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
@@ -16,7 +16,7 @@ import (
|
|||||||
"github.com/iron-io/functions/api/runner"
|
"github.com/iron-io/functions/api/runner"
|
||||||
"github.com/iron-io/runner/common"
|
"github.com/iron-io/runner/common"
|
||||||
"github.com/iron-io/runner/drivers"
|
"github.com/iron-io/runner/drivers"
|
||||||
"github.com/satori/go.uuid"
|
uuid "github.com/satori/go.uuid"
|
||||||
)
|
)
|
||||||
|
|
||||||
func handleSpecial(c *gin.Context) {
|
func handleSpecial(c *gin.Context) {
|
||||||
@@ -45,28 +45,22 @@ func handleRequest(c *gin.Context, enqueue models.Enqueue) {
|
|||||||
ctx, log = common.LoggerWithFields(ctx, logrus.Fields{"call_id": reqID})
|
ctx, log = common.LoggerWithFields(ctx, logrus.Fields{"call_id": reqID})
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
var payload io.Reader
|
||||||
|
|
||||||
var payload []byte
|
|
||||||
if c.Request.Method == "POST" || c.Request.Method == "PUT" {
|
if c.Request.Method == "POST" || c.Request.Method == "PUT" {
|
||||||
payload, err = ioutil.ReadAll(c.Request.Body)
|
payload = c.Request.Body
|
||||||
|
// Load complete body and close
|
||||||
|
defer func() {
|
||||||
|
io.Copy(ioutil.Discard, c.Request.Body)
|
||||||
|
c.Request.Body.Close()
|
||||||
|
}()
|
||||||
} else if c.Request.Method == "GET" {
|
} else if c.Request.Method == "GET" {
|
||||||
qPL := c.Request.URL.Query()["payload"]
|
reqPayload := c.Request.URL.Query().Get("payload")
|
||||||
if len(qPL) > 0 {
|
if len(reqPayload) > 0 {
|
||||||
payload = []byte(qPL[0])
|
payload = strings.NewReader(reqPayload)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(payload) > 0 {
|
|
||||||
var emptyJSON map[string]interface{}
|
|
||||||
if err := json.Unmarshal(payload, &emptyJSON); err != nil {
|
|
||||||
log.WithError(err).Error(models.ErrInvalidJSON)
|
|
||||||
c.JSON(http.StatusBadRequest, simpleError(models.ErrInvalidJSON))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
log.WithField("payload", string(payload)).Debug("Got payload")
|
|
||||||
|
|
||||||
appName := c.Param("app")
|
appName := c.Param("app")
|
||||||
if appName == "" {
|
if appName == "" {
|
||||||
// check context, app can be added via special handlers
|
// check context, app can be added via special handlers
|
||||||
@@ -115,7 +109,6 @@ func handleRequest(c *gin.Context, enqueue models.Enqueue) {
|
|||||||
envVars := map[string]string{
|
envVars := map[string]string{
|
||||||
"METHOD": c.Request.Method,
|
"METHOD": c.Request.Method,
|
||||||
"ROUTE": el.Path,
|
"ROUTE": el.Path,
|
||||||
"PAYLOAD": string(payload),
|
|
||||||
"REQUEST_URL": c.Request.URL.String(),
|
"REQUEST_URL": c.Request.URL.String(),
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -148,6 +141,7 @@ func handleRequest(c *gin.Context, enqueue models.Enqueue) {
|
|||||||
Stderr: stderr,
|
Stderr: stderr,
|
||||||
Env: envVars,
|
Env: envVars,
|
||||||
Memory: el.Memory,
|
Memory: el.Memory,
|
||||||
|
Input: payload,
|
||||||
}
|
}
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
|||||||
@@ -29,8 +29,6 @@ func TestRouteRunnerGet(t *testing.T) {
|
|||||||
{"/route", "", http.StatusBadRequest, models.ErrAppsNotFound},
|
{"/route", "", http.StatusBadRequest, models.ErrAppsNotFound},
|
||||||
{"/r/app/route", "", http.StatusNotFound, models.ErrAppsNotFound},
|
{"/r/app/route", "", http.StatusNotFound, models.ErrAppsNotFound},
|
||||||
{"/r/myapp/route", "", http.StatusNotFound, models.ErrRunnerRouteNotFound},
|
{"/r/myapp/route", "", http.StatusNotFound, models.ErrRunnerRouteNotFound},
|
||||||
{"/route?payload=test", "", http.StatusBadRequest, models.ErrInvalidJSON},
|
|
||||||
{"/r/app/route?payload=test", "", http.StatusBadRequest, models.ErrInvalidJSON},
|
|
||||||
} {
|
} {
|
||||||
_, rec := routerRequest(t, router, "GET", test.path, nil)
|
_, rec := routerRequest(t, router, "GET", test.path, nil)
|
||||||
|
|
||||||
@@ -64,8 +62,6 @@ func TestRouteRunnerPost(t *testing.T) {
|
|||||||
expectedCode int
|
expectedCode int
|
||||||
expectedError error
|
expectedError error
|
||||||
}{
|
}{
|
||||||
{"/route", `payload`, http.StatusBadRequest, models.ErrInvalidJSON},
|
|
||||||
{"/r/app/route", `payload`, http.StatusBadRequest, models.ErrInvalidJSON},
|
|
||||||
{"/route", `{ "payload": "" }`, http.StatusBadRequest, models.ErrAppsNotFound},
|
{"/route", `{ "payload": "" }`, http.StatusBadRequest, models.ErrAppsNotFound},
|
||||||
{"/r/app/route", `{ "payload": "" }`, http.StatusNotFound, models.ErrAppsNotFound},
|
{"/r/app/route", `{ "payload": "" }`, http.StatusNotFound, models.ErrAppsNotFound},
|
||||||
{"/r/myapp/route", `{ "payload": "" }`, http.StatusNotFound, models.ErrRunnerRouteNotFound},
|
{"/r/myapp/route", `{ "payload": "" }`, http.StatusNotFound, models.ErrRunnerRouteNotFound},
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ machine:
|
|||||||
GO_PROJECT: ../go/src/github.com/iron-io/$CIRCLE_PROJECT_REPONAME
|
GO_PROJECT: ../go/src/github.com/iron-io/$CIRCLE_PROJECT_REPONAME
|
||||||
services:
|
services:
|
||||||
- docker
|
- docker
|
||||||
|
|
||||||
checkout:
|
checkout:
|
||||||
post:
|
post:
|
||||||
- mkdir -p "$GH_IRON"
|
- mkdir -p "$GH_IRON"
|
||||||
|
|||||||
BIN
data/worker_mq.db
Normal file
BIN
data/worker_mq.db
Normal file
Binary file not shown.
@@ -2,12 +2,8 @@ require 'json'
|
|||||||
|
|
||||||
name = "World"
|
name = "World"
|
||||||
|
|
||||||
payload = ENV['PAYLOAD']
|
|
||||||
if payload == nil || payload == ""
|
|
||||||
payload = STDIN.read
|
|
||||||
end
|
|
||||||
|
|
||||||
STDERR.puts 'payload: ' + payload.inspect
|
payload = STDIN.read
|
||||||
if payload != ""
|
if payload != ""
|
||||||
payload = JSON.parse(payload)
|
payload = JSON.parse(payload)
|
||||||
name = payload['name']
|
name = payload['name']
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
@@ -17,12 +18,12 @@ type payload struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// Getting ENV variable PAYLOAD
|
// Getting stdin
|
||||||
plEnv := os.Getenv("PAYLOAD")
|
plStdin, _ := ioutil.ReadAll(os.Stdin)
|
||||||
|
|
||||||
// Transforming JSON to a *payload
|
// Transforming JSON to a *payload
|
||||||
var pl payload
|
var pl payload
|
||||||
err := json.Unmarshal([]byte(plEnv), &pl)
|
err := json.Unmarshal(plStdin, &pl)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println("Invalid payload")
|
log.Println("Invalid payload")
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|||||||
23
glide.lock
generated
23
glide.lock
generated
@@ -1,5 +1,5 @@
|
|||||||
hash: b6cdce56dc2e984a24f1187c9db387710248cc5f7df40babf8d51998827e4245
|
hash: 1aa5da2af5bb907bf30c21c74a0e04b9192d5b1821b7902d4f6cdefe536af97c
|
||||||
updated: 2016-10-05T19:32:26.015409662+02:00
|
updated: 2016-10-06T21:48:04.862585926+02:00
|
||||||
imports:
|
imports:
|
||||||
- name: github.com/amir/raidman
|
- name: github.com/amir/raidman
|
||||||
version: c74861fe6a7bb8ede0a010ce4485bdbb4fc4c985
|
version: c74861fe6a7bb8ede0a010ce4485bdbb4fc4c985
|
||||||
@@ -28,8 +28,6 @@ imports:
|
|||||||
version: 694ba71e365c6b9aa7472a9ef29bbde3cba6dce2
|
version: 694ba71e365c6b9aa7472a9ef29bbde3cba6dce2
|
||||||
subpackages:
|
subpackages:
|
||||||
- api/types/filters
|
- api/types/filters
|
||||||
- api/types/mount
|
|
||||||
- api/types/swarm
|
|
||||||
- api/types/versions
|
- api/types/versions
|
||||||
- opts
|
- opts
|
||||||
- pkg/archive
|
- pkg/archive
|
||||||
@@ -42,6 +40,11 @@ imports:
|
|||||||
- pkg/promise
|
- pkg/promise
|
||||||
- pkg/stdcopy
|
- pkg/stdcopy
|
||||||
- pkg/system
|
- pkg/system
|
||||||
|
- name: github.com/docker/engine-api
|
||||||
|
version: 4290f40c056686fcaa5c9caf02eac1dde9315adf
|
||||||
|
subpackages:
|
||||||
|
- types/mount
|
||||||
|
- types/swarm
|
||||||
- name: github.com/docker/go-units
|
- name: github.com/docker/go-units
|
||||||
version: f2145db703495b2e525c59662db69a7344b00bb8
|
version: f2145db703495b2e525c59662db69a7344b00bb8
|
||||||
- name: github.com/docker/libtrust
|
- name: github.com/docker/libtrust
|
||||||
@@ -49,7 +52,7 @@ imports:
|
|||||||
- name: github.com/fsnotify/fsnotify
|
- name: github.com/fsnotify/fsnotify
|
||||||
version: c07fd863aee264025aa0ef438bf9d2046c803493
|
version: c07fd863aee264025aa0ef438bf9d2046c803493
|
||||||
- name: github.com/fsouza/go-dockerclient
|
- name: github.com/fsouza/go-dockerclient
|
||||||
version: 519179ce6c6db417b0f092abf47d7d73e4e0d900
|
version: 4efaf0ea3c8990e1648f68672d011289f0c0cb0a
|
||||||
- name: github.com/garyburd/redigo
|
- name: github.com/garyburd/redigo
|
||||||
version: ffa8d46ada782d81cfda81a0fbd9f45ceae448e8
|
version: ffa8d46ada782d81cfda81a0fbd9f45ceae448e8
|
||||||
subpackages:
|
subpackages:
|
||||||
@@ -117,11 +120,6 @@ imports:
|
|||||||
- drivers
|
- drivers
|
||||||
- drivers/docker
|
- drivers/docker
|
||||||
- drivers/mock
|
- drivers/mock
|
||||||
- name: github.com/iron-io/worker
|
|
||||||
version: 7a73b8e893c4d7ef4a6cbd3dea94b3d2b883cabc
|
|
||||||
subpackages:
|
|
||||||
- common
|
|
||||||
- common/stats
|
|
||||||
- name: github.com/kr/fs
|
- name: github.com/kr/fs
|
||||||
version: 2788f0dbd16903de03cb8186e5c7d97b69ad387b
|
version: 2788f0dbd16903de03cb8186e5c7d97b69ad387b
|
||||||
- name: github.com/lib/pq
|
- name: github.com/lib/pq
|
||||||
@@ -138,8 +136,6 @@ imports:
|
|||||||
- jwriter
|
- jwriter
|
||||||
- name: github.com/manucorporat/sse
|
- name: github.com/manucorporat/sse
|
||||||
version: ee05b128a739a0fb76c7ebd3ae4810c1de808d6d
|
version: ee05b128a739a0fb76c7ebd3ae4810c1de808d6d
|
||||||
- name: github.com/Microsoft/go-winio
|
|
||||||
version: ce2922f643c8fd76b46cadc7f404a06282678b34
|
|
||||||
- name: github.com/mitchellh/mapstructure
|
- name: github.com/mitchellh/mapstructure
|
||||||
version: ca63d7c062ee3c9f34db231e352b60012b4fd0c1
|
version: ca63d7c062ee3c9f34db231e352b60012b4fd0c1
|
||||||
- name: github.com/opencontainers/runc
|
- name: github.com/opencontainers/runc
|
||||||
@@ -160,7 +156,7 @@ imports:
|
|||||||
- name: github.com/PuerkitoBio/urlesc
|
- name: github.com/PuerkitoBio/urlesc
|
||||||
version: 5bd2802263f21d8788851d5305584c82a5c75d7e
|
version: 5bd2802263f21d8788851d5305584c82a5c75d7e
|
||||||
- name: github.com/satori/go.uuid
|
- name: github.com/satori/go.uuid
|
||||||
version: b061729afc07e77a8aa4fad0a2fd840958f1942a
|
version: 879c5887cd475cd7864858769793b2ceb0d44feb
|
||||||
- name: github.com/Sirupsen/logrus
|
- name: github.com/Sirupsen/logrus
|
||||||
version: 3ec0642a7fb6488f65b06f9040adc67e3990296a
|
version: 3ec0642a7fb6488f65b06f9040adc67e3990296a
|
||||||
subpackages:
|
subpackages:
|
||||||
@@ -195,7 +191,6 @@ imports:
|
|||||||
version: 8f0908ab3b2457e2e15403d3697c9ef5cb4b57a9
|
version: 8f0908ab3b2457e2e15403d3697c9ef5cb4b57a9
|
||||||
subpackages:
|
subpackages:
|
||||||
- unix
|
- unix
|
||||||
- windows
|
|
||||||
- name: golang.org/x/text
|
- name: golang.org/x/text
|
||||||
version: 098f51fb687dbaba1f6efabeafbb6461203f9e21
|
version: 098f51fb687dbaba1f6efabeafbb6461203f9e21
|
||||||
subpackages:
|
subpackages:
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ import:
|
|||||||
- package: github.com/go-openapi/validate
|
- package: github.com/go-openapi/validate
|
||||||
- package: github.com/google/btree
|
- package: github.com/google/btree
|
||||||
- package: github.com/iron-io/runner
|
- package: github.com/iron-io/runner
|
||||||
version: master
|
|
||||||
repo: git@github.com:iron-io/runner.git
|
repo: git@github.com:iron-io/runner.git
|
||||||
vcs: git
|
vcs: git
|
||||||
|
version: master
|
||||||
subpackages:
|
subpackages:
|
||||||
- common
|
- common
|
||||||
- drivers
|
- drivers
|
||||||
@@ -24,6 +24,7 @@ import:
|
|||||||
- drivers/mock
|
- drivers/mock
|
||||||
- package: github.com/lib/pq
|
- package: github.com/lib/pq
|
||||||
- package: github.com/satori/go.uuid
|
- package: github.com/satori/go.uuid
|
||||||
|
version: v1.1.0
|
||||||
- package: github.com/spf13/viper
|
- package: github.com/spf13/viper
|
||||||
- package: golang.org/x/crypto
|
- package: golang.org/x/crypto
|
||||||
subpackages:
|
subpackages:
|
||||||
@@ -38,3 +39,4 @@ import:
|
|||||||
version: ^3.1.0
|
version: ^3.1.0
|
||||||
subpackages:
|
subpackages:
|
||||||
- statsd
|
- statsd
|
||||||
|
- package: github.com/google/btree
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"os"
|
"os"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
fmt.Printf("Hello %v!\n", os.Getenv("PAYLOAD"))
|
bytes, _ := ioutil.ReadAll(os.Stdin)
|
||||||
|
fmt.Printf("Hello %v!\n", string(bytes))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user