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
|
||||
Memory uint64
|
||||
Env map[string]string
|
||||
Input io.Reader
|
||||
Stdout io.Writer
|
||||
Stderr io.Writer
|
||||
}
|
||||
|
||||
@@ -21,6 +21,9 @@ func (t *containerTask) Command() string { return "" }
|
||||
func (t *containerTask) EnvVars() map[string]string {
|
||||
return t.cfg.Env
|
||||
}
|
||||
func (t *containerTask) Input() io.Reader {
|
||||
return t.cfg.Input
|
||||
}
|
||||
|
||||
func (t *containerTask) Labels() map[string]string {
|
||||
return map[string]string{
|
||||
|
||||
@@ -3,8 +3,8 @@ package server
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"strings"
|
||||
@@ -16,7 +16,7 @@ import (
|
||||
"github.com/iron-io/functions/api/runner"
|
||||
"github.com/iron-io/runner/common"
|
||||
"github.com/iron-io/runner/drivers"
|
||||
"github.com/satori/go.uuid"
|
||||
uuid "github.com/satori/go.uuid"
|
||||
)
|
||||
|
||||
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})
|
||||
|
||||
var err error
|
||||
var payload io.Reader
|
||||
|
||||
var payload []byte
|
||||
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" {
|
||||
qPL := c.Request.URL.Query()["payload"]
|
||||
if len(qPL) > 0 {
|
||||
payload = []byte(qPL[0])
|
||||
reqPayload := c.Request.URL.Query().Get("payload")
|
||||
if len(reqPayload) > 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")
|
||||
if appName == "" {
|
||||
// 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{
|
||||
"METHOD": c.Request.Method,
|
||||
"ROUTE": el.Path,
|
||||
"PAYLOAD": string(payload),
|
||||
"REQUEST_URL": c.Request.URL.String(),
|
||||
}
|
||||
|
||||
@@ -148,6 +141,7 @@ func handleRequest(c *gin.Context, enqueue models.Enqueue) {
|
||||
Stderr: stderr,
|
||||
Env: envVars,
|
||||
Memory: el.Memory,
|
||||
Input: payload,
|
||||
}
|
||||
|
||||
var err error
|
||||
|
||||
@@ -29,8 +29,6 @@ func TestRouteRunnerGet(t *testing.T) {
|
||||
{"/route", "", http.StatusBadRequest, models.ErrAppsNotFound},
|
||||
{"/r/app/route", "", http.StatusNotFound, models.ErrAppsNotFound},
|
||||
{"/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)
|
||||
|
||||
@@ -64,8 +62,6 @@ func TestRouteRunnerPost(t *testing.T) {
|
||||
expectedCode int
|
||||
expectedError error
|
||||
}{
|
||||
{"/route", `payload`, http.StatusBadRequest, models.ErrInvalidJSON},
|
||||
{"/r/app/route", `payload`, http.StatusBadRequest, models.ErrInvalidJSON},
|
||||
{"/route", `{ "payload": "" }`, http.StatusBadRequest, models.ErrAppsNotFound},
|
||||
{"/r/app/route", `{ "payload": "" }`, http.StatusNotFound, models.ErrAppsNotFound},
|
||||
{"/r/myapp/route", `{ "payload": "" }`, http.StatusNotFound, models.ErrRunnerRouteNotFound},
|
||||
|
||||
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"
|
||||
|
||||
payload = ENV['PAYLOAD']
|
||||
if payload == nil || payload == ""
|
||||
payload = STDIN.read
|
||||
end
|
||||
|
||||
STDERR.puts 'payload: ' + payload.inspect
|
||||
payload = STDIN.read
|
||||
if payload != ""
|
||||
payload = JSON.parse(payload)
|
||||
name = payload['name']
|
||||
|
||||
@@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
|
||||
@@ -17,12 +18,12 @@ type payload struct {
|
||||
}
|
||||
|
||||
func main() {
|
||||
// Getting ENV variable PAYLOAD
|
||||
plEnv := os.Getenv("PAYLOAD")
|
||||
// Getting stdin
|
||||
plStdin, _ := ioutil.ReadAll(os.Stdin)
|
||||
|
||||
// Transforming JSON to a *payload
|
||||
var pl payload
|
||||
err := json.Unmarshal([]byte(plEnv), &pl)
|
||||
err := json.Unmarshal(plStdin, &pl)
|
||||
if err != nil {
|
||||
log.Println("Invalid payload")
|
||||
log.Fatal(err)
|
||||
|
||||
23
glide.lock
generated
23
glide.lock
generated
@@ -1,5 +1,5 @@
|
||||
hash: b6cdce56dc2e984a24f1187c9db387710248cc5f7df40babf8d51998827e4245
|
||||
updated: 2016-10-05T19:32:26.015409662+02:00
|
||||
hash: 1aa5da2af5bb907bf30c21c74a0e04b9192d5b1821b7902d4f6cdefe536af97c
|
||||
updated: 2016-10-06T21:48:04.862585926+02:00
|
||||
imports:
|
||||
- name: github.com/amir/raidman
|
||||
version: c74861fe6a7bb8ede0a010ce4485bdbb4fc4c985
|
||||
@@ -28,8 +28,6 @@ imports:
|
||||
version: 694ba71e365c6b9aa7472a9ef29bbde3cba6dce2
|
||||
subpackages:
|
||||
- api/types/filters
|
||||
- api/types/mount
|
||||
- api/types/swarm
|
||||
- api/types/versions
|
||||
- opts
|
||||
- pkg/archive
|
||||
@@ -42,6 +40,11 @@ imports:
|
||||
- pkg/promise
|
||||
- pkg/stdcopy
|
||||
- pkg/system
|
||||
- name: github.com/docker/engine-api
|
||||
version: 4290f40c056686fcaa5c9caf02eac1dde9315adf
|
||||
subpackages:
|
||||
- types/mount
|
||||
- types/swarm
|
||||
- name: github.com/docker/go-units
|
||||
version: f2145db703495b2e525c59662db69a7344b00bb8
|
||||
- name: github.com/docker/libtrust
|
||||
@@ -49,7 +52,7 @@ imports:
|
||||
- name: github.com/fsnotify/fsnotify
|
||||
version: c07fd863aee264025aa0ef438bf9d2046c803493
|
||||
- name: github.com/fsouza/go-dockerclient
|
||||
version: 519179ce6c6db417b0f092abf47d7d73e4e0d900
|
||||
version: 4efaf0ea3c8990e1648f68672d011289f0c0cb0a
|
||||
- name: github.com/garyburd/redigo
|
||||
version: ffa8d46ada782d81cfda81a0fbd9f45ceae448e8
|
||||
subpackages:
|
||||
@@ -117,11 +120,6 @@ imports:
|
||||
- drivers
|
||||
- drivers/docker
|
||||
- drivers/mock
|
||||
- name: github.com/iron-io/worker
|
||||
version: 7a73b8e893c4d7ef4a6cbd3dea94b3d2b883cabc
|
||||
subpackages:
|
||||
- common
|
||||
- common/stats
|
||||
- name: github.com/kr/fs
|
||||
version: 2788f0dbd16903de03cb8186e5c7d97b69ad387b
|
||||
- name: github.com/lib/pq
|
||||
@@ -138,8 +136,6 @@ imports:
|
||||
- jwriter
|
||||
- name: github.com/manucorporat/sse
|
||||
version: ee05b128a739a0fb76c7ebd3ae4810c1de808d6d
|
||||
- name: github.com/Microsoft/go-winio
|
||||
version: ce2922f643c8fd76b46cadc7f404a06282678b34
|
||||
- name: github.com/mitchellh/mapstructure
|
||||
version: ca63d7c062ee3c9f34db231e352b60012b4fd0c1
|
||||
- name: github.com/opencontainers/runc
|
||||
@@ -160,7 +156,7 @@ imports:
|
||||
- name: github.com/PuerkitoBio/urlesc
|
||||
version: 5bd2802263f21d8788851d5305584c82a5c75d7e
|
||||
- name: github.com/satori/go.uuid
|
||||
version: b061729afc07e77a8aa4fad0a2fd840958f1942a
|
||||
version: 879c5887cd475cd7864858769793b2ceb0d44feb
|
||||
- name: github.com/Sirupsen/logrus
|
||||
version: 3ec0642a7fb6488f65b06f9040adc67e3990296a
|
||||
subpackages:
|
||||
@@ -195,7 +191,6 @@ imports:
|
||||
version: 8f0908ab3b2457e2e15403d3697c9ef5cb4b57a9
|
||||
subpackages:
|
||||
- unix
|
||||
- windows
|
||||
- name: golang.org/x/text
|
||||
version: 098f51fb687dbaba1f6efabeafbb6461203f9e21
|
||||
subpackages:
|
||||
|
||||
@@ -14,9 +14,9 @@ import:
|
||||
- package: github.com/go-openapi/validate
|
||||
- package: github.com/google/btree
|
||||
- package: github.com/iron-io/runner
|
||||
version: master
|
||||
repo: git@github.com:iron-io/runner.git
|
||||
vcs: git
|
||||
version: master
|
||||
subpackages:
|
||||
- common
|
||||
- drivers
|
||||
@@ -24,6 +24,7 @@ import:
|
||||
- drivers/mock
|
||||
- package: github.com/lib/pq
|
||||
- package: github.com/satori/go.uuid
|
||||
version: v1.1.0
|
||||
- package: github.com/spf13/viper
|
||||
- package: golang.org/x/crypto
|
||||
subpackages:
|
||||
@@ -38,3 +39,4 @@ import:
|
||||
version: ^3.1.0
|
||||
subpackages:
|
||||
- statsd
|
||||
- package: github.com/google/btree
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
)
|
||||
|
||||
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