First example using a JSON blob as the configuration for a job
This commit is contained in:
parent
f4ac7abe1b
commit
073faabc21
2 changed files with 136 additions and 0 deletions
21
examples/job.json
Normal file
21
examples/job.json
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
{
|
||||||
|
"name": "sample",
|
||||||
|
"cpu": 1.4,
|
||||||
|
"ram_mb": 128,
|
||||||
|
"disk_mb": 64,
|
||||||
|
"executor": "docker-compose-executor",
|
||||||
|
"service": false,
|
||||||
|
"ports": 1,
|
||||||
|
"instances": 1,
|
||||||
|
"uris": [
|
||||||
|
{
|
||||||
|
"uri": "https://github.com/mesos/docker-compose-executor/releases/download/0.1.0/sample-app.tar.gz",
|
||||||
|
"extract": true,
|
||||||
|
"cache": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"labels":{
|
||||||
|
"fileName":"sample-app/docker-compose.yml"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
115
examples/jsonClient.go
Normal file
115
examples/jsonClient.go
Normal file
|
@ -0,0 +1,115 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"github.com/rdelval/gorealis"
|
||||||
|
)
|
||||||
|
|
||||||
|
type URIJson struct {
|
||||||
|
|
||||||
|
URI string `json:"uri"`
|
||||||
|
Extract bool `json:"extract"`
|
||||||
|
Cache bool `json:"cache"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type JobJson struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
CPU float64 `json:"cpu"`
|
||||||
|
RAM int64 `json:"ram_mb"`
|
||||||
|
Disk int64 `json:"disk_mb"`
|
||||||
|
Executor string `json:"executor"`
|
||||||
|
Instances int32 `json:"instances"`
|
||||||
|
URIs []URIJson`json:"uris"`
|
||||||
|
Labels map[string]string `json:"labels"`
|
||||||
|
Service bool `json:"service"`
|
||||||
|
Ports int `json:"ports"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (j *JobJson) Validate() bool {
|
||||||
|
|
||||||
|
if j.Name == "" {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if j.CPU == 0.0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if j.RAM == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
if j.Disk == 0 {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
|
||||||
|
jsonFile := flag.String("file", "", "JSON file containing job definition")
|
||||||
|
flag.Parse()
|
||||||
|
|
||||||
|
if *jsonFile == "" {
|
||||||
|
flag.Usage()
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
file, err := os.Open(*jsonFile)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error opening file ", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonJob := new(JobJson)
|
||||||
|
|
||||||
|
err = json.NewDecoder(file).Decode(jsonJob)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error parsing file ", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
jsonJob.Validate()
|
||||||
|
|
||||||
|
//Create new configuration with default transport layer
|
||||||
|
config, err := realis.NewDefaultConfig("http://192.168.33.7:8081")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Print(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
realis.AddBasicAuth(&config, "aurora", "secret")
|
||||||
|
r := realis.NewClient(config)
|
||||||
|
|
||||||
|
auroraJob := realis.NewJob().
|
||||||
|
Environment("prod").
|
||||||
|
Role("vagrant").
|
||||||
|
Name(jsonJob.Name).
|
||||||
|
CPU(jsonJob.CPU).
|
||||||
|
RAM(jsonJob.RAM).
|
||||||
|
Disk(jsonJob.Disk).
|
||||||
|
ExecutorName(jsonJob.Executor).
|
||||||
|
InstanceCount(jsonJob.Instances).
|
||||||
|
IsService(jsonJob.Service).
|
||||||
|
AddPorts(jsonJob.Ports)
|
||||||
|
|
||||||
|
for _, uri := range jsonJob.URIs {
|
||||||
|
auroraJob.AddURIs(uri.Extract, uri.Cache, uri.URI)
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range jsonJob.Labels {
|
||||||
|
auroraJob.AddLabel(k, v)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := r.CreateJob(auroraJob)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(resp)
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue