diff options
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 |
