From 1fd0a2d8f3a0e111e09a8b75033aeab620eab918 Mon Sep 17 00:00:00 2001 From: Pierre-Olivier Mercier Date: Sun, 9 May 2021 18:02:23 +0200 Subject: [PATCH] Create a list of known jobs --- app.go | 12 +----------- engine/docker/docker.go | 4 ++-- engine/docker/name.go | 4 ++-- engine/queue.go | 4 ++-- jobs.go | 39 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 46 insertions(+), 17 deletions(-) create mode 100644 jobs.go diff --git a/app.go b/app.go index 33be7c0..5fe78bd 100644 --- a/app.go +++ b/app.go @@ -8,7 +8,6 @@ import ( "os" "time" - "github.com/docker/docker/api/types/mount" "github.com/docker/docker/pkg/stdcopy" "github.com/gin-gonic/gin" "nhooyr.io/websocket" @@ -50,21 +49,12 @@ func NewApp(cfg *config.Config) App { }) router.GET("/api/run", func(c *gin.Context) { - myVolume, err := docker.CreateVolumeDir("/data", false) + ctrid, err := RunJob("counter") if err != nil { c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) return } - ctrid, err := docker.Run( - "alpine", - []string{"sh", "-c", "touch /data/work_done; for i in `seq 10`; do echo $i; sleep 0.5; done"}, - []mount.Mount{*myVolume}, - ) - if err != nil { - c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) - return - } c.JSON(http.StatusOK, gin.H{"jobid": ctrid}) }) diff --git a/engine/docker/docker.go b/engine/docker/docker.go index 8a1ab2d..e47ac1f 100644 --- a/engine/docker/docker.go +++ b/engine/docker/docker.go @@ -41,7 +41,7 @@ func PsName() (ret map[string]string, err error) { return ret, err } -func Run(image string, cmd []string, mounts []mount.Mount) (string, error) { +func Run(jobtype string, image string, cmd []string, mounts []mount.Mount) (string, error) { cli, err := newCli() if err != nil { return "", err @@ -63,7 +63,7 @@ func Run(image string, cmd []string, mounts []mount.Mount) (string, error) { Architecture: "amd64", OS: "linux", }, - genContainerName(image), + genContainerName(jobtype), ) if err != nil { return "", err diff --git a/engine/docker/name.go b/engine/docker/name.go index 25c14ce..a7d9ef0 100644 --- a/engine/docker/name.go +++ b/engine/docker/name.go @@ -7,12 +7,12 @@ import ( "github.com/nemunaire/minifaas/engine" ) -func genContainerName(image string) string { +func genContainerName(jobtype string) string { uuid := make([]byte, 24) _, err := rand.Read(uuid) if err != nil { panic(err.Error()) } - return fmt.Sprintf("%s-%x", engine.GenContainerPrefix(image), uuid) + return fmt.Sprintf("%s%x", engine.GenContainerPrefix(jobtype), uuid) } diff --git a/engine/queue.go b/engine/queue.go index 9fbad15..089da8e 100644 --- a/engine/queue.go +++ b/engine/queue.go @@ -5,6 +5,6 @@ import ( "fmt" ) -func GenContainerPrefix(image string) string { - return fmt.Sprintf("minifaas-%x-", sha256.Sum224([]byte(image))) +func GenContainerPrefix(jobtype string) string { + return fmt.Sprintf("minifaas-%x-", sha256.Sum224([]byte(jobtype))) } diff --git a/jobs.go b/jobs.go new file mode 100644 index 0000000..acd6e51 --- /dev/null +++ b/jobs.go @@ -0,0 +1,39 @@ +package main + +import ( + "github.com/docker/docker/api/types/mount" + + "github.com/nemunaire/minifaas/engine/docker" +) + +type Job struct { + Image string + Cmd []string + DataMount bool +} + +var jobs = map[string]Job{ + "counter": { + Image: "alpine", + Cmd: []string{"sh", "-c", "touch /data/work_done; for i in `seq 10`; do echo $i; sleep 0.5; done"}, + DataMount: true, + }, +} + +func RunJob(jobtype string) (string, error) { + var mnts []mount.Mount + if jobs[jobtype].DataMount { + myVolume, err := docker.CreateVolumeDir("/data", false) + if err != nil { + return "", err + } + mnts = append(mnts, *myVolume) + } + + return docker.Run( + jobtype, + jobs[jobtype].Image, + jobs[jobtype].Cmd, + mnts, + ) +}