more conf and add deployment commands

This commit is contained in:
Dan Ballard 2015-02-14 11:42:02 -08:00
parent 105f03bf67
commit 02b3ebf87b
13 changed files with 143 additions and 18 deletions

View File

@ -18,7 +18,9 @@ clean:
install:
cp cmd/warren/warren /usr/bin
cp cmd/warrend/warrend /usr/bin
mkdir /var/run/warrend
mkdir -p /var/run/warrend
cp -n cmd/warrend/etc/warrend.json /etc
cp cmd/warrend/etc/init/warrend.conf /etc/init
uninstall:
rm /usr/bin/warren

View File

@ -19,7 +19,7 @@ warren build - Runs go build and populates the following variables:
var buildCmd = &warren.Command{
Name: "build",
Usage: "",
Usage: buildUsage,
Summary: "build the go server in the current directory",
Help: buildUsage,
Run: buildRun,

View File

@ -13,7 +13,7 @@ warren deploy - Deploys the go server and support files
var deployCmd = &warren.Command{
Name: "deploy",
Usage: "",
Usage: deployUsage,
Summary: "deploy the go server and support files",
Help: deployUsage,
Run: deployRun,

View File

@ -17,7 +17,7 @@ warren run - Interfaces with warrend to manage running instances
var runCmd = &warren.Command{
Name: "run",
Usage: "",
Usage: runUsage,
Summary: "Interface to warrend to manage running instances",
Help: runUsage,
Run: runRun,

View File

@ -4,25 +4,18 @@ import (
"fmt"
"github.com/dballard/warren/lib/warren"
"os"
"text/template"
)
var BuildGitHash string
var BuildGitBranch string
var BuildDate string
var usagePrefix = `
warren is a tool for building, deploying and running multiple versions of a Go server
var usagePrefix = `warren is a tool for building, deploying and running multiple versions of a Go server
Usage:
warren command [args]
`
var usageTmpl = template.Must(template.New("usage").Parse(`
Commands:{{range .}}
{{.Name | printf "%-10s"}} {{.Summary}}{{end}}
`))
func usage() {
fmt.Println(BuildGitBranch, " ", BuildGitHash, " ", BuildDate)
fmt.Print(usagePrefix)

50
cmd/warrend/cmd_reg.go Normal file
View File

@ -0,0 +1,50 @@
package main
import (
"github.com/dballard/warren/lib/warren"
"net"
"strings"
)
var regUsage = `
status -
`
var regCmd = &SockCommand{
Command: warren.Command{
Name: "reg",
Usage: regUsage,
Summary: "Register a deployment directory for running",
Help: regUsage,
},
Run: regRun,
}
// reg path [nickname]
func regRun(cmd *SockCommand, c net.Conn, args ...string) {
if (len(args) > 0 && args[0] == "help") || len(args) < 1 {
warren.WriteStringz(c, cmd.Help)
return
}
// get either supplied nick or parse from dir
d := new(Deployment)
d.Path = args[0]
if len(args) >= 2 && strings.TrimSpace(args[1]) != "" {
d.Name = args[1]
} else {
parts := strings.Split(strings.Trim(d.Path, " /"), "/")
if parts[len(parts)-1] == "deploy" {
d.Name = parts[len(parts)-2]
} else {
d.Name = parts[len(parts)-1]
}
}
err := addDeployment(d)
if err != nil {
warren.WriteStringz(c, "ERROR: "+err.Error())
return
}
warren.WriteStringz(c, "Registered deployment "+d.Name+" at "+d.Path)
}

View File

@ -12,7 +12,7 @@ status -
var statusCmd = &SockCommand{
Command: warren.Command{
Name: "status",
Usage: "",
Usage: statusUsage,
Summary: "Print status of warrend",
Help: statusUsage,
},
@ -25,5 +25,10 @@ func statusRun(cmd *SockCommand, c net.Conn, args ...string) {
return
}
warren.WriteStringz(c, "status")
warren.WriteStringz(c, "Status\n")
for _, d := range deployments {
warren.WriteStringz(c, d.Name+": "+d.Path)
}
}

29
cmd/warrend/conf.go Normal file
View File

@ -0,0 +1,29 @@
package main
import (
"encoding/json"
"fmt"
"github.com/dballard/warren/lib/warren"
"os"
)
type Conf struct {
deployments []string
}
var conf *Conf = nil
func LoadConf() {
file, err := os.Open(warren.WarrendConf)
if err != nil {
fmt.Println("Error loading ", warren.WarrendConf, ": ", err)
return
}
decoder := json.NewDecoder(file)
conf = new(Conf)
err = decoder.Decode(conf)
if err != nil {
conf = nil
fmt.Println("Error parsing ", warren.WarrendConf, ": ", err)
}
}

View File

@ -0,0 +1,31 @@
package main
import (
"errors"
"os"
)
type Deployment struct {
Name string
Path string
}
var deployments map[string]*Deployment = make(map[string]*Deployment)
func addDeployment(d *Deployment) error {
// check if exists
if _, ok := deployments[d.Name]; ok {
return errors.New("Deployment with that name already exists")
}
// check if dir exists
if _, err := os.Stat(d.Path); err != nil {
return err
}
// add to conf / save
deployments[d.Name] = d
// TODO: register with runner, like conf would
return nil
}

View File

View File

@ -22,6 +22,10 @@ func (cmd *SockCommand) GetName() string {
return cmd.Name
}
func (cmd *SockCommand) GetSummary() string {
return cmd.Summary
}
func (cmd *SockCommand) Exec(c net.Conn, args []string) {
cmd.Flag.Usage = func() {
// helpFunc(c, c.Name)
@ -82,7 +86,7 @@ func initRunning() {
// drop down pid
pidfile, err := os.Create(warren.WarrendPidFile)
if err != nil {
log.Fatal("Could not create pidfile: ", warren.WarrendPidFile(), " : ", err)
log.Fatal("Could not create pidfile: ", warren.WarrendPidFile, " : ", err)
}
pid := os.Getpid()
fmt.Fprintf(pidfile, "%d", pid)
@ -109,9 +113,15 @@ func main() {
log.Fatal("warrend instance already running")
}
LoadConf()
if conf == nil {
log.Fatal("failed to load conf")
}
initRunning()
warren.RegisterCommand(statusCmd)
warren.RegisterCommand(regCmd)
// Handle signals
c := make(chan os.Signal, 1)

View File

@ -8,6 +8,7 @@ import (
type ICommand interface {
GetName() string
GetSummary() string
}
var commands map[string]ICommand = make(map[string]ICommand)
@ -30,6 +31,10 @@ func (c *Command) GetName() string {
return c.Name
}
func (c *Command) GetSummary() string {
return c.Summary
}
func (c *Command) Exec(args []string) {
c.Flag.Usage = func() {
// helpFunc(c, c.Name)
@ -47,8 +52,8 @@ func GetCommand(name string) ICommand {
}
var usageTmpl = template.Must(template.New("usage").Parse(`
Commands:{{range .}}
{{.Name | printf "%-10s"}} {{.Summary}}{{end}}
Commands:{{range $k, $v := .}}
{{$v.GetName| printf "%-10s"}} {{$v.GetSummary}}{{end}}
`))
func PrintCommandUsage() {

View File

@ -13,7 +13,7 @@ import (
const CmdSockType string = "unix"
const CmdSockAddr string = "/var/run/warrend/warrend.sock"
const WarrendPidFile string = "/var/run/warrend/warrend.pid"
const WarrendConf string = "/etc/warrend.conf"
const WarrendConf string = "/etc/warrend.json"
func GitHash() string {
hash, err := exec.Command("git", "rev-parse", "HEAD").Output()