refactor and add version response
This commit is contained in:
		
							
								
								
									
										13
									
								
								common/common.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								common/common.go
									
									
									
									
									
										Normal 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
									
								
							
							
						
						
									
										24
									
								
								models.go
									
									
									
									
									
										Normal 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"`
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										64
									
								
								out/main.go
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								out/main.go
									
									
									
									
									
								
							@@ -10,30 +10,25 @@ import (
 | 
			
		||||
	"path/filepath"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"text/template"
 | 
			
		||||
 | 
			
		||||
	resource "github.com/cioplenu/concourse-nomad-resource"
 | 
			
		||||
	"github.com/cioplenu/concourse-nomad-resource/common"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
type SourceConfig struct {
 | 
			
		||||
	URL   string `json:"url"`
 | 
			
		||||
	Name  string `json:"name"`
 | 
			
		||||
	Token string `json:"token"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type ParamsConfig struct {
 | 
			
		||||
type Params struct {
 | 
			
		||||
	JobPath  string            `json:"job_path"`
 | 
			
		||||
	Vars     map[string]string `json:"vars"`
 | 
			
		||||
	VarFiles map[string]string `json:"var_files"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type OutConfig struct {
 | 
			
		||||
	Source SourceConfig `json:"source"`
 | 
			
		||||
	Params ParamsConfig `json:"params"`
 | 
			
		||||
	Source resource.Source `json:"source"`
 | 
			
		||||
	Params Params          `json:"params"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func check(err error, msg string) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Fprintf(os.Stderr, msg+": %s\n", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
type Response struct {
 | 
			
		||||
	Version  resource.Version  `json:"version"`
 | 
			
		||||
	Metadata resource.Metadata `json:"metadata"`
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
@@ -45,31 +40,31 @@ func main() {
 | 
			
		||||
 | 
			
		||||
	var config OutConfig
 | 
			
		||||
	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)
 | 
			
		||||
	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))
 | 
			
		||||
	check(err, "Error parsing template")
 | 
			
		||||
	common.Check(err, "Error parsing template")
 | 
			
		||||
 | 
			
		||||
	for name, path := range config.Params.VarFiles {
 | 
			
		||||
		varPath := filepath.Join(sourceDir, path)
 | 
			
		||||
		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))
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	buf := new(bytes.Buffer)
 | 
			
		||||
 | 
			
		||||
	err = tmpl.Execute(buf, config.Params.Vars)
 | 
			
		||||
	check(err, "Error executing template")
 | 
			
		||||
	common.Check(err, "Error executing template")
 | 
			
		||||
 | 
			
		||||
	outFile, err := os.Create(templPath)
 | 
			
		||||
	check(err, "Error creating output file")
 | 
			
		||||
	common.Check(err, "Error creating output file")
 | 
			
		||||
	defer outFile.Close()
 | 
			
		||||
	_, err = outFile.Write(buf.Bytes())
 | 
			
		||||
	check(err, "Error writing output file")
 | 
			
		||||
	common.Check(err, "Error writing output file")
 | 
			
		||||
 | 
			
		||||
	cmd := exec.Command(
 | 
			
		||||
		"nomad",
 | 
			
		||||
@@ -89,5 +84,30 @@ func main() {
 | 
			
		||||
		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)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user