mirror of
https://github.com/outbackdingo/matchbox.git
synced 2026-01-27 10:19:35 +00:00
cmd/bootcfg: Start HTTP and gRPC (optional) via bootcfg binary
This commit is contained in:
@@ -1,93 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/url"
|
||||
"os"
|
||||
|
||||
"github.com/coreos/pkg/capnslog"
|
||||
"github.com/coreos/pkg/flagutil"
|
||||
"google.golang.org/grpc"
|
||||
|
||||
"github.com/coreos/coreos-baremetal/bootcfg/config"
|
||||
bootcfg "github.com/coreos/coreos-baremetal/bootcfg/server"
|
||||
pb "github.com/coreos/coreos-baremetal/bootcfg/server/serverpb"
|
||||
"github.com/coreos/coreos-baremetal/bootcfg/storage"
|
||||
)
|
||||
|
||||
var (
|
||||
// version provided by compile time flag: -ldflags "-X main.version $GIT_SHA"
|
||||
version = "was not built properly"
|
||||
log = capnslog.NewPackageLogger("github.com/coreos/coreos-baremetal/cmd/bootcfg-rpc", "main")
|
||||
)
|
||||
|
||||
func main() {
|
||||
flags := struct {
|
||||
address string
|
||||
configPath string
|
||||
dataPath string
|
||||
version bool
|
||||
help bool
|
||||
}{}
|
||||
flag.StringVar(&flags.address, "address", "127.0.0.1:8081", "gRPC listen address")
|
||||
flag.StringVar(&flags.configPath, "config", "/etc/bootcfg.conf", "Path to config file")
|
||||
flag.StringVar(&flags.dataPath, "data-path", "/etc/bootcfg", "Path to data directory")
|
||||
// subcommands
|
||||
flag.BoolVar(&flags.version, "version", false, "print version and exit")
|
||||
flag.BoolVar(&flags.help, "help", false, "print usage and exit")
|
||||
|
||||
// parse command-line and environment variable arguments
|
||||
flag.Parse()
|
||||
if err := flagutil.SetFlagsFromEnv(flag.CommandLine, "BOOTCFG"); err != nil {
|
||||
log.Fatal(err.Error())
|
||||
}
|
||||
|
||||
if flags.version {
|
||||
fmt.Println(version)
|
||||
return
|
||||
}
|
||||
|
||||
if flags.help {
|
||||
flag.Usage()
|
||||
return
|
||||
}
|
||||
|
||||
// validate arguments
|
||||
if url, err := url.Parse(flags.address); err != nil || url.String() == "" {
|
||||
log.Fatal("A valid HTTP listen address is required")
|
||||
}
|
||||
if finfo, err := os.Stat(flags.configPath); err != nil || finfo.IsDir() {
|
||||
log.Fatal("A path to a config file is required")
|
||||
}
|
||||
if finfo, err := os.Stat(flags.dataPath); err != nil || !finfo.IsDir() {
|
||||
log.Fatal("A path to a data directory is required")
|
||||
}
|
||||
|
||||
// load bootstrap config
|
||||
cfg, err := config.LoadConfig(flags.configPath)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// storage
|
||||
store := storage.NewFileStore(&storage.Config{
|
||||
Dir: flags.dataPath,
|
||||
Groups: cfg.Groups,
|
||||
})
|
||||
|
||||
// gRPC Server
|
||||
log.Infof("starting bootcfg gRPC server on %s", flags.address)
|
||||
lis, err := net.Listen("tcp", flags.address)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to start listening: %v", err)
|
||||
}
|
||||
grpcServer := grpc.NewServer()
|
||||
bootcfgServer := bootcfg.NewServer(&bootcfg.Config{
|
||||
Store: store,
|
||||
})
|
||||
pb.RegisterGroupsServer(grpcServer, bootcfgServer)
|
||||
pb.RegisterProfilesServer(grpcServer, bootcfgServer)
|
||||
grpcServer.Serve(lis)
|
||||
}
|
||||
@@ -3,6 +3,7 @@ package main
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"os"
|
||||
@@ -13,6 +14,8 @@ import (
|
||||
|
||||
"github.com/coreos/coreos-baremetal/bootcfg/api"
|
||||
"github.com/coreos/coreos-baremetal/bootcfg/config"
|
||||
"github.com/coreos/coreos-baremetal/bootcfg/rpc"
|
||||
"github.com/coreos/coreos-baremetal/bootcfg/server"
|
||||
"github.com/coreos/coreos-baremetal/bootcfg/sign"
|
||||
"github.com/coreos/coreos-baremetal/bootcfg/storage"
|
||||
)
|
||||
@@ -26,6 +29,7 @@ var (
|
||||
func main() {
|
||||
flags := struct {
|
||||
address string
|
||||
rpcAddress string
|
||||
configPath string
|
||||
dataPath string
|
||||
assetsPath string
|
||||
@@ -35,6 +39,7 @@ func main() {
|
||||
help bool
|
||||
}{}
|
||||
flag.StringVar(&flags.address, "address", "127.0.0.1:8080", "HTTP listen address")
|
||||
flag.StringVar(&flags.rpcAddress, "rpcAddress", "", "RPC listen address")
|
||||
flag.StringVar(&flags.configPath, "config", "/etc/bootcfg.conf", "Path to config file")
|
||||
flag.StringVar(&flags.dataPath, "data-path", "/etc/bootcfg", "Path to data directory")
|
||||
flag.StringVar(&flags.assetsPath, "assets-path", "/var/bootcfg", "Path to static assets")
|
||||
@@ -108,16 +113,35 @@ func main() {
|
||||
Groups: cfg.Groups,
|
||||
})
|
||||
|
||||
// HTTP server
|
||||
bootcfgServer := server.NewServer(&server.Config{
|
||||
Store: store,
|
||||
})
|
||||
|
||||
// gRPC Server (feature hidden)
|
||||
if flags.rpcAddress != "" {
|
||||
grpcServer, err := rpc.NewServer(bootcfgServer)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Infof("starting bootcfg gRPC server on %s", flags.rpcAddress)
|
||||
lis, err := net.Listen("tcp", flags.rpcAddress)
|
||||
if err != nil {
|
||||
log.Fatalf("failed to start listening: %v", err)
|
||||
}
|
||||
go grpcServer.Serve(lis)
|
||||
defer grpcServer.Stop()
|
||||
}
|
||||
|
||||
// HTTP Server
|
||||
config := &api.Config{
|
||||
Store: store,
|
||||
AssetsPath: flags.assetsPath,
|
||||
Signer: signer,
|
||||
ArmoredSigner: armoredSigner,
|
||||
}
|
||||
server := api.NewServer(config)
|
||||
httpServer := api.NewServer(config)
|
||||
log.Infof("starting bootcfg HTTP server on %s", flags.address)
|
||||
err = http.ListenAndServe(flags.address, server.HTTPHandler())
|
||||
err = http.ListenAndServe(flags.address, httpServer.HTTPHandler())
|
||||
if err != nil {
|
||||
log.Fatalf("failed to start listening: %v", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user