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
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"log"
|
||||
"os"
|
||||
"os/signal"
|
||||
|
||||
"gopkg.in/urfave/cli.v1"
|
||||
|
||||
"ur.gs/crockery/internal/services"
|
||||
"ur.gs/crockery/internal/store"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -67,101 +60,3 @@ func main() {
|
||||
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