From 40e1ebd434ef00b12118487d8d50fced4ecff1b8 Mon Sep 17 00:00:00 2001 From: Travis Reeder Date: Sun, 7 Aug 2016 14:10:31 -0400 Subject: [PATCH] Updates to fix against Titan changes and what not. --- README.md | 24 ++++--- api.sh | 2 +- api/config/config.go | 26 +++++++ api/runner/runner.go | 4 +- api/server/runner.go | 2 + docs/database/boltdb.md | 2 +- glide.lock | 153 +++++++++++++++++++++++++++++++++++++--- glide.yaml | 5 +- main.go | 29 ++------ 9 files changed, 195 insertions(+), 52 deletions(-) create mode 100644 api/config/config.go diff --git a/README.md b/README.md index a9d5a3200..cb7e6faae 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ First let's start our IronFunctions API -``` -docker run --rm --privileged -it -p 8080:8080 iron/functions +```sh +docker run --rm --privileged -it -e "DB=bolt:///app/data/bolt.db" -v $PWD/data:/app/data -p 8080:8080 iron/functions ``` This command will quickly start our API using the default database `Bolt` running on `:8080` @@ -18,7 +18,7 @@ This command will quickly start our API using the default database `Bolt` runnin ```sh curl -H "Content-Type: application/json" -X POST -d '{ - "name":"APP_NAME" + "app": { "name":"myapp" } }' http://localhost:8080/v1/apps ``` @@ -28,19 +28,23 @@ Now add routes to the app. First we'll add a route to the output of a docker con ```sh curl -H "Content-Type: application/json" -X POST -d '{ - "name": "hello", - "path":"/hello", - "image":"iron/hello" + "route": { + "name": "hello", + "path":"/hello", + "image":"iron/hello" + } }' http://localhost:8080/v1/apps/myapp/routes ``` ### Calling your Function +Just hit the URL you got back from adding a route above: + ``` curl http://localhost:8080/r/myapp/hello ``` -### To pass in data to your function, +### To pass in data to your function Your function will get the body of the request as is, and the headers of the request will be passed in as env vars. @@ -55,12 +59,12 @@ curl -H "Content-Type: application/json" -X POST -d '{ Simply point to https://functions.iron.io instead of localhost and add your Iron.io Authentication header (TODO: link), like this: ```sh -curl -H "Authorization: Bearer IRON_TOKEN" -H "Content-Type: application/json" -X POST -d '{"name":"APP_NAME"}' https://functions.iron.io/v1/apps +curl -H "Authorization: Bearer IRON_TOKEN" -H "Content-Type: application/json" -X POST -d '{"app": {"name":"myapp"}}' https://functions.iron.io/v1/apps ``` -And you'll get an ironfunctions.com host: +And you'll get an ironfunctions.com host for your app: -``` +```sh APP_NAME.USER_ID.ironfunctions.com/PATH ``` diff --git a/api.sh b/api.sh index 7562ac6d1..3f57907e7 100755 --- a/api.sh +++ b/api.sh @@ -2,4 +2,4 @@ set -ex ./build.sh -docker run --rm --privileged -it -p 8080:8080 -e LOG_LEVEL=debug -v $PWD/bolt.db:/app/bolt.db iron/functions \ No newline at end of file +docker run --rm --privileged -it -e LOG_LEVEL=debug -e "DB=bolt:///app/data/bolt.db" -v $PWD/data:/app/data -p 8080:8080 iron/functions diff --git a/api/config/config.go b/api/config/config.go new file mode 100644 index 000000000..e3b6fa626 --- /dev/null +++ b/api/config/config.go @@ -0,0 +1,26 @@ +package config + +import ( + "fmt" + "os" + "strings" + + log "github.com/Sirupsen/logrus" + "github.com/spf13/viper" +) + +func InitConfig() { + cwd, _ := os.Getwd() + viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) + viper.SetDefault("log_level", "info") + viper.SetDefault("db", fmt.Sprintf("bolt://%s/data/bolt.db?bucket=funcs", cwd)) + viper.SetConfigName("config") + viper.AddConfigPath(".") + viper.AutomaticEnv() // picks up env vars automatically + viper.ReadInConfig() + logLevel, err := log.ParseLevel(viper.GetString("log_level")) + if err != nil { + log.WithError(err).Fatalln("Invalid log level.") + } + log.SetLevel(logLevel) +} diff --git a/api/runner/runner.go b/api/runner/runner.go index 2dfcb9d21..591012e95 100644 --- a/api/runner/runner.go +++ b/api/runner/runner.go @@ -11,7 +11,7 @@ import ( "github.com/iron-io/titan/common" "github.com/iron-io/titan/runner/agent" "github.com/iron-io/titan/runner/drivers" - driverscommon "github.com/iron-io/titan/runner/drivers/common" + driverscommon "github.com/iron-io/titan/runner/drivers" "github.com/iron-io/titan/runner/drivers/docker" "github.com/iron-io/titan/runner/drivers/mock" ) @@ -82,7 +82,7 @@ func (r Runner) Status() string { func selectDriver(driver string, env *common.Environment, conf *driverscommon.Config) (drivers.Driver, error) { switch driver { case "docker": - docker := docker.NewDocker(env, conf) + docker := docker.NewDocker(env, *conf) return docker, nil case "mock": return mock.New(), nil diff --git a/api/server/runner.go b/api/server/runner.go index e7093e633..5846386cf 100644 --- a/api/server/runner.go +++ b/api/server/runner.go @@ -74,11 +74,13 @@ func handleRunner(c *gin.Context) { if err != nil { log.WithError(err).Error(models.ErrRoutesList) c.JSON(http.StatusInternalServerError, simpleError(models.ErrRoutesList)) + return } if routes == nil || len(routes) == 0 { log.WithError(err).Error(models.ErrRunnerRouteNotFound) c.JSON(http.StatusNotFound, simpleError(models.ErrRunnerRouteNotFound)) + return } log.WithField("routes", routes).Debug("Got routes from datastore") diff --git a/docs/database/boltdb.md b/docs/database/boltdb.md index 23c3391ed..d42fda40d 100644 --- a/docs/database/boltdb.md +++ b/docs/database/boltdb.md @@ -7,5 +7,5 @@ BoltDB is the default database, you just need to run the API. To keep it persistent you add a volume flag to the command: ``` -docker run --rm -it -v $PWD/bold.db:/app/bolt.db -p 8080:8080 iron/functions +docker run --rm -it --privileged -v $PWD/bolt.db:/app/bolt.db -p 8080:8080 iron/functions ``` \ No newline at end of file diff --git a/glide.lock b/glide.lock index 66cbce7b7..65f92aa9a 100644 --- a/glide.lock +++ b/glide.lock @@ -1,10 +1,56 @@ -hash: 2101b4c83f12c75cbc3cb5be0a7d544dd3a7d21a27ef8a5ee8b014ded8cee034 -updated: 2016-07-27T16:56:51.792310167-03:00 +hash: 5ccf89905e13b7dc987cd203c1d7c1fddd32dcd776fe2e5f60d9f6f7b9908425 +updated: 2016-08-07T13:44:07.250867774-04:00 imports: +- name: github.com/amir/raidman + version: c74861fe6a7bb8ede0a010ce4485bdbb4fc4c985 + subpackages: + - proto - name: github.com/asaskevich/govalidator version: 593d64559f7600f29581a3ee42177f5dbded27a9 - name: github.com/boltdb/bolt - version: 5cc10bbbc5c141029940133bb33c9e969512a698 + version: 94c8db596809690a3f7046fa83c7b0dda13a3222 +- name: github.com/BurntSushi/toml + version: 99064174e013895bbd9b025c31100bd1d9b590ca +- name: github.com/cactus/go-statsd-client + version: 91c326c3f7bd20f0226d3d1c289dd9f8ce28d33d + subpackages: + - statsd +- name: github.com/docker/distribution + version: 9ca7921603852314b18a6ecc19f91806935f34bd + subpackages: + - digest + - manifest +- name: github.com/docker/docker + version: 59311faaed4e3384fc8da738a57a25f17ae07e05 + subpackages: + - opts + - pkg/archive + - pkg/fileutils + - pkg/homedir + - pkg/stdcopy + - pkg/parsers + - pkg/ulimit + - volume + - pkg/pools + - pkg/promise + - pkg/system + - pkg/ioutils + - pkg/units + - pkg/tarsum + - pkg/random +- name: github.com/docker/go-units + version: eb879ae3e2b84e2a142af415b679ddeda47ec71c +- name: github.com/docker/libtrust + version: 9cbd2a1374f46905c68a4eb3694a130610adc62a +- name: github.com/fsnotify/fsnotify + version: a8a77c9133d2d6fd8334f3260d06f60e8d80a5fb +- name: github.com/fsouza/go-dockerclient + version: 62035adb3375dad32558aa3b1bd2279e4504e000 +- name: github.com/garyburd/redigo + version: 4ed1111375cbeb698249ffe48dd463e9b0a63a7a + subpackages: + - redis + - internal - name: github.com/gin-gonic/gin version: 4a6bc4aac4607e253bcda67c8c5bcda693d2388e subpackages: @@ -21,7 +67,9 @@ imports: - name: github.com/go-openapi/loads version: 18441dfa706d924a39a030ee2c3b1d8d81917b38 - name: github.com/go-openapi/runtime - version: 11e322eeecc1032d5a0a96c566ed53f2b5c26e22 + version: 499b9bceffc59518b28ff84e0717692883137578 + subpackages: + - client - name: github.com/go-openapi/spec version: e9fab754f5629065e6b7a6100301226545d4477e - name: github.com/go-openapi/strfmt @@ -34,38 +82,121 @@ imports: version: 2402d76f3d41f928c7902a765dfc872356dd3aad subpackages: - proto +- name: github.com/hashicorp/go-cleanhttp + version: ad28ea4487f05916463e2423a55166280e8254b5 +- name: github.com/hashicorp/hcl + version: d8c773c4cba11b11539e3d45f93daeaa5dcf1fa1 + subpackages: + - hcl/ast + - hcl/parser + - hcl/token + - json/parser + - hcl/scanner + - hcl/strconv + - json/scanner + - json/token +- name: github.com/heroku/docker-registry-client + version: ddbd05bac47f55e533a7ed124211ef7e076b0bf3 + subpackages: + - registry - name: github.com/iron-io/titan - version: 697a5466b096fee73202f5ddccf8213a2357e062 - repo: git@github.com:iron-io/titan.git + version: a55b68c6ff4c750886542e788b87db80dda7c47a + repo: https://github.com/iron-io/titan.git vcs: git subpackages: - - jobserver/models + - common + - runner/agent + - runner/drivers + - runner/drivers/docker + - runner/drivers/mock + - runner/tasker + - common/stats + - runner/tasker/client/models + - runner/tasker/client/titan + - runner/tasker/client/titan/jobs + - runner/tasker/client/titan/groups + - runner/tasker/client/titan/runner +- name: github.com/kr/fs + version: 2788f0dbd16903de03cb8186e5c7d97b69ad387b - name: github.com/lib/pq - version: 3cd0097429be7d611bb644ef85b42bfb102ceea4 + version: 80f8150043c80fb52dee6bc863a709cdac7ec8f8 subpackages: - oid +- name: github.com/magiconair/properties + version: b3f6dd549956e8a61ea4a686a1c02a33d5bdda4b - name: github.com/mailru/easyjson - version: 97eee20abef76a0591155412cf0d04f24b05098f + version: d5b7844b561a7bc640052f1b935f7b800330d7e0 subpackages: - jlexer - jwriter - buffer - name: github.com/manucorporat/sse version: ee05b128a739a0fb76c7ebd3ae4810c1de808d6d +- name: github.com/mitchellh/mapstructure + version: 21a35fb16463dfb7c8eee579c65d995d95e64d1e +- name: github.com/opencontainers/runc + version: 142df3836b740af53dc6da59eed8dbc92f62917c + subpackages: + - libcontainer/user +- name: github.com/pivotal-golang/bytefmt + version: 24c06ce13e176cf7a7a440c8cf3b64d91c36c8e2 +- name: github.com/pkg/errors + version: 2a9be18ecd8c148be18be08a811e33809206da19 +- name: github.com/pkg/sftp + version: a71e8f580e3b622ebff585309160b1cc549ef4d2 - name: github.com/PuerkitoBio/purell - version: 1d5d1cfad45d42ec5f81fa8ef23de09cebc6dcc3 + version: 8a290539e2e8629dbc4e6bad948158f790ec31f4 - name: github.com/PuerkitoBio/urlesc version: 5bd2802263f21d8788851d5305584c82a5c75d7e +- name: github.com/satori/go.uuid + version: 0aa62d5ddceb50dbcb909d790b5345affd3669b6 - name: github.com/Sirupsen/logrus - version: a283a10442df8dc09befd873fab202bf8a253d6a + version: 4b6ea7319e214d98c938f12692336f7ca9348d6b + subpackages: + - hooks/syslog +- name: github.com/spf13/afero + version: cc9c21814bb945440253108c4d3c65c85aac3c68 + subpackages: + - mem + - sftp +- name: github.com/spf13/cast + version: e31f36ffc91a2ba9ddb72a4b6a607ff9b3d3cb63 +- name: github.com/spf13/jwalterweatherman + version: 33c24e77fb80341fe7130ee7c594256ff08ccc46 +- name: github.com/spf13/pflag + version: f676131e2660dc8cd88de99f7486d34aa8172635 +- name: github.com/spf13/viper + version: 346299ea79e446ebdddb834371ceba2e5926b732 +- name: golang.org/x/crypto + version: c10c31b5e94b6f7a0283272dc2bb27163dcea24b + subpackages: + - ssh - name: golang.org/x/net version: f315505cf3349909cdf013ea56690da34e96a451 subpackages: - context + - context/ctxhttp + - proxy + - idna - name: golang.org/x/sys version: a646d33e2ee3172a661fc09bca23bb4889a41bc8 subpackages: - unix +- name: golang.org/x/text + version: 2910a502d2bf9e43193af9d68ca516529614eed3 + subpackages: + - transform + - unicode/norm + - secure/precis + - cases + - runes + - secure/bidirule + - width + - language + - unicode/bidi + - internal/tag - name: gopkg.in/go-playground/validator.v8 version: c193cecd124b5cc722d7ee5538e945bdb3348435 +- name: gopkg.in/yaml.v2 + version: e4d366fc3c7938e2958e662b4258c7a89e1f0e3e testImports: [] diff --git a/glide.yaml b/glide.yaml index acbe936c9..d37e13af1 100644 --- a/glide.yaml +++ b/glide.yaml @@ -7,8 +7,7 @@ import: - package: github.com/go-openapi/strfmt - package: github.com/go-openapi/validate - package: github.com/iron-io/titan - repo: git@github.com:iron-io/titan.git + repo: https://github.com/iron-io/titan.git vcs: git - subpackages: - - jobserver/models + version: master - package: github.com/lib/pq diff --git a/main.go b/main.go index 051997fca..086ff59a3 100644 --- a/main.go +++ b/main.go @@ -8,11 +8,8 @@ For keeping a minimum running, perhaps when doing a routing table update, if des package main import ( - "fmt" - "os" - "strings" - log "github.com/Sirupsen/logrus" + "github.com/iron-io/functions/api/config" "github.com/iron-io/functions/api/datastore" "github.com/iron-io/functions/api/models" "github.com/iron-io/functions/api/server" @@ -20,16 +17,11 @@ import ( ) func main() { - config := &models.Config{} + c := &models.Config{} - InitConfig() - logLevel, err := log.ParseLevel(viper.GetString("log_level")) - if err != nil { - log.WithError(err).Fatalln("Invalid log level.") - } - log.SetLevel(logLevel) + config.InitConfig() - err = config.Validate() + err := c.Validate() if err != nil { log.WithError(err).Fatalln("Invalid config.") } @@ -39,17 +31,6 @@ func main() { log.WithError(err).Fatalln("Invalid DB url.") } - srv := server.New(ds, config) + srv := server.New(ds, c) srv.Run() } - -func InitConfig() { - cwd, _ := os.Getwd() - viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) - viper.SetDefault("log_level", "info") - viper.SetDefault("db", fmt.Sprintf("bolt://%s/bolt.db?bucket=funcs", cwd)) - viper.SetConfigName("config") - viper.AddConfigPath(".") - viper.AutomaticEnv() // picks up env vars automatically - viper.ReadInConfig() -}