diff --git a/cmd/tetra/common/client.go b/cmd/tetra/common/client.go index 3472f919ab8..e3e69868a0b 100644 --- a/cmd/tetra/common/client.go +++ b/cmd/tetra/common/client.go @@ -11,12 +11,10 @@ import ( "syscall" "time" - "github.com/sirupsen/logrus" - "github.com/cilium/tetragon/api/v1/tetragon" "github.com/cilium/tetragon/pkg/defaults" "github.com/cilium/tetragon/pkg/logger" - "github.com/spf13/viper" + "github.com/sirupsen/logrus" "google.golang.org/grpc" "google.golang.org/grpc/credentials/insecure" ) @@ -25,7 +23,7 @@ type daemonInfo struct { ServerAddr string `json:"server_address"` } -func getActiveServAddr(fname string) (string, error) { +func readActiveServerAddress(fname string) (string, error) { f, err := os.Open(fname) if err != nil { return "", err @@ -41,43 +39,28 @@ func getActiveServAddr(fname string) (string, error) { } func connect(ctx context.Context) (*grpc.ClientConn, string, error) { - connCtx, connCancel := context.WithTimeout(ctx, viper.GetDuration(KeyTimeout)) + connCtx, connCancel := context.WithTimeout(ctx, Timeout) defer connCancel() - var conn *grpc.ClientConn - var serverAddr string - var err error - - // The client cli can run remotely so to support most cases transparently - // Check if the server address was set - // - If yes: use it directly, users know better - // - If no: then try the default tetragon-info.json file to find the best - // address if possible (could be unix socket). This also covers the - // case that default address is localhost so we are operating in localhost - // context anyway. - // If that address is set try it, if it fails for any reason then retry - // last time with the server address. - if viper.IsSet(KeyServerAddress) == false { - // server-address was not set by user, try the tetragon-info.json file - serverAddr, err = getActiveServAddr(defaults.InitInfoFile) - if err == nil && serverAddr != "" { - conn, err = grpc.DialContext(connCtx, serverAddr, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock()) - } - // Handle both errors + // resolve ServerAdress: if flag set by user, use it, otherwise try to read + // it from tetragon-info.json, if it doesn't exist, just use default value + if ServerAddress == "" { + var err error + ServerAddress, err = readActiveServerAddress(defaults.InitInfoFile) + // if address could not be found in tetragon-info.json file, use default if err != nil { + ServerAddress = defaultServerAddress + logger.GetLogger().WithField("ServerAddress", ServerAddress).Debug("connect to server using default value") + } else { logger.GetLogger().WithFields(logrus.Fields{ - "InitInfoFile": defaults.InitInfoFile, - "server-address": serverAddr, - }).WithError(err).Debugf("Failed to connect to server") + "InitInfoFile": defaults.InitInfoFile, + "ServerAddress": ServerAddress, + }).Debug("connect to server using address in info file") } } - if conn == nil { - // Try the server-address prameter - serverAddr = viper.GetString(KeyServerAddress) - conn, err = grpc.DialContext(connCtx, serverAddr, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock()) - } - return conn, serverAddr, err + conn, err := grpc.DialContext(connCtx, ServerAddress, grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithBlock()) + return conn, ServerAddress, err } func CliRunErr(fn func(ctx context.Context, cli tetragon.FineGuidanceSensorsClient), fnErr func(err error)) { @@ -93,7 +76,7 @@ func CliRunErr(fn func(ctx context.Context, cli tetragon.FineGuidanceSensorsClie for { conn, serverAddr, err = connect(ctx) if err != nil { - if attempts < viper.GetInt(KeyRetries) { + if attempts < Retries { // Exponential backoff attempts++ logger.GetLogger().WithField("server-address", serverAddr).WithField("attempts", attempts).WithError(err).Error("Connection attempt failed, retrying...") @@ -144,7 +127,7 @@ func NewConnectedClient() ConnectedClient { for { c.conn, serverAddr, err = connect(c.Ctx) if err != nil { - if attempts < viper.GetInt(KeyRetries) { + if attempts < Retries { // Exponential backoff attempts++ logger.GetLogger().WithField("server-address", serverAddr).WithField("attempts", attempts).WithError(err).Error("Connection attempt failed, retrying...") diff --git a/cmd/tetra/common/flags.go b/cmd/tetra/common/flags.go index 3935515e79f..bb7cef4555b 100644 --- a/cmd/tetra/common/flags.go +++ b/cmd/tetra/common/flags.go @@ -3,6 +3,8 @@ package common +import "time" + const ( KeyColor = "color" // string KeyDebug = "debug" // bool @@ -12,3 +14,14 @@ const ( KeyTimeout = "timeout" // duration KeyRetries = "retries" // int ) + +const ( + defaultServerAddress = "localhost:54321" +) + +var ( + Debug bool + ServerAddress string + Timeout time.Duration + Retries int +) diff --git a/cmd/tetra/getevents/getevents.go b/cmd/tetra/getevents/getevents.go index bcd06e4153a..540505facbb 100644 --- a/cmd/tetra/getevents/getevents.go +++ b/cmd/tetra/getevents/getevents.go @@ -16,7 +16,6 @@ import ( "github.com/cilium/tetragon/pkg/encoder" "github.com/cilium/tetragon/pkg/logger" "github.com/spf13/cobra" - "github.com/spf13/viper" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "google.golang.org/protobuf/types/known/fieldmaskpb" @@ -184,7 +183,7 @@ func New() *cobra.Command { fi, _ := os.Stdin.Stat() if fi.Mode()&os.ModeNamedPipe != 0 { // read events from stdin - getEvents(context.Background(), newIOReaderClient(os.Stdin, viper.GetBool("debug"))) + getEvents(context.Background(), newIOReaderClient(os.Stdin, common.Debug)) return } // connect to server diff --git a/cmd/tetra/main.go b/cmd/tetra/main.go index 90044933ac7..cfa31a9d7c7 100644 --- a/cmd/tetra/main.go +++ b/cmd/tetra/main.go @@ -10,7 +10,6 @@ import ( "github.com/cilium/tetragon/pkg/logger" "github.com/sirupsen/logrus" "github.com/spf13/cobra" - "github.com/spf13/viper" ) var ( @@ -32,7 +31,7 @@ func New() *cobra.Command { cmd.Help() }, PersistentPreRun: func(cmd *cobra.Command, args []string) { - if viper.GetBool(common.KeyDebug) { + if common.Debug { logger.DefaultLogger.SetLevel(logrus.DebugLevel) } }, @@ -42,10 +41,9 @@ func New() *cobra.Command { addCommands(rootCmd) flags := rootCmd.PersistentFlags() - flags.BoolP(common.KeyDebug, "d", false, "Enable debug messages") - flags.String(common.KeyServerAddress, "localhost:54321", "gRPC server address") - flags.Duration(common.KeyTimeout, 10*time.Second, "Connection timeout") - flags.Int(common.KeyRetries, 0, "Connection retries with exponential backoff") - viper.BindPFlags(flags) + flags.BoolVarP(&common.Debug, common.KeyDebug, "d", false, "Enable debug messages") + flags.StringVar(&common.ServerAddress, common.KeyServerAddress, "", "gRPC server address") + flags.DurationVar(&common.Timeout, common.KeyTimeout, 10*time.Second, "Connection timeout") + flags.IntVar(&common.Retries, common.KeyRetries, 0, "Connection retries with exponential backoff") return rootCmd }