summaryrefslogtreecommitdiff
path: root/admin.go
diff options
context:
space:
mode:
authorMatthew Holt <mholt@users.noreply.github.com>2019-06-28 15:39:41 -0600
committerMatthew Holt <mholt@users.noreply.github.com>2019-06-28 15:39:41 -0600
commita4bdf249dbfb0f35e0a35dad6a38db371b126800 (patch)
tree00242a860d45e741fe9543875a58a15c92e7102d /admin.go
parent006dc1792f0118552f81e17cfbe2802a3180c352 (diff)
Caddy 2 gets a CLI! And admin endpoint is now configurable via JSON
Diffstat (limited to 'admin.go')
-rw-r--r--admin.go51
1 files changed, 48 insertions, 3 deletions
diff --git a/admin.go b/admin.go
index cacdfd0..3ed9bf4 100644
--- a/admin.go
+++ b/admin.go
@@ -22,12 +22,47 @@ var (
cfgEndptSrvMu sync.Mutex
)
-// StartAdmin starts Caddy's administration endpoint.
-func StartAdmin(addr string) error {
+// AdminConfig configures the admin endpoint.
+type AdminConfig struct {
+ Listen string `json:"listen,omitempty"`
+}
+
+// DefaultAdminConfig is the default configuration
+// for the administration endpoint.
+var DefaultAdminConfig = &AdminConfig{
+ Listen: "localhost:2019",
+}
+
+// StartAdmin starts Caddy's administration endpoint,
+// bootstrapping it with an optional configuration
+// in the format of JSON bytes. It opens a listener
+// resource. When no longer needed, StopAdmin should
+// be called.
+func StartAdmin(initialConfigJSON []byte) error {
cfgEndptSrvMu.Lock()
defer cfgEndptSrvMu.Unlock()
- ln, err := net.Listen("tcp", addr)
+ adminConfig := DefaultAdminConfig
+ if len(initialConfigJSON) > 0 {
+ var config *Config
+ err := json.Unmarshal(initialConfigJSON, &config)
+ if err != nil {
+ return fmt.Errorf("unmarshaling bootstrap config: %v", err)
+ }
+ if config != nil && config.Admin != nil {
+ adminConfig = config.Admin
+ }
+ if cfgEndptSrv != nil {
+ ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
+ defer cancel()
+ err := cfgEndptSrv.Shutdown(ctx)
+ if err != nil {
+ return fmt.Errorf("shutting down old admin endpoint: %v", err)
+ }
+ }
+ }
+
+ ln, err := net.Listen("tcp", adminConfig.Listen)
if err != nil {
return err
}
@@ -60,6 +95,16 @@ func StartAdmin(addr string) error {
go cfgEndptSrv.Serve(ln)
+ log.Println("Caddy 2 admin endpoint listening on", adminConfig.Listen)
+
+ if len(initialConfigJSON) > 0 {
+ err := Load(bytes.NewReader(initialConfigJSON))
+ if err != nil {
+ return fmt.Errorf("loading initial config: %v", err)
+ }
+ log.Println("Caddy 2 serving initial configuration")
+ }
+
return nil
}