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) }