Merge branch 'detect_vendor' into 'master'

Detect vendor dir by having the func be on the go path

See merge request !95
This commit is contained in:
Reed Allman
2017-07-07 15:47:13 -07:00
7 changed files with 116 additions and 3 deletions

View File

@@ -0,0 +1,6 @@
vendor
/go
/app
/__uberscript__
func.yaml

View File

@@ -0,0 +1,67 @@
# Tutorial 1.2: Go Function w/ Input And Vendor Folder. (3 minutes)
This example will show you how to test and deploy Go (Golang) code with vendored Dependencies to Oracle Functions. It will also demonstrate passing data in through stdin.
### First, run the following commands:
```sh
#Vendor Dependencies
glide install -v #Or what ever vendor tool you want. We have a glide.yaml for you here already.
# Initialize your function creating a func.yaml file
fn init <DOCKERHUB_USERNAME>/hello-go
# Test your function. This will run inside a container exactly how it will on the server
fn run
# Now try with an input
cat sample.payload.json | fn run
# Deploy your functions to the Oracle Functions server (default localhost:8080)
# This will create a route to your function as well
fn deploy myapp
```
### Now call your function:
```sh
curl http://localhost:8080/r/myapp/hello-go
```
Or call from a browser: [http://localhost:8080/r/myapp/go](http://localhost:8080/r/myapp/hello-go)
And now with the JSON input:
```sh
curl -H "Content-Type: application/json" -X POST -d @sample.payload.json http://localhost:8080/r/myapp/hello-go
```
That's it!
### Note on Dependencies
In Go, simply put them all in the `vendor/` directory.
This example uses logrus. Put logrus in the vendor folder you can just call:
`glide install -v`
# In Review
1. We piped JSON data into the function at the command line
```sh
cat sample.payload.json | fn run
```
2. We received our function input through **stdin**
```go
json.NewDecoder(os.Stdin).Decode(p)
```
3. We wrote our output to **stdout**
```go
fmt.Printf("Hello")
```
4. We sent **stderr** to the server logs
```go
log.Println("here")
```

View File

@@ -0,0 +1,24 @@
package main
import (
"encoding/json"
"os"
"github.com/sirupsen/logrus"
)
type Person struct {
Name string
}
func main() {
p := &Person{Name: "World"}
json.NewDecoder(os.Stdin).Decode(p)
logrus.Printf("Hello %v!\n", p.Name)
logrus.Println("---> stderr goes to the server logs.")
logrus.Println("---> LINE 2")
logrus.Println("---> LINE 3 with a break right here\nand LINE 4")
logrus.Println("---> LINE 5 with a double line break\n ")
logrus.Println("---> LINE 6")
}

View File

@@ -0,0 +1,10 @@
hash: 08a916c742e8b0acb10f17dc5885d9572c3acdbd3c6f9fb20c745dfd93f1bbad
updated: 2017-07-07T10:34:08.409358081-07:00
imports:
- name: github.com/sirupsen/logrus
version: ba1b36c82c5e05c4f912a88eab0dcd91a171688f
- name: golang.org/x/sys
version: 6faef541c73732f438fb660a212750a9ba9f9362
subpackages:
- unix
testImports: []

View File

@@ -0,0 +1,3 @@
package: gitlab-odx.oracle.com/odx/functions/examples/tutorial/hello/go/usingdeps
import:
- package: github.com/sirupsen/logrus

View File

@@ -0,0 +1,3 @@
{
"name": "Johnny"
}

View File

@@ -18,20 +18,20 @@ func (h *GoLangHelper) DockerfileBuildCmds() []string {
// For now we assume that dependencies are vendored already, but we could vendor them // For now we assume that dependencies are vendored already, but we could vendor them
// inside the container. Maybe we should check for /vendor dir and if it doesn't exist, // inside the container. Maybe we should check for /vendor dir and if it doesn't exist,
// either run `dep init` if no Gopkg.toml/lock found or `dep ensure` if it's there. // either run `dep init` if no Gopkg.toml/lock found or `dep ensure` if it's there.
r = append(r, "ADD . /src") r = append(r, "ADD . /go/src/func/")
// if exists("Gopkg.toml") { // if exists("Gopkg.toml") {
// r = append(r, // r = append(r,
// "RUN go get -u github.com/golang/dep/cmd/dep", // "RUN go get -u github.com/golang/dep/cmd/dep",
// "RUN cd /src && dep ensure", // "RUN cd /src && dep ensure",
// ) // )
// } // }
r = append(r, "RUN cd /src && go build -o func") r = append(r, "RUN cd /go/src/func/ && go build -o func")
return r return r
} }
func (h *GoLangHelper) DockerfileCopyCmds() []string { func (h *GoLangHelper) DockerfileCopyCmds() []string {
return []string{ return []string{
"COPY --from=build-stage /src/func /function/", "COPY --from=build-stage /go/src/func/func /function/",
} }
} }