Skip to content

Commit

Permalink
Merge pull request #832 from ripienaar/config_reload
Browse files Browse the repository at this point in the history
Add basic server config reload feature
  • Loading branch information
ripienaar committed Jul 27, 2023
2 parents b3dbb08 + 572bb55 commit 457dd07
Show file tree
Hide file tree
Showing 3 changed files with 84 additions and 0 deletions.
1 change: 1 addition & 0 deletions cli/server_command.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ func configureServerCommand(app commandHost) {
configureServerAccountCommand(srv)
configureServerCheckCommand(srv)
configureServerClusterCommand(srv)
configureServerConfigCommand(srv)
configureServerInfoCommand(srv)
configureServerListCommand(srv)
configureServerMappingCommand(srv)
Expand Down
82 changes: 82 additions & 0 deletions cli/server_config_command.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
// Copyright 2023 The NATS Authors
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package cli

import (
"encoding/json"
"fmt"

"github.com/choria-io/fisk"
"github.com/nats-io/nats-server/v2/server"
)

type SrvConfigCmd struct {
serverID string
force bool
}

func configureServerConfigCommand(srv *fisk.CmdClause) {
c := SrvConfigCmd{}

cfg := srv.Command("config", "Interact with server configuration")

reload := cfg.Command("reload", "Reloads the runtime configuration").Action(c.reloadAction)
reload.Arg("id", "The server ID to trigger a reload for").Required().StringVar(&c.serverID)
reload.Flag("force", "Force reload without prompting").BoolVar(&c.force)
}

func (c *SrvConfigCmd) reloadAction(pc *fisk.ParseContext) error {
nc, err := newNatsConn("", natsOpts()...)
if err != nil {
return err
}
defer nc.Close()

if !c.force {
resps, err := doReq(nil, fmt.Sprintf("$SYS.REQ.SERVER.%s.VARZ", c.serverID), 1, nc)
if err != nil {
return err
}

if len(resps) != 1 {
return fmt.Errorf("invalid response from %d servers", len(resps))
}
vz := server.ServerAPIResponse{}
err = json.Unmarshal(resps[0], &vz)
if err != nil {
return err
}

ok, err := askConfirmation(fmt.Sprintf("Really reload configuration for %s (%s) on %s", vz.Server.Name, vz.Server.ID, vz.Server.Host), false)
if err != nil {
return err
}

if !ok {
return nil
}
}

resps, err := doReq(nil, fmt.Sprintf("$SYS.REQ.SERVER.%s.RELOAD", c.serverID), 1, nc)
if err != nil {
return err
}

if len(resps) != 1 {
return fmt.Errorf("invalid response from %d servers", len(resps))
}

nfo := &SrvInfoCmd{id: c.serverID}
return nfo.info(pc)
}
1 change: 1 addition & 0 deletions cli/server_info_command.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ func (c *SrvInfoCmd) info(_ *fisk.ParseContext) error {
cols.AddRow("Git Commit", varz.GitCommit)
cols.AddRow("Go Version", varz.GoVersion)
cols.AddRow("Start Time", varz.Start)
cols.AddRow("Config Load Time", varz.ConfigLoadTime)
cols.AddRow("Uptime", varz.Uptime)

cols.AddSectionTitle("Connection Details")
Expand Down

0 comments on commit 457dd07

Please sign in to comment.