diff options
| author | Shulhan <ms@kilabit.info> | 2022-04-16 22:30:27 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2022-04-16 22:30:27 +0700 |
| commit | 0156deaaaa0edbb93cfbf60a8cac99fc17d63a60 (patch) | |
| tree | 0e373dd81bf402acc78ddc19356f78cb81d5cdb2 /cmd/resolver/resolver.go | |
| parent | 8947cc8b6a9751b3cae3d4d22fdf3ac154f77dfd (diff) | |
| download | rescached-0156deaaaa0edbb93cfbf60a8cac99fc17d63a60.tar.xz | |
cmd/resolver: implement sub command to update environment
The env command now accept sub command "update" with argument path to
the file or "-" for standard input.
The content of file is formatted using JSON, the same as output of "env"
command.
If the content of file is valid, server will be restarted immediately.
Diffstat (limited to 'cmd/resolver/resolver.go')
| -rw-r--r-- | cmd/resolver/resolver.go | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/cmd/resolver/resolver.go b/cmd/resolver/resolver.go index b7129cc..697953d 100644 --- a/cmd/resolver/resolver.go +++ b/cmd/resolver/resolver.go @@ -6,8 +6,10 @@ package main import ( "encoding/json" "fmt" + "io" "log" "math/rand" + "os" "strings" "time" @@ -128,6 +130,45 @@ func (rsol *resolver) doCmdEnv() { fmt.Printf("%s\n", envJson) } +// doCmdEnvUpdate update the server environment by reading the JSON formatted +// environment from file or from stdin. +func (rsol *resolver) doCmdEnvUpdate(fileOrStdin string) (err error) { + var ( + resc = rsol.newRescachedClient() + + env *rescached.Environment + envJson []byte + ) + + if fileOrStdin == "-" { + envJson, err = io.ReadAll(os.Stdin) + } else { + envJson, err = os.ReadFile(fileOrStdin) + } + if err != nil { + return fmt.Errorf("%s %s: %w", cmdEnv, subCmdUpdate, err) + } + + err = json.Unmarshal(envJson, &env) + if err != nil { + return fmt.Errorf("%s %s: %w", cmdEnv, subCmdUpdate, err) + } + + env, err = resc.EnvUpdate(env) + if err != nil { + return fmt.Errorf("%s %s: %w", cmdEnv, subCmdUpdate, err) + } + + envJson, err = json.MarshalIndent(env, "", " ") + if err != nil { + return fmt.Errorf("%s %s: %w", cmdEnv, subCmdUpdate, err) + } + + fmt.Printf("%s\n", envJson) + + return nil +} + func (rsol *resolver) doCmdQuery(args []string) { var ( maxAttempts = defAttempts |
