refactor and add version response

This commit is contained in:
anianz
2020-11-11 00:52:11 +01:00
parent 4db2e8abb3
commit 9917d5e3e4
3 changed files with 79 additions and 22 deletions

13
common/common.go Normal file
View File

@@ -0,0 +1,13 @@
package common
import (
"fmt"
"os"
)
func Check(err error, msg string) {
if err != nil {
fmt.Fprintf(os.Stderr, msg+": %s\n", err)
os.Exit(1)
}
}

24
models.go Normal file
View File

@@ -0,0 +1,24 @@
package resource
type Source struct {
URL string `json:"url"`
Name string `json:"name"`
Token string `json:"token"`
}
type JobVersion struct {
Version int
Stable bool
SubmitTime int
}
type Version struct {
Version int `json:"Version,string"`
}
type Metadata []MetadataField
type MetadataField struct {
Name string `json:"name"`
Value string `json:"value"`
}

View File

@@ -10,30 +10,25 @@ import (
"path/filepath" "path/filepath"
"strings" "strings"
"text/template" "text/template"
resource "github.com/cioplenu/concourse-nomad-resource"
"github.com/cioplenu/concourse-nomad-resource/common"
) )
type SourceConfig struct { type Params struct {
URL string `json:"url"`
Name string `json:"name"`
Token string `json:"token"`
}
type ParamsConfig struct {
JobPath string `json:"job_path"` JobPath string `json:"job_path"`
Vars map[string]string `json:"vars"` Vars map[string]string `json:"vars"`
VarFiles map[string]string `json:"var_files"` VarFiles map[string]string `json:"var_files"`
} }
type OutConfig struct { type OutConfig struct {
Source SourceConfig `json:"source"` Source resource.Source `json:"source"`
Params ParamsConfig `json:"params"` Params Params `json:"params"`
} }
func check(err error, msg string) { type Response struct {
if err != nil { Version resource.Version `json:"version"`
fmt.Fprintf(os.Stderr, msg+": %s\n", err) Metadata resource.Metadata `json:"metadata"`
os.Exit(1)
}
} }
func main() { func main() {
@@ -45,31 +40,31 @@ func main() {
var config OutConfig var config OutConfig
err := json.NewDecoder(os.Stdin).Decode(&config) err := json.NewDecoder(os.Stdin).Decode(&config)
check(err, "Error parsing configuration") common.Check(err, "Error parsing configuration")
templPath := filepath.Join(sourceDir, config.Params.JobPath) templPath := filepath.Join(sourceDir, config.Params.JobPath)
templFile, err := ioutil.ReadFile(templPath) templFile, err := ioutil.ReadFile(templPath)
check(err, "Could not read input file "+templPath) common.Check(err, "Could not read input file "+templPath)
tmpl, err := template.New("job").Parse(string(templFile)) tmpl, err := template.New("job").Parse(string(templFile))
check(err, "Error parsing template") common.Check(err, "Error parsing template")
for name, path := range config.Params.VarFiles { for name, path := range config.Params.VarFiles {
varPath := filepath.Join(sourceDir, path) varPath := filepath.Join(sourceDir, path)
varFile, err := ioutil.ReadFile(varPath) varFile, err := ioutil.ReadFile(varPath)
check(err, "Error reading var file") common.Check(err, "Error reading var file")
config.Params.Vars[name] = strings.TrimSpace(string(varFile)) config.Params.Vars[name] = strings.TrimSpace(string(varFile))
} }
buf := new(bytes.Buffer) buf := new(bytes.Buffer)
err = tmpl.Execute(buf, config.Params.Vars) err = tmpl.Execute(buf, config.Params.Vars)
check(err, "Error executing template") common.Check(err, "Error executing template")
outFile, err := os.Create(templPath) outFile, err := os.Create(templPath)
check(err, "Error creating output file") common.Check(err, "Error creating output file")
defer outFile.Close() defer outFile.Close()
_, err = outFile.Write(buf.Bytes()) _, err = outFile.Write(buf.Bytes())
check(err, "Error writing output file") common.Check(err, "Error writing output file")
cmd := exec.Command( cmd := exec.Command(
"nomad", "nomad",
@@ -89,5 +84,30 @@ func main() {
os.Exit(1) os.Exit(1)
} }
fmt.Println(out.String()) fmt.Fprint(os.Stderr, out.String())
cmd = exec.Command(
"nomad",
"job",
"history",
"-json",
"-address="+config.Source.URL,
"-token="+config.Source.Token,
config.Source.Name,
)
var histResp bytes.Buffer
cmd.Stdout = &histResp
err = cmd.Run()
common.Check(err, "Error checking versions")
var history []resource.JobVersion
json.Unmarshal(histResp.Bytes(), &history)
response := Response{
Version: resource.Version{
Version: history[0].Version,
},
}
json.NewEncoder(os.Stdout).Encode(response)
} }