From ef9c88ac442b1c6eb05fb4eeb93cf21c67e3c3cc Mon Sep 17 00:00:00 2001 From: Michael Quigley Date: Thu, 16 Feb 2023 16:36:08 -0500 Subject: [PATCH] Merge --- CHANGELOG.md | 9 +++++++- cmd/zrok/accessPublic.go | 7 ++++-- cmd/zrok/accessPublicValidate.go | 37 ++++++++++++++++++++++++++++++++ cmd/zrok/controller.go | 5 ++++- cmd/zrok/controllerValidate.go | 36 +++++++++++++++++++++++++++++++ cmd/zrok/status.go | 22 ++++++++++++++++--- 6 files changed, 109 insertions(+), 7 deletions(-) create mode 100644 cmd/zrok/accessPublicValidate.go create mode 100644 cmd/zrok/controllerValidate.go diff --git a/CHANGELOG.md b/CHANGELOG.md index e8ece483..12df6978 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ CHANGE: Fix for `zrok enable` error path handling (https://github.com/openziti/zrok/issues/244) +FEATURE: `zrok controller validate` and `zrok access public validate` will both perform a quick syntax validation on controller and public frontend configuration documents (https://github.com/openziti/zrok/issues/238) + + $ zrok controller validate etc/dev.yml + [ERROR]: controller config validation failed (error loading controller config 'etc/dev.yml': field 'maintenance': field 'registration': field 'expiration_timeout': got [bool], expected [time.Duration]) + +CHANGE: `zrok status` no longer shows secrets (secret token, ziti identity) unless the `--secrets` flag is passed (https://github.com/openziti/zrok/issues/243) + # v0.3.1 CHANGE: Incorporate initial docker image build (https://github.com/openziti/zrok/issues/217) @@ -78,7 +85,7 @@ FIX: Fixed PostgreSQL migration issue where sequences got reset and resulted in FIX: Remove `frontend` instances when `zrok disable`-ing an environment containing them (https://github.com/openziti/zrok/issues/171) -# v0.3.0 +# v0.3.x Series The `v0.2` series was a _proof-of-concept_ implementation for the overall `zrok` architecture and the concept. diff --git a/cmd/zrok/accessPublic.go b/cmd/zrok/accessPublic.go index f3353929..a05743f6 100644 --- a/cmd/zrok/accessPublic.go +++ b/cmd/zrok/accessPublic.go @@ -9,8 +9,11 @@ import ( "github.com/spf13/cobra" ) +var accessPublicCmd *accessPublicCommand + func init() { - accessCmd.AddCommand(newAccessPublicCommand().cmd) + accessPublicCmd = newAccessPublicCommand() + accessCmd.AddCommand(accessPublicCmd.cmd) } type accessPublicCommand struct { @@ -29,7 +32,7 @@ func newAccessPublicCommand() *accessPublicCommand { return command } -func (self *accessPublicCommand) run(_ *cobra.Command, args []string) { +func (cmd *accessPublicCommand) run(_ *cobra.Command, args []string) { cfg := publicFrontend.DefaultConfig() if len(args) == 1 { if err := cfg.Load(args[0]); err != nil { diff --git a/cmd/zrok/accessPublicValidate.go b/cmd/zrok/accessPublicValidate.go new file mode 100644 index 00000000..a7de00d5 --- /dev/null +++ b/cmd/zrok/accessPublicValidate.go @@ -0,0 +1,37 @@ +package main + +import ( + "fmt" + "github.com/michaelquigley/cf" + "github.com/openziti/zrok/endpoints/publicFrontend" + "github.com/openziti/zrok/tui" + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" +) + +func init() { + accessPublicCmd.cmd.AddCommand(newAccessPublicValidateCommand().cmd) +} + +type accessPublicValidateCommand struct { + cmd *cobra.Command +} + +func newAccessPublicValidateCommand() *accessPublicValidateCommand { + cmd := &cobra.Command{ + Use: "validate ", + Short: "Validate a zrok access public configuration document", + Args: cobra.ExactArgs(1), + } + command := &accessPublicValidateCommand{cmd: cmd} + cmd.Run = command.run + return command +} + +func (cmd *accessPublicValidateCommand) run(_ *cobra.Command, args []string) { + cfg := publicFrontend.DefaultConfig() + if err := cfg.Load(args[0]); err != nil { + tui.Error(fmt.Sprintf("unable to load configuration '%v'", args[0]), err) + } + logrus.Infof(cf.Dump(cfg, cf.DefaultOptions())) +} diff --git a/cmd/zrok/controller.go b/cmd/zrok/controller.go index cf62688d..6e498797 100644 --- a/cmd/zrok/controller.go +++ b/cmd/zrok/controller.go @@ -7,8 +7,11 @@ import ( "github.com/spf13/cobra" ) +var controllerCmd *controllerCommand + func init() { - rootCmd.AddCommand(newControllerCommand().cmd) + controllerCmd = newControllerCommand() + rootCmd.AddCommand(controllerCmd.cmd) } type controllerCommand struct { diff --git a/cmd/zrok/controllerValidate.go b/cmd/zrok/controllerValidate.go new file mode 100644 index 00000000..a09d106f --- /dev/null +++ b/cmd/zrok/controllerValidate.go @@ -0,0 +1,36 @@ +package main + +import ( + "github.com/michaelquigley/cf" + "github.com/openziti/zrok/controller" + "github.com/openziti/zrok/tui" + "github.com/sirupsen/logrus" + "github.com/spf13/cobra" +) + +func init() { + controllerCmd.cmd.AddCommand(newControllerValidateCommand().cmd) +} + +type controllerValidateCommand struct { + cmd *cobra.Command +} + +func newControllerValidateCommand() *controllerValidateCommand { + cmd := &cobra.Command{ + Use: "validate ", + Short: "Validate a zrok controller configuration document", + Args: cobra.ExactArgs(1), + } + command := &controllerValidateCommand{cmd: cmd} + cmd.Run = command.run + return command +} + +func (cmd *controllerValidateCommand) run(_ *cobra.Command, args []string) { + cfg, err := controller.LoadConfig(args[0]) + if err != nil { + tui.Error("controller config validation failed", err) + } + logrus.Infof(cf.Dump(cfg, cf.DefaultOptions())) +} diff --git a/cmd/zrok/status.go b/cmd/zrok/status.go index 76f43fb6..3cdccb8b 100644 --- a/cmd/zrok/status.go +++ b/cmd/zrok/status.go @@ -14,7 +14,8 @@ func init() { } type statusCommand struct { - cmd *cobra.Command + secrets bool + cmd *cobra.Command } func newStatusCommand() *statusCommand { @@ -25,6 +26,7 @@ func newStatusCommand() *statusCommand { Args: cobra.ExactArgs(0), } command := &statusCommand{cmd: cmd} + cmd.Flags().BoolVar(&command.secrets, "secrets", false, "Show secrets in status output") cmd.Run = command.run return command } @@ -57,8 +59,22 @@ func (cmd *statusCommand) run(_ *cobra.Command, _ []string) { t.SetOutputMirror(os.Stdout) t.SetStyle(table.StyleColoredDark) t.AppendHeader(table.Row{"Property", "Value"}) - t.AppendRow(table.Row{"Secret Token", zrd.Env.Token}) - t.AppendRow(table.Row{"Ziti Identity", zrd.Env.ZId}) + if cmd.secrets { + t.AppendRow(table.Row{"Secret Token", zrd.Env.Token}) + t.AppendRow(table.Row{"Ziti Identity", zrd.Env.ZId}) + } else { + secretToken := "<>" + if zrd.Env.Token == "" { + secretToken = "<>" + } + t.AppendRow(table.Row{"Secret Token", secretToken}) + + zId := "<>" + if zrd.Env.ZId == "" { + zId = "<>" + } + t.AppendRow(table.Row{"Ziti Identity", zId}) + } t.Render() } _, _ = fmt.Fprintf(os.Stdout, "\n")