Split crockery init and crockery run into separate files
This commit is contained in:
59
cmd/crockery/cmd_init.go
Normal file
59
cmd/crockery/cmd_init.go
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"gopkg.in/urfave/cli.v1"
|
||||||
|
|
||||||
|
"ur.gs/crockery/internal/store"
|
||||||
|
)
|
||||||
|
|
||||||
|
func crockeryInit(c *cli.Context) error {
|
||||||
|
db := c.GlobalString("db")
|
||||||
|
domain := c.String("domain")
|
||||||
|
certFile := c.String("cert")
|
||||||
|
keyFile := c.String("key")
|
||||||
|
|
||||||
|
if db == "" {
|
||||||
|
return fmt.Errorf("No crockery database file specified")
|
||||||
|
}
|
||||||
|
|
||||||
|
if domain == "" {
|
||||||
|
return fmt.Errorf("A domain must be specified")
|
||||||
|
}
|
||||||
|
|
||||||
|
// FIXME: we can make cert+key optional at some point and have them be
|
||||||
|
// generated on-demand via ACME during `crockery run` instead.
|
||||||
|
if certFile == "" {
|
||||||
|
return fmt.Errorf("A certificate file must be specified")
|
||||||
|
}
|
||||||
|
|
||||||
|
if keyFile == "" {
|
||||||
|
return fmt.Errorf("A key file must be specified")
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := os.Stat(db); !os.IsNotExist(err) {
|
||||||
|
return fmt.Errorf("File %q already exists, refusing to overwrite", db)
|
||||||
|
}
|
||||||
|
|
||||||
|
certPEM, err := ioutil.ReadFile(certFile)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed to read certificate from %q: %v", certFile, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
keyPEM, err := ioutil.ReadFile(keyFile)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Failed to read key from %q: %v", keyFile, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := store.Init(db, domain, certPEM, keyPEM); err != nil {
|
||||||
|
return fmt.Errorf("Couldn't initialize datase %q: %v", db, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Created %q for domain %q. Next step:\n\t%s -db %s run", db, domain, os.Args[0], db)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
65
cmd/crockery/cmd_run.go
Normal file
65
cmd/crockery/cmd_run.go
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
|
||||||
|
"gopkg.in/urfave/cli.v1"
|
||||||
|
|
||||||
|
"ur.gs/crockery/internal/services"
|
||||||
|
"ur.gs/crockery/internal/store"
|
||||||
|
)
|
||||||
|
|
||||||
|
func crockeryRun(c *cli.Context) error {
|
||||||
|
db := c.GlobalString("db")
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
|
||||||
|
if db == "" {
|
||||||
|
return fmt.Errorf("No crockery database file specified")
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Loading config from file %q", db)
|
||||||
|
|
||||||
|
datastore, err := store.New(context.Background(), db)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer datastore.Close()
|
||||||
|
|
||||||
|
if datastore.Domain() == "" {
|
||||||
|
return fmt.Errorf("No domain configured in file %q", db)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("Starting crockery for domain %q", datastore.Domain())
|
||||||
|
|
||||||
|
srv, err := services.New(ctx, datastore)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Couldn't start services:", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
sig := make(chan os.Signal, 1)
|
||||||
|
done := make(chan bool)
|
||||||
|
|
||||||
|
signal.Notify(sig, os.Interrupt)
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
s := <-sig
|
||||||
|
log.Print("Got signal: ", s)
|
||||||
|
cancel()
|
||||||
|
}()
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
srv.Run()
|
||||||
|
close(done)
|
||||||
|
}()
|
||||||
|
|
||||||
|
<-done
|
||||||
|
|
||||||
|
log.Println("All services finished, exiting")
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
@@ -1,17 +1,10 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"log"
|
"log"
|
||||||
"os"
|
"os"
|
||||||
"os/signal"
|
|
||||||
|
|
||||||
"gopkg.in/urfave/cli.v1"
|
"gopkg.in/urfave/cli.v1"
|
||||||
|
|
||||||
"ur.gs/crockery/internal/services"
|
|
||||||
"ur.gs/crockery/internal/store"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
@@ -67,101 +60,3 @@ func main() {
|
|||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func crockeryInit(c *cli.Context) error {
|
|
||||||
db := c.GlobalString("db")
|
|
||||||
domain := c.String("domain")
|
|
||||||
certFile := c.String("cert")
|
|
||||||
keyFile := c.String("key")
|
|
||||||
|
|
||||||
if db == "" {
|
|
||||||
return fmt.Errorf("No crockery database file specified")
|
|
||||||
}
|
|
||||||
|
|
||||||
if domain == "" {
|
|
||||||
return fmt.Errorf("A domain must be specified")
|
|
||||||
}
|
|
||||||
|
|
||||||
// FIXME: we can make cert+key optional at some point and have them be
|
|
||||||
// generated on-demand via ACME during `crockery run` instead.
|
|
||||||
if certFile == "" {
|
|
||||||
return fmt.Errorf("A certificate file must be specified")
|
|
||||||
}
|
|
||||||
|
|
||||||
if keyFile == "" {
|
|
||||||
return fmt.Errorf("A key file must be specified")
|
|
||||||
}
|
|
||||||
|
|
||||||
if _, err := os.Stat(db); !os.IsNotExist(err) {
|
|
||||||
return fmt.Errorf("File %q already exists, refusing to overwrite", db)
|
|
||||||
}
|
|
||||||
|
|
||||||
certPEM, err := ioutil.ReadFile(certFile)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Failed to read certificate from %q: %v", certFile, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
keyPEM, err := ioutil.ReadFile(keyFile)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Failed to read key from %q: %v", keyFile, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := store.Init(db, domain, certPEM, keyPEM); err != nil {
|
|
||||||
return fmt.Errorf("Couldn't initialize datase %q: %v", db, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Printf("Created %q for domain %q. Next step:\n\t%s -db %s run", db, domain, os.Args[0], db)
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func crockeryRun(c *cli.Context) error {
|
|
||||||
db := c.GlobalString("db")
|
|
||||||
ctx, cancel := context.WithCancel(context.Background())
|
|
||||||
|
|
||||||
if db == "" {
|
|
||||||
return fmt.Errorf("No crockery database file specified")
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Printf("Loading config from file %q", db)
|
|
||||||
|
|
||||||
datastore, err := store.New(context.Background(), db)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
defer datastore.Close()
|
|
||||||
|
|
||||||
if datastore.Domain() == "" {
|
|
||||||
return fmt.Errorf("No domain configured in file %q", db)
|
|
||||||
}
|
|
||||||
|
|
||||||
log.Printf("Starting crockery for domain %q", datastore.Domain())
|
|
||||||
|
|
||||||
srv, err := services.New(ctx, datastore)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("Couldn't start services:", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
sig := make(chan os.Signal, 1)
|
|
||||||
done := make(chan bool)
|
|
||||||
|
|
||||||
signal.Notify(sig, os.Interrupt)
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
s := <-sig
|
|
||||||
log.Print("Got signal: ", s)
|
|
||||||
cancel()
|
|
||||||
}()
|
|
||||||
|
|
||||||
go func() {
|
|
||||||
srv.Run()
|
|
||||||
close(done)
|
|
||||||
}()
|
|
||||||
|
|
||||||
<-done
|
|
||||||
|
|
||||||
log.Println("All services finished, exiting")
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
Reference in New Issue
Block a user